diff --git a/frontend/src/components/torrent/details.rs b/frontend/src/components/torrent/details.rs index 2ca590d..e4cec17 100644 --- a/frontend/src/components/torrent/details.rs +++ b/frontend/src/components/torrent/details.rs @@ -1,76 +1,109 @@ use leptos::prelude::*; -use crate::components::ui::sheet::*; use crate::components::ui::tabs::*; use crate::components::ui::skeleton::*; -use shared::Torrent; #[component] -pub fn TorrentDetailsSheet() -> impl IntoView { +pub fn TorrentDetailsPanel() -> impl IntoView { let store = use_context::().expect("store not provided"); - // Setup an effect to open the sheet when a torrent is selected - Effect::new(move |_| { - if store.selected_torrent.get().is_some() { - if let Some(trigger) = document().get_element_by_id("torrent-details-trigger") { - use wasm_bindgen::JsCast; - let _ = trigger.dyn_into::().map(|el| el.click()); - } - } - }); - let selected_torrent = Memo::new(move |_| { let hash = store.selected_torrent.get()?; store.torrents.with(|map| map.get(&hash).cloned()) }); + let is_open = Signal::derive(move || store.selected_torrent.get().is_some()); + view! { - - - -
-
- }> -

+ // Mobil overlay backdrop + +
+ + + // Panel — masaüstünde sağ kolonda sabit, mobilde fixed overlay +
+ // İpucu: panel kapalıyken içeriği render etme + + // Başlık +
+
+ } + > +

{move || selected_torrent.get().map(|t| t.name).unwrap_or_default()}

- }> -

+ } + > +

{move || selected_torrent.get().map(|t| format!("{:?}", t.status)).unwrap_or_default()} - {move || selected_torrent.get().map(|t| format!("{:.1}%", t.percent_complete)).unwrap_or_default()} + + {move || selected_torrent.get().map(|t| format!("{:.1}%", t.percent_complete)).unwrap_or_default()} +

- // Custom close button that also resets store.selected_torrent - - - + // Kapat butonu +
-
+ // Sekmeler + içerik +
- - + + "Genel" - + "Dosyalar" - + "İzleyiciler" - + "Eşler" - - - + + impl IntoView { }); view! { -
+
// Aktarım
-

"Aktarım"

-
- +

"Aktarım"

+
- - - - - - - - - - -
-
- - // İzleyici -
-

"İzleyici"

-
- - +
// Genel
-

"Genel"

-
- - - - - +

"Genel"

+
+ +
+ + +
+
@@ -156,8 +171,8 @@ pub fn TorrentDetailsSheet() -> impl IntoView {
}), None => leptos::either::Either::Right(view! { -
- +
+

"Dosya yükleniyor..."

}), @@ -172,8 +187,8 @@ pub fn TorrentDetailsSheet() -> impl IntoView {
}), None => leptos::either::Either::Right(view! { -
- +
+

"İzleyici yükleniyor..."

}), @@ -181,29 +196,29 @@ pub fn TorrentDetailsSheet() -> impl IntoView { -
- +
+

"Eş listesi yakında eklenecek"

- - + +
} } #[component] fn InfoItem( - label: &'static str, - value: String, + label: &'static str, + value: String, #[prop(optional)] class: &'static str ) -> impl IntoView { view! { -
- {label} - {value} +
+ {label} + {value}
} } diff --git a/frontend/src/components/torrent/table.rs b/frontend/src/components/torrent/table.rs index 3e78227..0c5cefb 100644 --- a/frontend/src/components/torrent/table.rs +++ b/frontend/src/components/torrent/table.rs @@ -218,7 +218,9 @@ pub fn TorrentTable() -> impl IntoView { }); view! { -
+
+ // Sol: liste alanı +
// --- TOPBAR ---
@@ -249,7 +251,6 @@ pub fn TorrentTable() -> impl IntoView {
- // Trigger the hidden AlertDialog from this menu item ().map(|el: web_sys::HtmlElement| el.click()); @@ -261,7 +262,6 @@ pub fn TorrentTable() -> impl IntoView { - // Hidden AlertDialog moved outside the DropdownMenuContent to ensure proper centering @@ -553,9 +553,11 @@ pub fn TorrentTable() -> impl IntoView {
"VibeTorrent v3"
- -
+ + // Sağ: sabit detay paneli + +
}.into_any() }