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 mut hook_context_for_closure: HookContext = hook_context.clone();
let inner: Rc<RefCell<RenderFnInner>> =
Rc::new(RefCell::new(RenderFnInner::new(Box::new(move || {
hook_context_for_closure.reset_hook_index();
render_fn()
}))));
let dynamic_node: DynamicNode = DynamicNode::new(inner, 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 mut hook_context_for_closure: HookContext = hook_context.clone();
let inner: Rc<RefCell<RenderFnInner>> =
Rc::new(RefCell::new(RenderFnInner::new(Box::new(move || {
hook_context_for_closure.reset_hook_index();
render_fn(&mut hook_context_for_closure)
}))));
let dynamic_node: DynamicNode = DynamicNode::new(inner, hook_context);
VirtualNode::Dynamic(dynamic_node)
}