Skip to content

Commit a28080d

Browse files
committed
Fixed root context not working.
1 parent cdab722 commit a28080d

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

src/context.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,8 @@ impl KayakRootContext {
227227
parent_id: Option<Entity>,
228228
context_entity: Entity,
229229
) {
230-
if let Some(parent_id) = parent_id {
231-
self.context_entities
232-
.add_context_entity::<T>(parent_id, context_entity);
233-
}
230+
self.context_entities
231+
.add_context_entity::<T>(parent_id, context_entity);
234232
}
235233

236234
/// Returns a new/existing widget entity.

src/context_entities.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use dashmap::DashMap;
88

99
#[derive(Debug, Clone)]
1010
pub struct ContextEntities {
11-
ce: Arc<DashMap<Entity, DashMap<TypeId, Entity>>>,
11+
ce: Arc<DashMap<Option<Entity>, DashMap<TypeId, Entity>>>,
1212
}
1313

1414
impl ContextEntities {
@@ -20,7 +20,7 @@ impl ContextEntities {
2020

2121
pub fn add_context_entity<T: Default + 'static>(
2222
&self,
23-
parent_id: Entity,
23+
parent_id: Option<Entity>,
2424
context_entity: Entity,
2525
) {
2626
if !self.ce.contains_key(&parent_id) {
@@ -30,7 +30,7 @@ impl ContextEntities {
3030
inner.insert(T::default().type_id(), context_entity);
3131
}
3232

33-
pub fn get_context_entity<T: Default + 'static>(&self, parent_id: Entity) -> Option<Entity> {
33+
pub fn get_context_entity<T: Default + 'static>(&self, parent_id: Option<Entity>) -> Option<Entity> {
3434
if !self.ce.contains_key(&parent_id) {
3535
return None;
3636
}

src/widget_context.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,8 @@ impl KayakWidgetContext {
7272
parent_id: Option<Entity>,
7373
context_entity: Entity,
7474
) {
75-
if let Some(parent_id) = parent_id {
76-
self.context_entities
77-
.add_context_entity::<T>(parent_id, context_entity);
78-
}
75+
self.context_entities
76+
.add_context_entity::<T>(parent_id, context_entity);
7977
}
8078

8179
/// Finds the closest matching context entity by traversing up the tree.
@@ -86,7 +84,7 @@ impl KayakWidgetContext {
8684
// Check self first..
8785
if let Some(entity) = self
8886
.context_entities
89-
.get_context_entity::<T>(current_entity)
87+
.get_context_entity::<T>(Some(current_entity))
9088
{
9189
return Some(entity);
9290
}
@@ -97,12 +95,20 @@ impl KayakWidgetContext {
9795
while parent.is_some() {
9896
if let Some(entity) = self
9997
.context_entities
100-
.get_context_entity::<T>(parent.unwrap().0)
98+
.get_context_entity::<T>(Some(parent.unwrap().0))
10199
{
102100
return Some(entity);
103101
}
104102
parent = tree.get_parent(parent.unwrap());
105103
}
104+
105+
// Finally check root AKA no parent.
106+
if let Some(entity) = self
107+
.context_entities
108+
.get_context_entity::<T>(None)
109+
{
110+
return Some(entity);
111+
}
106112
}
107113

108114
None

0 commit comments

Comments
 (0)