Compare commits
1 Commits
release-20
...
release-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a08fd9698f |
@@ -1,4 +1,5 @@
|
|||||||
use leptos::*;
|
use leptos::*;
|
||||||
|
use leptos_use::on_click_outside;
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
pub fn ContextMenu(
|
pub fn ContextMenu(
|
||||||
@@ -8,6 +9,10 @@ pub fn ContextMenu(
|
|||||||
on_close: Callback<()>,
|
on_close: Callback<()>,
|
||||||
on_action: Callback<(String, String)>, // (Action, Hash)
|
on_action: Callback<(String, String)>, // (Action, Hash)
|
||||||
) -> impl IntoView {
|
) -> impl IntoView {
|
||||||
|
let container_ref = create_node_ref::<html::Div>();
|
||||||
|
|
||||||
|
let _ = on_click_outside(container_ref, move |_| on_close.call(()));
|
||||||
|
|
||||||
let handle_action = move |action: &str| {
|
let handle_action = move |action: &str| {
|
||||||
let hash = torrent_hash.clone();
|
let hash = torrent_hash.clone();
|
||||||
let action_str = action.to_string();
|
let action_str = action.to_string();
|
||||||
@@ -22,16 +27,8 @@ pub fn ContextMenu(
|
|||||||
}
|
}
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
// Backdrop to catch clicks outside
|
|
||||||
<div
|
|
||||||
class="fixed inset-0 z-[99] cursor-default"
|
|
||||||
role="button"
|
|
||||||
tabindex="-1"
|
|
||||||
on:click=move |_| on_close.call(())
|
|
||||||
on:contextmenu=move |e| e.prevent_default()
|
|
||||||
></div>
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
node_ref=container_ref
|
||||||
class="fixed z-[100] min-w-[200px] animate-in fade-in zoom-in-95 duration-100"
|
class="fixed z-[100] min-w-[200px] animate-in fade-in zoom-in-95 duration-100"
|
||||||
style=format!("left: {}px; top: {}px", position.0, position.1)
|
style=format!("left: {}px; top: {}px", position.0, position.1)
|
||||||
on:contextmenu=move |e| e.prevent_default()
|
on:contextmenu=move |e| e.prevent_default()
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use leptos::*;
|
use leptos::*;
|
||||||
|
use leptos_use::on_click_outside;
|
||||||
use leptos_use::storage::use_local_storage;
|
use leptos_use::storage::use_local_storage;
|
||||||
use codee::string::FromToStringCodec;
|
use codee::string::FromToStringCodec;
|
||||||
use shared::GlobalLimitRequest;
|
use shared::GlobalLimitRequest;
|
||||||
@@ -114,19 +115,20 @@ pub fn StatusBar() -> impl IntoView {
|
|||||||
set_active_dropdown.set(0);
|
set_active_dropdown.set(0);
|
||||||
};
|
};
|
||||||
|
|
||||||
view! {
|
// Refs for click outside detection
|
||||||
// Transparent overlay to close dropdowns when clicking outside
|
let down_ref = create_node_ref::<html::Div>();
|
||||||
<Show when=move || active_dropdown.get() != 0>
|
let up_ref = create_node_ref::<html::Div>();
|
||||||
<div
|
let theme_ref = create_node_ref::<html::Div>();
|
||||||
class="fixed inset-0 z-[98] cursor-default"
|
|
||||||
on:pointerdown=move |_| close_all()
|
|
||||||
></div>
|
|
||||||
</Show>
|
|
||||||
|
|
||||||
|
let _ = on_click_outside(down_ref, move |_| if active_dropdown.get_untracked() == 1 { close_all() });
|
||||||
|
let _ = on_click_outside(up_ref, move |_| if active_dropdown.get_untracked() == 2 { close_all() });
|
||||||
|
let _ = on_click_outside(theme_ref, move |_| if active_dropdown.get_untracked() == 3 { close_all() });
|
||||||
|
|
||||||
|
view! {
|
||||||
<div class="fixed bottom-0 left-0 right-0 h-8 min-h-8 bg-base-200 border-t border-base-300 flex items-center px-4 text-xs gap-4 text-base-content/70 z-[99]">
|
<div class="fixed bottom-0 left-0 right-0 h-8 min-h-8 bg-base-200 border-t border-base-300 flex items-center px-4 text-xs gap-4 text-base-content/70 z-[99]">
|
||||||
|
|
||||||
// --- DOWNLOAD SPEED DROPDOWN ---
|
// --- DOWNLOAD SPEED DROPDOWN ---
|
||||||
<div class="relative">
|
<div class="relative" node_ref=down_ref>
|
||||||
<div
|
<div
|
||||||
class="flex items-center gap-2 cursor-pointer hover:text-primary transition-colors select-none"
|
class="flex items-center gap-2 cursor-pointer hover:text-primary transition-colors select-none"
|
||||||
title="Global Download Speed - Click to Set Limit"
|
title="Global Download Speed - Click to Set Limit"
|
||||||
@@ -179,7 +181,7 @@ pub fn StatusBar() -> impl IntoView {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
// --- UPLOAD SPEED DROPDOWN ---
|
// --- UPLOAD SPEED DROPDOWN ---
|
||||||
<div class="relative">
|
<div class="relative" node_ref=up_ref>
|
||||||
<div
|
<div
|
||||||
class="flex items-center gap-2 cursor-pointer hover:text-primary transition-colors select-none"
|
class="flex items-center gap-2 cursor-pointer hover:text-primary transition-colors select-none"
|
||||||
title="Global Upload Speed - Click to Set Limit"
|
title="Global Upload Speed - Click to Set Limit"
|
||||||
@@ -232,7 +234,7 @@ pub fn StatusBar() -> impl IntoView {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ml-auto flex items-center gap-4">
|
<div class="ml-auto flex items-center gap-4">
|
||||||
<div class="relative">
|
<div class="relative" node_ref=theme_ref>
|
||||||
<div
|
<div
|
||||||
class="btn btn-ghost btn-xs btn-square"
|
class="btn btn-ghost btn-xs btn-square"
|
||||||
title="Change Theme"
|
title="Change Theme"
|
||||||
|
|||||||
Reference in New Issue
Block a user