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 } => {
|
LoadTemplate { name, index, id } => {
|
||||||
let template_id = self.templates[name][index];
|
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();
|
let clone = rdom.get_mut(clone_id).unwrap();
|
||||||
self.set_element_id(clone, id);
|
self.set_element_id(clone, id);
|
||||||
self.stack.push(clone_id);
|
self.stack.push(clone_id);
|
||||||
|
|||||||
@@ -163,19 +163,6 @@ impl<V: FromAnyValue + Send + Sync> RealDom<V> {
|
|||||||
self.tree.root()
|
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>> {
|
pub fn get(&self, id: NodeId) -> Option<NodeRef<'_, V>> {
|
||||||
self.tree.contains(id).then_some(NodeRef { id, dom: self })
|
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
|
.dirty_nodes
|
||||||
.mark_dirty(self.id, NodeMaskBuilder::ALL.build())
|
.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 = ()> {
|
pub enum NodeTypeMut<'a, V: FromAnyValue + Send + Sync = ()> {
|
||||||
|
|||||||
Reference in new issue
Block a user