use crate::{
innerlude::{MountId, WriteMutations},
nodes::VNode,
virtual_dom::VirtualDom,
};
mod attributes;
mod component;
pub(crate) mod context;
mod iterator;
pub(crate) mod node;
pub(crate) mod placement;
pub(crate) mod template;
pub(crate) struct CreatedVNode {
pub(crate) nodes: usize,
pub(crate) mount: MountId,
}
impl VirtualDom {
pub(crate) fn create_children_with_mounts(
&mut self,
mut to: Option<&mut (dyn WriteMutations + '_)>,
nodes: &[VNode],
logical_parent: Option<MountId>,
mut created_mount: impl FnMut(&mut VirtualDom, usize, MountId),
) -> usize {
let mut created = 0;
for (idx, child) in nodes.iter().enumerate() {
let child = child.create_mounted(self, logical_parent, to.as_deref_mut());
created += child.nodes;
created_mount(self, idx, child.mount);
}
created
}
fn remove_nodes(
&mut self,
mut to: Option<&mut (dyn WriteMutations + '_)>,
nodes: &[VNode],
mounts: &[MountId],
) {
for (node, mount) in nodes.iter().zip(mounts).rev() {
node.remove_node(*mount, self, to.as_deref_mut());
}
}
}