Send mount event when hydrating (#1764)

This commit is contained in:
Hampus Lidin authored and GitHub committed 2023-12-30 13:53:12 -06:00
1 parent 3733fbf47d
commit 0166eafafb
2 files changed
+29 -16

No files matched your search

+15 -11
View File
@@ -256,17 +256,21 @@ impl WebsysDom {
i.flush(); i.flush();
for id in to_mount { for id in to_mount {
let node = get_node(id.0 as u32); self.send_mount_event(id);
if let Some(element) = node.dyn_ref::<Element>() { }
let data: MountedData = element.into(); }
let data = Rc::new(data);
let _ = self.event_channel.unbounded_send(UiEvent { pub(crate) fn send_mount_event(&self, id: ElementId) {
name: "mounted".to_string(), let node = get_node(id.0 as u32);
bubbles: false, if let Some(element) = node.dyn_ref::<Element>() {
element: id, let data: MountedData = element.into();
data, let data = Rc::new(data);
}); let _ = self.event_channel.unbounded_send(UiEvent {
} name: "mounted".to_string(),
bubbles: false,
element: id,
data,
});
} }
} }
} }
+14 -5
View File
@@ -125,6 +125,7 @@ impl WebsysDom {
children, attrs, .. children, attrs, ..
} => { } => {
let mut mounted_id = None; let mut mounted_id = None;
let mut should_send_mount_event = true;
for attr in *attrs { for attr in *attrs {
if let dioxus_core::TemplateAttribute::Dynamic { id } = attr { if let dioxus_core::TemplateAttribute::Dynamic { id } = attr {
let attribute = &vnode.dynamic_attrs[*id]; let attribute = &vnode.dynamic_attrs[*id];
@@ -134,16 +135,24 @@ impl WebsysDom {
let name = attribute.name; let name = attribute.name;
if let AttributeValue::Listener(_) = value { if let AttributeValue::Listener(_) = value {
let event_name = &name[2..]; let event_name = &name[2..];
self.interpreter.new_event_listener( match event_name {
event_name, "mounted" => should_send_mount_event = true,
id.0 as u32, _ => {
event_bubbles(event_name) as u8, self.interpreter.new_event_listener(
); event_name,
id.0 as u32,
event_bubbles(event_name) as u8,
);
}
}
} }
} }
} }
if let Some(id) = mounted_id { if let Some(id) = mounted_id {
set_node(hydrated, id, current_child.clone()?); set_node(hydrated, id, current_child.clone()?);
if should_send_mount_event {
self.send_mount_event(id);
}
} }
if !children.is_empty() { if !children.is_empty() {
let mut children_current_child = current_child let mut children_current_child = current_child