use yew::prelude::*;
#[derive(Clone, PartialEq)]
pub struct CloseMenuContext {
onclose: Callback<()>,
}
impl CloseMenuContext {
pub fn new(onclose: Callback<()>) -> Self {
Self { onclose }
}
pub fn close(&self) {
self.onclose.emit(());
}
}
#[hook]
pub fn use_close_menu_context() -> Option<CloseMenuContext> {
use_context()
}
#[derive(Clone, PartialEq)]
pub struct UseCloseMenu {
pub context: Option<CloseMenuContext>,
}
impl UseCloseMenu {
pub fn close(&self) {
if let Some(context) = &self.context {
context.close();
} else {
log::warn!("Ignored request to close menu: no context was found")
}
}
}
#[hook]
pub fn use_close_menu() -> UseCloseMenu {
UseCloseMenu {
context: use_context(),
}
}
#[hook]
pub fn use_close_menu_callback() -> Callback<()> {
let context = use_close_menu();
use_callback(context, |(), context| context.close())
}