Fixing bug where child_signal wouldn't trigger after_removed

This commit is contained in:
Pauan 2021-04-29 19:59:56 +02:00
parent 672af7b3ed
commit 8f3c6788bd
1 changed files with 19 additions and 0 deletions

View File

@ -126,12 +126,31 @@ pub(crate) fn insert_child_signal<A>(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<RefCell<State>>);
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);