use std::rc::Rc;
use sycamore::{prelude::RcSignal, reactive::ScopeDisposer};
#[derive(Clone, Default)]
pub(crate) struct PageDisposer<'app> {
disposer: RcSignal<Option<ScopeDisposer<'app>>>,
}
impl<'app> PageDisposer<'app> {
pub(crate) unsafe fn update(&self, new_disposer: ScopeDisposer<'app>) {
if self.disposer.get().is_some() {
let old_disposer_rc = self.disposer.take();
let old_disposer_option = Rc::try_unwrap(old_disposer_rc).unwrap(); let old_disposer = old_disposer_option.unwrap();
old_disposer.dispose();
}
self.disposer.set(Some(new_disposer));
}
}