fix mount event

This commit is contained in:
Evan Almloff committed 2024-01-12 17:47:27 -06:00
1 parent ba23512fa5
commit fe1b35d610
5 files changed
+41 -62

No files matched your search

+15 -1
View File
@@ -216,13 +216,27 @@ fn app(cx: Scope) -> Element {
r#"new FocusEvent("focusout",{bubbles: true})"#,
);
if **received_events == 12 {
if **received_events == 13 {
println!("all events recieved");
desktop_context.close();
}
render! {
div {
div {
width: "100px",
height: "100px",
onmounted: move |evt| {
to_owned![received_events];
async move {
let rect = evt.get_client_rect().await.unwrap();
println!("rect: {:?}", rect);
assert_eq!(rect.width(), 100.0);
assert_eq!(rect.height(), 100.0);
received_events.modify(|x| *x + 1)
}
}
}
button {
id: "button",
onclick: move |event| {
+2 -2
View File
@@ -6,7 +6,7 @@ use crate::{
LiveViewError,
};
use dioxus_core::{prelude::*, BorrowedAttributeValue, Mutations};
use dioxus_html::{event_bubbles, EventData, HtmlEvent, MountedData, PlatformEventData};
use dioxus_html::{event_bubbles, EventData, HtmlEvent, PlatformEventData};
use dioxus_interpreter_js::binary_protocol::Channel;
use futures_util::{pin_mut, SinkExt, StreamExt};
use rustc_hash::FxHashMap;
@@ -188,7 +188,7 @@ pub async fn run(mut vdom: VirtualDom, ws: impl LiveViewSocket) -> Result<(), Li
let element = LiveviewElement::new(evt.element, query_engine.clone());
vdom.handle_event(
&evt.name,
Rc::new(PlatformEventData::new(Box::new(MountedData::new(element)))),
Rc::new(PlatformEventData::new(Box::new(element))),
evt.element,
evt.bubbles,
);
+2 -4
View File
@@ -9,8 +9,8 @@
use dioxus_core::{
BorrowedAttributeValue, ElementId, Mutation, Template, TemplateAttribute, TemplateNode,
};
use dioxus_html::event_bubbles;
use dioxus_html::PlatformEventData;
use dioxus_html::{event_bubbles, MountedData};
use dioxus_interpreter_js::{get_node, minimal_bindings, save_template, Channel};
use futures_channel::mpsc;
use rustc_hash::FxHashMap;
@@ -267,13 +267,11 @@ impl WebsysDom {
pub(crate) fn send_mount_event(&self, id: ElementId) {
let node = get_node(id.0 as u32);
if let Some(element) = node.dyn_ref::<Element>() {
let data: MountedData = element.into();
let data = Box::new(data);
let _ = self.event_channel.unbounded_send(UiEvent {
name: "mounted".to_string(),
bubbles: false,
element: id,
data: PlatformEventData::new(data),
data: PlatformEventData::new(Box::new(element.clone())),
});
}
}