ratatui-kit 0.10.3

A framework for building interactive terminal user interfaces with ratatui
Documentation
use crate::Hook;

mod private {
    pub trait Sealed {}
    impl Sealed for crate::Hooks<'_, '_> {}
}

// 在组件销毁时执行回调。注意不要在回调中使用State。
pub trait UseOnDrop: private::Sealed {
    fn use_on_drop<F>(&mut self, f: F)
    where
        F: FnMut() + 'static;
}

#[derive(Default)]
struct UseOnDropImpl {
    callback: Option<Box<dyn FnMut()>>,
}

impl Hook for UseOnDropImpl {
    fn on_drop(&mut self) {
        if let Some(mut callback) = self.callback.take() {
            callback();
        }
    }
}

impl UseOnDrop for crate::Hooks<'_, '_> {
    // 在组件销毁时执行回调。注意不要在回调中使用State。
    fn use_on_drop<F>(&mut self, f: F)
    where
        F: FnMut() + 'static,
    {
        let hook = self.use_hook(UseOnDropImpl::default);
        hook.callback.replace(Box::new(f));
    }
}