fix: all remaining bugs with props
This commit is contained in:
parent
5e14481714
commit
475d1ef90a
8 changed files with 123 additions and 16 deletions
|
|
@ -61,6 +61,7 @@ pub fn RealmSceneViewer(
|
|||
#[prop(optional, into)] on_prop_scale_update: Option<Callback<(Uuid, f32)>>,
|
||||
#[prop(optional, into)] on_prop_move: Option<Callback<(Uuid, f64, f64)>>,
|
||||
#[prop(optional, into)] on_prop_lock_toggle: Option<Callback<(Uuid, bool)>>,
|
||||
#[prop(optional, into)] on_prop_delete: Option<Callback<Uuid>>,
|
||||
) -> impl IntoView {
|
||||
let is_guest = is_guest.unwrap_or_else(|| Signal::derive(|| false));
|
||||
let settings = settings.unwrap_or_else(|| Signal::derive(ViewerSettings::default));
|
||||
|
|
@ -131,6 +132,7 @@ pub fn RealmSceneViewer(
|
|||
let move_mode_preview_position = RwSignal::new((0.0_f64, 0.0_f64));
|
||||
let (move_mode_prop_scale, set_move_mode_prop_scale) = signal(1.0_f32);
|
||||
let (prop_context_is_locked, set_prop_context_is_locked) = signal(false);
|
||||
let (prop_context_name, set_prop_context_name) = signal(Option::<String>::None);
|
||||
|
||||
// Click handler for movement (props are now handled via context menu)
|
||||
#[cfg(feature = "hydrate")]
|
||||
|
|
@ -221,6 +223,7 @@ pub fn RealmSceneViewer(
|
|||
|
||||
set_scale_mode_initial_scale.set(prop.scale);
|
||||
set_prop_context_is_locked.set(prop.is_locked);
|
||||
set_prop_context_name.set(Some(prop.prop_name.clone()));
|
||||
set_move_mode_prop_scale.set(prop.scale);
|
||||
let rect = canvas.get_bounding_client_rect();
|
||||
set_scale_mode_prop_center.set((
|
||||
|
|
@ -598,7 +601,9 @@ pub fn RealmSceneViewer(
|
|||
<ContextMenu
|
||||
open=Signal::derive(move || prop_context_menu_open.get())
|
||||
position=Signal::derive(move || prop_context_menu_position.get())
|
||||
header=Signal::derive(move || Some("Prop".to_string()))
|
||||
header=Signal::derive(move || {
|
||||
prop_context_name.get().or_else(|| Some("Prop".to_string()))
|
||||
})
|
||||
items=Signal::derive(move || {
|
||||
let is_mod = is_moderator.map(|s| s.get()).unwrap_or(false);
|
||||
let is_locked = prop_context_is_locked.get();
|
||||
|
|
@ -613,12 +618,14 @@ pub fn RealmSceneViewer(
|
|||
label: if is_locked { "Unlock" } else { "Lock" }.to_string(),
|
||||
action: if is_locked { "unlock" } else { "lock" }.to_string(),
|
||||
});
|
||||
items.push(ContextMenuItem { label: "Delete".to_string(), action: "delete".to_string() });
|
||||
}
|
||||
items
|
||||
})
|
||||
on_select=Callback::new({
|
||||
let on_prop_lock_toggle = on_prop_lock_toggle.clone();
|
||||
let on_prop_click = on_prop_click.clone();
|
||||
let on_prop_delete = on_prop_delete.clone();
|
||||
move |action: String| {
|
||||
match action.as_str() {
|
||||
"pick_up" => {
|
||||
|
|
@ -649,6 +656,13 @@ pub fn RealmSceneViewer(
|
|||
}
|
||||
}
|
||||
}
|
||||
"delete" => {
|
||||
if let Some(prop_id) = prop_context_menu_target.get() {
|
||||
if let Some(ref callback) = on_prop_delete {
|
||||
callback.run(prop_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
set_prop_context_menu_open.set(false);
|
||||
|
|
@ -657,6 +671,7 @@ pub fn RealmSceneViewer(
|
|||
on_close=Callback::new(move |_: ()| {
|
||||
set_prop_context_menu_open.set(false);
|
||||
set_prop_context_menu_target.set(None);
|
||||
set_prop_context_name.set(None);
|
||||
})
|
||||
/>
|
||||
<ScaleOverlay
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue