From 8f3c6788bd0713ac0c740180fff0aac43181a87b Mon Sep 17 00:00:00 2001 From: Pauan Date: Thu, 29 Apr 2021 19:59:56 +0200 Subject: [PATCH] Fixing bug where child_signal wouldn't trigger after_removed --- src/operations.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/operations.rs b/src/operations.rs index a03508f..911f629 100644 --- a/src/operations.rs +++ b/src/operations.rs @@ -126,12 +126,31 @@ pub(crate) fn insert_child_signal(element: Node, callbacks: &mut Callbacks, s self.child = child; } + + fn on_remove(&mut self) { + if let Some(old_child) = self.child.take() { + old_child.callbacks.discard(); + } + + self.child = None; + } + } + + struct OnRemove(Rc>); + + impl Discard for OnRemove { + #[inline] + fn discard(self) { + self.0.borrow_mut().on_remove(); + } } let state = State::new(); State::after_insert(state.clone(), callbacks); + callbacks.after_remove(OnRemove(state.clone())); + callbacks.after_remove(for_each(signal, move |child| { let mut state = state.borrow_mut(); state.after_remove(&element, child);