added deletion of items

This commit is contained in:
2026-04-13 14:58:10 -04:00
parent 8ff4fa74e4
commit a6e2156d97
7 changed files with 139 additions and 31 deletions
+36 -13
View File
@@ -13,17 +13,16 @@ use crate::{
pub struct MediaClassChangeEvent
{
pub index: usize,
pub class: String,
pub id: String,
pub class: i32,
}
#[derive(PartialEq, Clone, Props)]
pub struct MediaItemProps
{
pub item: MediaModel,
pub index: usize,
pub on_class_changed: Option<EventHandler<MediaClassChangeEvent>>,
pub on_deleted: Option<EventHandler<usize>>,
pub on_deleted: Option<EventHandler<String>>,
}
#[component]
@@ -100,8 +99,11 @@ pub fn MediaItem(props: MediaItemProps) -> Element
value: "{id}",
on_select: move |id: String|{
spawn(async move {
if let Ok(_) = set_class(id, 0).await{
if let Ok(_) = set_class(&id, 0).await{
class_signal.set("");
if let Some(handler) = props.on_class_changed{
handler.call(MediaClassChangeEvent { id, class: 0 });
}
}
});
},
@@ -118,12 +120,15 @@ pub fn MediaItem(props: MediaItemProps) -> Element
{
if class_signal() != "blur" {
rsx!{ContextMenuItem {
index: 2 as usize,
index: 3 as usize,
value: "{id}",
on_select: move |id: String|{
spawn(async move {
if let Ok(_) = set_class(id, 1).await{
if let Ok(_) = set_class(&id, 1).await{
class_signal.set("blur");
if let Some(handler) = props.on_class_changed{
handler.call(MediaClassChangeEvent { id, class: 1 });
}
}
});
},
@@ -140,12 +145,15 @@ pub fn MediaItem(props: MediaItemProps) -> Element
{
if class_signal() != "secret" {
rsx!{ContextMenuItem {
index: 2 as usize,
index: 4 as usize,
value: "{id}",
on_select: move |id: String|{
spawn(async move {
if let Ok(_) = set_class(id, 2).await{
if let Ok(_) = set_class(&id, 2).await{
class_signal.set("secret");
if let Some(handler) = props.on_class_changed{
handler.call(MediaClassChangeEvent { id, class: 2 });
}
}
});
},
@@ -160,8 +168,17 @@ pub fn MediaItem(props: MediaItemProps) -> Element
}else{rsx!{}}
}
ContextMenuItem {
index: 2 as usize,
value: "",
index: 5 as usize,
value: "{id}",
on_select: move |id: String|{
spawn(async move {
if let Ok(_) = delete_media(id.clone()).await{
if let Some(handler) = props.on_deleted {
handler.call(id);
}
}
});
},
div{
class: "contextItem",
div{
@@ -192,13 +209,19 @@ pub fn MediaItemPlaceHolder() -> Element
};
}
async fn set_class(id: String, class: i32) -> Result<Response<()>, Status>
async fn delete_media(id: String) -> Result<Response<()>, Status>
{
let mut client = get_rpc_client();
return client.delete_media(Id { value: id }).await;
}
async fn set_class(id: &String, class: i32) -> Result<Response<()>, Status>
{
let mut client = get_rpc_client();
return client
.set_media_class(SetMediaClassRequest {
class: class,
id: Some(Id { value: id }),
id: Some(Id { value: id.clone() }),
})
.await;
}