Dioxus Playground Hot Reload Support (#3098)
* feat: playground hr support * feat: playground hot-reload support * revision: playground hot reloading
This commit is contained in:
1 parent
0a72cbac5b
commit
273b70e9d6
1 file changed
+27
-1
@@ -30,7 +30,8 @@ pub(crate) fn init(runtime: Rc<Runtime>) -> UnboundedReceiver<HotReloadMsg> {
|
|||||||
let (tx, rx) = unbounded();
|
let (tx, rx) = unbounded();
|
||||||
|
|
||||||
// Wire up the websocket to the devserver
|
// Wire up the websocket to the devserver
|
||||||
make_ws(runtime, tx, POLL_INTERVAL_MIN, false);
|
make_ws(runtime, tx.clone(), POLL_INTERVAL_MIN, false);
|
||||||
|
playground(tx);
|
||||||
|
|
||||||
rx
|
rx
|
||||||
}
|
}
|
||||||
@@ -265,3 +266,28 @@ pub(crate) fn invalidate_browser_asset_cache() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Initialize required devtools for dioxus-playground.
|
||||||
|
///
|
||||||
|
/// This listens for window message events from other Windows (such as window.top when this is running in an iframe).
|
||||||
|
fn playground(tx: UnboundedSender<HotReloadMsg>) {
|
||||||
|
let window = web_sys::window().expect("this code should be running in a web context");
|
||||||
|
|
||||||
|
let binding = Closure::<dyn FnMut(MessageEvent)>::new(move |e: MessageEvent| {
|
||||||
|
let Ok(text) = e.data().dyn_into::<JsString>() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
let string: String = text.into();
|
||||||
|
let Ok(hr_msg) = serde_json::from_str::<HotReloadMsg>(&string) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
_ = tx.unbounded_send(hr_msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
let callback = binding.as_ref().unchecked_ref();
|
||||||
|
window
|
||||||
|
.add_event_listener_with_callback("message", callback)
|
||||||
|
.expect("event listener should be added successfully");
|
||||||
|
|
||||||
|
binding.forget();
|
||||||
|
}
|
||||||
Reference in new issue
Block a user