From 586e29d8154e5758a927a8ea474d6772121168cc Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Sat, 4 Jun 2022 15:31:40 -0500 Subject: [PATCH] force rerender after rsx is updated --- packages/desktop/src/controller.rs | 1 + packages/rsx_interpreter/src/lib.rs | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/desktop/src/controller.rs b/packages/desktop/src/controller.rs index 5e243231f..09014567c 100644 --- a/packages/desktop/src/controller.rs +++ b/packages/desktop/src/controller.rs @@ -96,6 +96,7 @@ impl DesktopController { RSX_CONTEXT.set_error_handler(DesktopErrorHandler { latest_connection: latest_out_connection_handle, }); + RSX_CONTEXT.provide_scheduler_channel(dom.get_scheduler_channel()); // connect to processes for incoming data std::thread::spawn(move || { diff --git a/packages/rsx_interpreter/src/lib.rs b/packages/rsx_interpreter/src/lib.rs index 2b829cc1f..f474848d3 100644 --- a/packages/rsx_interpreter/src/lib.rs +++ b/packages/rsx_interpreter/src/lib.rs @@ -1,5 +1,8 @@ use captuered_context::CapturedContext; -use dioxus_core::{Component, Element, LazyNodes, NodeFactory, Scope, ScopeState, VNode}; +use dioxus_core::{ + Component, Element, LazyNodes, NodeFactory, SchedulerMsg, Scope, ScopeId, ScopeState, VNode, +}; +use dioxus_hooks::UnboundedSender; use error::Error; use interperter::build; use lazy_static::lazy_static; @@ -87,6 +90,7 @@ pub struct RsxContext { pub struct RsxData { pub hm: HashMap, pub error_handler: Option>, + pub scheduler_channel: Option>, } impl std::fmt::Debug for RsxData { @@ -103,7 +107,13 @@ impl RsxContext { } pub fn insert(&self, loc: CodeLocation, text: String) { - self.data.write().unwrap().hm.insert(loc, text); + let mut write = self.data.write().unwrap(); + write.hm.insert(loc, text); + if let Some(channel) = &mut write.scheduler_channel { + channel + .unbounded_send(SchedulerMsg::Immediate(ScopeId(0))) + .unwrap() + } } pub fn read(&self) -> RwLockReadGuard { @@ -119,6 +129,10 @@ impl RsxContext { pub fn set_error_handler(&self, handler: impl ErrorHandler + 'static) { self.data.write().unwrap().error_handler = Some(Box::new(handler)); } + + pub fn provide_scheduler_channel(&self, channel: UnboundedSender) { + self.data.write().unwrap().scheduler_channel = Some(channel) + } } pub trait ErrorHandler: Send + Sync {