move clone method to nodemut
This commit is contained in:
1 parent
26d1cc2891
commit
da62e85731
2 files changed
+18
-14
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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 = ()> {
|
||||
|
||||
Reference in new issue
Block a user