From 5ee9d6c4348a2f51adac827f715fb138918d1dc6 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 28 Jan 2022 12:04:16 -0500 Subject: [PATCH] fix: attach router listener to subscriber list --- packages/router/src/service.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/router/src/service.rs b/packages/router/src/service.rs index f2682f1f0..2378c5aee 100644 --- a/packages/router/src/service.rs +++ b/packages/router/src/service.rs @@ -43,6 +43,7 @@ impl RouterService { let location = history.location(); let path = location.path(); + let onchange_listeners = Rc::new(RefCell::new(HashSet::new())); let slots: Rc>> = Default::default(); let pending_events: Rc>> = Default::default(); let root_found = Rc::new(Cell::new(None)); @@ -52,6 +53,7 @@ impl RouterService { let regen_route = regen_route.clone(); let root_found = root_found.clone(); let slots = slots.clone(); + let onchange_listeners = onchange_listeners.clone(); move || { root_found.set(None); // checking if the route is valid is cheap, so we do it @@ -60,6 +62,13 @@ impl RouterService { regen_route(*slot); } + for listener in onchange_listeners.borrow_mut().iter() { + log::trace!("regenerating listener {:?}", listener); + regen_route(*listener); + } + + + // also regenerate the root regen_route(root_scope); @@ -74,7 +83,7 @@ impl RouterService { regen_route, slots, pending_events, - onchange_listeners: Rc::new(RefCell::new(HashSet::new())), + onchange_listeners, cur_path_params: Rc::new(RefCell::new(HashMap::new())), } }