fix liveview events

This commit is contained in:
Evan Almloff committed 2023-10-12 10:21:29 -05:00
1 parent f20b740abe
commit 1a4741ce04
4 files changed
+11 -8

No files matched your search

+1 -1
View File
@@ -26,7 +26,7 @@ pub struct Mutations<'a> {
/// Any templates encountered while diffing the DOM. /// Any templates encountered while diffing the DOM.
/// ///
/// These must be loaded into a cache before applying the edits /// These must be loaded into a cache before applying the edits
pub templates: Vec<Template<'a>>, pub templates: Vec<Template<'static>>,
/// Any mutations required to patch the renderer to match the layout of the VirtualDom /// Any mutations required to patch the renderer to match the layout of the VirtualDom
pub edits: Vec<Mutation<'a>>, pub edits: Vec<Mutation<'a>>,
@@ -288,7 +288,7 @@ mod js {
#[cfg(not(feature = "web"))] #[cfg(not(feature = "web"))]
#[bindgen] #[bindgen]
mod js { mod js {
const JS_FILE: &str = "./src/interpreter.js"; const JS_FILE: &str = "./packages/interpreter/src/interpreter.js";
fn mount_to_root() { fn mount_to_root() {
"{AppendChildren(root, stack.length-1);}" "{AppendChildren(root, stack.length-1);}"
@@ -329,10 +329,10 @@ mod js {
fn create_text_node(text: &str, id: u32) { fn create_text_node(text: &str, id: u32) {
"{node = document.createTextNode($text$); nodes[$id$] = node; stack.push(node);}" "{node = document.createTextNode($text$); nodes[$id$] = node; stack.push(node);}"
} }
fn create_element(element: &str<u8, el>) { fn create_element(element: &'static str<u8, el>) {
"{stack.push(document.createElement($element$))}" "{stack.push(document.createElement($element$))}"
} }
fn create_element_ns(element: &str<u8, el>, ns: &str<u8, namespace>) { fn create_element_ns(element: &'static str<u8, el>, ns: &'static str<u8, namespace>) {
"{stack.push(document.createElementNS($ns$, $element$))}" "{stack.push(document.createElementNS($ns$, $element$))}"
} }
fn create_placeholder(id: u32) { fn create_placeholder(id: u32) {
@@ -343,6 +343,7 @@ mod js {
} }
fn new_event_listener(event_name: &str<u8, evt>, id: u32, bubbles: u8) { fn new_event_listener(event_name: &str<u8, evt>, id: u32, bubbles: u8) {
r#" r#"
bubbles = bubbles == 1;
node = nodes[id]; node = nodes[id];
if(node.listening){ if(node.listening){
node.listening += 1; node.listening += 1;
@@ -352,10 +353,10 @@ mod js {
node.setAttribute('data-dioxus-id', `\${id}`); node.setAttribute('data-dioxus-id', `\${id}`);
// if this is a mounted listener, we send the event immediately // if this is a mounted listener, we send the event immediately
if (edit.name === "mounted") { if (event_name === "mounted") {
window.ipc.postMessage( window.ipc.postMessage(
serializeIpcMessage("user_event", { serializeIpcMessage("user_event", {
name: edit.name, name: event_name,
element: edit.id, element: edit.id,
data: null, data: null,
bubbles, bubbles,
+2
View File
@@ -1,3 +1,5 @@
const config = new InterpreterConfig(false);
function main() { function main() {
let root = window.document.getElementById("main"); let root = window.document.getElementById("main");
if (root != null) { if (root != null) {
+2 -2
View File
@@ -248,7 +248,7 @@ pub async fn run(mut vdom: VirtualDom, ws: impl LiveViewSocket) -> Result<(), Li
} }
fn add_template( fn add_template(
template: &Template, template: &Template<'static>,
channel: &mut Channel, channel: &mut Channel,
templates: &mut FxHashMap<String, u16>, templates: &mut FxHashMap<String, u16>,
max_template_count: &mut u16, max_template_count: &mut u16,
@@ -262,7 +262,7 @@ fn add_template(
*max_template_count += 1 *max_template_count += 1
} }
fn create_template_node(channel: &mut Channel, v: &TemplateNode) { fn create_template_node(channel: &mut Channel, v: &'static TemplateNode<'static>) {
use TemplateNode::*; use TemplateNode::*;
match v { match v {
Element { Element {