use std::time::Duration;
use leptos::{
html::{Button, Div},
*,
};
#[derive(Copy, Clone)]
pub struct DialogContext {
pub trigger_ref: NodeRef<Button>,
pub open: RwSignal<bool>,
pub root: RwSignal<RootContext>,
pub prevent_scroll: bool,
pub hide_delay: Duration,
}
impl Default for DialogContext {
fn default() -> Self {
Self {
trigger_ref: NodeRef::default(),
open: create_rw_signal(false),
root: create_rw_signal(RootContext::default()),
prevent_scroll: true,
hide_delay: Duration::from_millis(200),
}
}
}
impl DialogContext {
pub fn open(&self) {
self.root.set(RootContext::default());
self.open.set(true);
}
pub fn close(&self) {
self.open.set(false);
}
pub fn toggle(&self) {
if self.open.get() {
self.close();
} else {
self.open();
}
}
}
#[derive(Copy, Clone)]
pub struct RootContext {
pub close_ref: NodeRef<Button>,
pub overlay_ref: NodeRef<Div>,
}
impl Default for RootContext {
fn default() -> Self {
Self {
overlay_ref: NodeRef::default(),
close_ref: NodeRef::default(),
}
}
}