fix the context API

This commit is contained in:
Evan Almloff committed 2023-08-04 14:42:19 -07:00
1 parent 2b6b3b67b1
commit 0be5dbe715
2 files changed
+8 -7

No files matched your search

+5 -2
View File
@@ -65,8 +65,11 @@ impl<'b> VirtualDom {
/// Create a new template [`VNode`] and write it to the [`Mutations`] buffer. /// Create a new template [`VNode`] and write it to the [`Mutations`] buffer.
/// ///
/// This method pushes the ScopeID to the internal scopestack and returns the number of nodes created. /// This method pushes the ScopeID to the internal scopestack and returns the number of nodes created.
pub(crate) fn create_scope(&mut self, _scope: ScopeId, template: &'b VNode<'b>) -> usize { pub(crate) fn create_scope(&mut self, scope: ScopeId, template: &'b VNode<'b>) -> usize {
self.create(template) self.runtime.scope_stack.borrow_mut().push(scope);
let nodes = self.create(template);
self.runtime.scope_stack.borrow_mut().pop();
nodes
} }
/// Create this template and write its mutations /// Create this template and write its mutations
+3 -5
View File
@@ -115,21 +115,19 @@ impl ScopeContext {
let mut search_parent = self.parent_id; let mut search_parent = self.parent_id;
with_runtime(|runtime| { with_runtime(|runtime| {
let mut result = None;
while let Some(parent_id) = search_parent { while let Some(parent_id) = search_parent {
let parent = runtime.get_context(parent_id).unwrap(); let parent = runtime.get_context(parent_id).unwrap();
if let Some(shared) = parent if let Some(shared) = parent
.shared_contexts .shared_contexts
.borrow() .borrow()
.iter() .iter()
.find(|(k, _)| *k == TypeId::of::<T>()) .find_map(|(_, any)| any.downcast_ref::<T>())
{ {
result = shared.1.downcast_ref::<T>().cloned(); return Some(shared.clone());
break;
} }
search_parent = parent.parent_id; search_parent = parent.parent_id;
} }
result None
}) })
.flatten() .flatten()
} }