ContextMenu Renderer Finalized

This commit is contained in:
2025-08-10 00:04:55 -04:00
parent 6df6de098b
commit e832ccf07e
6 changed files with 97 additions and 75 deletions
+48 -8
View File
@@ -1,32 +1,72 @@
use dioxus::prelude::*;
use web_sys::window;
use crate::{HOST, rpc::aoba::MediaModel};
use crate::{
HOST,
components::{ContextMenu, ContextMenuItem, ContextMenuRenderer},
rpc::aoba::MediaModel,
};
#[derive(PartialEq, Clone, Props)]
pub struct MediaItemProps {
pub item: Option<MediaModel>,
pub oncontextmenu: Option<EventHandler<Event<MouseData>>>,
// pub oncontextmenu: Option<EventHandler<Event<MouseData>>>,
}
#[component]
pub fn MediaItem(props: MediaItemProps) -> Element {
let mut ct_renderer = use_context::<ContextMenuRenderer>();
if let Some(item) = props.item {
let mtype = item.media_type().as_str_name();
let filename = item.file_name;
let id = item.id.unwrap().value;
let thumb = item.thumb_url;
let url = item.media_url;
let download = format!("{HOST}{url}");
let oncontext = move |event: Event<MouseData>| {
println!("ContextMenu");
event.prevent_default();
event.stop_propagation();
let data = event.data();
if data.modifiers().ctrl() {
return;
}
let pos = data.coordinates().client();
let left = pos.x;
let top = pos.y;
let download = download.clone();
let menu: Element = rsx! {
ContextMenu {
left: left,
top: top,
items: rsx! {
ContextMenuItem {
name: "Details",
},
ContextMenuItem {
name: "Download",
onclick: move |_|{
_ = window().unwrap().open_with_url_and_target(&download, "_blank");
}
},
ContextMenuItem {
name: "Delete",
},
},
}
};
ct_renderer.menu.set(Some(menu));
};
return rsx! {
a {
class: "mediaItem",
href: "{HOST}/{url}",
href: "{HOST}{url}",
target: "_blank",
oncontextmenu: move |e| {
if let Some(handler) = props.oncontextmenu{
handler.call(e);
}
},
oncontextmenu: oncontext,
"data-id" : id,
img { src: "{HOST}{thumb}" }
span { class: "info",