fix hot reloading rsx with nested rsx calls

This commit is contained in:
Evan Almloff committed 2022-12-22 16:37:15 -06:00
1 parent 6f92e05d64
commit ef6ae642ba
1 file changed
+26 -20
+26 -20
View File
@@ -57,14 +57,27 @@ pub(crate) fn update_rsx(
+ ":"
+ &line.to_string()
+ ":"
+ &column.to_string();
+ &column.to_string()
// the byte index doesn't matter, but dioxus needs it
+ ":0";
if let Some(template) = new_call_body.update_template(
Some(old_call_body),
Box::leak(location.into_boxed_str()),
) {
*template_slot = Some(template);
messages.push(template);
// dioxus cannot handle empty templates
if template.roots.is_empty() {
return UpdateResult::NeedsRebuild;
} else {
// if the template is the same, don't send it
if let Some(old_template) = template_slot {
if old_template == &template {
continue;
}
}
*template_slot = Some(template);
messages.push(template);
}
} else {
return UpdateResult::NeedsRebuild;
}
@@ -119,7 +132,6 @@ impl FileMap {
let result = Self {
map: find_rs_files(path).unwrap(),
};
// log::info!("Files updated");
result
}
}
@@ -159,22 +171,16 @@ pub async fn hot_reload_handler(
}
let mut rx = state.messages.subscribe();
let hot_reload_handle = tokio::spawn(async move {
loop {
if let Ok(rsx) = rx.recv().await {
println!("sending");
if socket
.send(Message::Text(serde_json::to_string(&rsx).unwrap()))
.await
.is_err()
{
println!("error sending");
break;
};
}
loop {
if let Ok(rsx) = rx.recv().await {
if socket
.send(Message::Text(serde_json::to_string(&rsx).unwrap()))
.await
.is_err()
{
break;
};
}
});
hot_reload_handle.await.unwrap();
}
})
}