move clone method to nodemut

This commit is contained in:
Evan Almloff committed 2023-02-09 13:55:45 -06:00
1 parent 26d1cc2891
commit da62e85731
2 files changed
+18 -14

No files matched your search

+1 -1
View File
@@ -111,7 +111,7 @@ impl DioxusState {
}
LoadTemplate { name, index, id } => {
let template_id = self.templates[name][index];
let clone_id = rdom.clone_node(template_id);
let clone_id = rdom.get_mut(template_id).unwrap().clone_node();
let clone = rdom.get_mut(clone_id).unwrap();
self.set_element_id(clone, id);
self.stack.push(clone_id);
+17 -13
View File
@@ -163,19 +163,6 @@ impl<V: FromAnyValue + Send + Sync> RealDom<V> {
self.tree.root()
}
pub fn clone_node(&mut self, node_id: NodeId) -> NodeId {
let node = self.get(node_id).unwrap();
let new_node = node.node_type().clone();
let new_id = self.create_node(new_node).id();
let children = self.tree.children_ids(node_id).unwrap().to_vec();
for child in children {
let child_id = self.clone_node(child);
self.get_mut(new_id).unwrap().add_child(child_id);
}
new_id
}
pub fn get(&self, id: NodeId) -> Option<NodeRef<'_, V>> {
self.tree.contains(id).then_some(NodeRef { id, dom: self })
}
@@ -630,6 +617,23 @@ impl<'a, V: FromAnyValue + Send + Sync> NodeMut<'a, V> {
.dirty_nodes
.mark_dirty(self.id, NodeMaskBuilder::ALL.build())
}
#[inline]
pub fn clone_node(&mut self) -> NodeId {
let new_node = self.node_type().clone();
let rdom = self.real_dom_mut();
let new_id = rdom.create_node(new_node).id();
if let Some(children) = self.child_ids() {
let children = children.to_vec();
let rdom = self.real_dom_mut();
for child in children {
let child_id = rdom.get_mut(child).unwrap().clone_node();
rdom.get_mut(new_id).unwrap().add_child(child_id);
}
}
new_id
}
}
pub enum NodeTypeMut<'a, V: FromAnyValue + Send + Sync = ()> {