use crate::*;
pub fn create_dynamic_node<F>(mut render_fn: F) -> VirtualNode
where
F: FnMut() -> VirtualNode + 'static,
{
let hook_context: HookContext = create_hook_context();
let render_fn: Rc<RefCell<dyn FnMut() -> VirtualNode>> = {
let mut hook_context: HookContext = hook_context;
Rc::new(RefCell::new(move || {
hook_context.reset_hook_index();
render_fn()
}))
};
let mut dynamic_node: DynamicNode = DynamicNode::default();
dynamic_node.set_render_fn(render_fn);
dynamic_node.set_hook_context(hook_context);
VirtualNode::Dynamic(dynamic_node)
}
pub fn create_dynamic_node_with_context<F>(mut render_fn: F) -> VirtualNode
where
F: FnMut(&mut HookContext) -> VirtualNode + 'static,
{
let hook_context: HookContext = create_hook_context();
let render_fn: Rc<RefCell<dyn FnMut() -> VirtualNode>> = {
let mut hook_context: HookContext = hook_context;
Rc::new(RefCell::new(move || {
hook_context.reset_hook_index();
render_fn(&mut hook_context)
}))
};
let mut dynamic_node: DynamicNode = DynamicNode::default();
dynamic_node.set_render_fn(render_fn);
dynamic_node.set_hook_context(hook_context);
VirtualNode::Dynamic(dynamic_node)
}