use crate::locales::trl; use leptos::prelude::*; use crate::app::DialogHelper; use crate::validator::Validator; #[derive(Copy, Clone)] pub struct DialogOpener { visible: ReadSignal, set_visible: WriteSignal, empty: ReadSignal, set_empty: WriteSignal, not_checked: ReadSignal>, set_not_checked: WriteSignal>, show_err: RwSignal, // Context is not available in event handlers, so the helper is looked up when the opener is created dlg_helper: Option } impl DialogOpener { pub fn new() -> Self { let (visible, set_visible) = signal(false); let (empty, set_empty) = signal("".to_string()); let (not_checked, set_not_checked) = signal(None); let show_err = RwSignal::new(false); DialogOpener { visible, set_visible, empty, set_empty, not_checked, set_not_checked, show_err, dlg_helper: use_context::() } } pub fn visible(&self) -> bool { self.visible.get() } pub fn show(&self) { if let Some(dlg_helper) = self.dlg_helper { dlg_helper.set_opened(true); } self.set_visible.set(true); } pub fn hide(&self) { if let Some(dlg_helper) = self.dlg_helper { dlg_helper.set_opened(false); } self.set_visible.set(false); self.set_empty.set("".to_string()); self.set_not_checked.set(None); self.show_err.set(false); } pub fn empty(&self) -> String { self.empty.get() } pub fn not_checked(&self) -> Option { self.not_checked.get() } pub fn show_err(&self) -> bool { self.show_err.get() } pub fn display_err(&self) { self.show_err.set(true); } } #[component] pub fn ModalDialog( opener: DialogOpener, title: &'static str, #[prop(optional)] validator: Option, children: Children, ) -> impl IntoView { view! { } } #[component] pub fn ModalBody(children: Children) -> impl IntoView { view! { } } #[component] pub fn ModalFooter(children: Children) -> impl IntoView { view! { } } #[component] pub fn DlgNotLoaded(opener: DialogOpener, title: &'static str) -> impl IntoView { view! {
{trl("Entity not loaded")}
} }