use crate::{
direction::LayoutDirection,
overlay::{BottomSheet, Dialog},
toast::Toast,
};
pub struct AppLayout<Node, Message>
where
Message: Clone,
{
pub body: Node,
pub header: Option<Node>,
pub side_bar: Option<Node>,
pub footer: Option<Node>,
pub header_menu: Option<Node>,
pub context_menu: Option<Node>,
pub dialog: Option<Dialog<Node, Message>>,
pub bottom_sheet: Option<BottomSheet<Node, Message>>,
pub toasts: Vec<Toast<Message>>,
pub direction: LayoutDirection,
pub on_close_menus: Option<Message>,
pub on_close_modals: Option<Message>,
}
impl<Node, Message> AppLayout<Node, Message>
where
Message: Clone,
{
pub fn new(body: Node) -> Self {
Self {
body,
header: None,
side_bar: None,
footer: None,
header_menu: None,
context_menu: None,
dialog: None,
bottom_sheet: None,
toasts: Vec::new(),
direction: LayoutDirection::default(),
on_close_menus: None,
on_close_modals: None,
}
}
#[must_use]
pub fn header(mut self, header: Node) -> Self {
self.header = Some(header);
self
}
#[must_use]
pub fn side_bar(mut self, side_bar: Node) -> Self {
self.side_bar = Some(side_bar);
self
}
#[must_use]
pub fn footer(mut self, footer: Node) -> Self {
self.footer = Some(footer);
self
}
#[must_use]
pub fn header_menu(mut self, menu: Node) -> Self {
self.header_menu = Some(menu);
self
}
#[must_use]
pub fn context_menu(mut self, menu: Node) -> Self {
self.context_menu = Some(menu);
self
}
#[must_use]
pub fn dialog(mut self, dialog: Dialog<Node, Message>) -> Self {
self.dialog = Some(dialog);
self
}
#[must_use]
pub fn bottom_sheet(mut self, sheet: BottomSheet<Node, Message>) -> Self {
self.bottom_sheet = Some(sheet);
self
}
#[must_use]
pub fn toasts(mut self, toasts: Vec<Toast<Message>>) -> Self {
self.toasts = toasts;
self
}
#[must_use]
pub fn direction(mut self, direction: LayoutDirection) -> Self {
self.direction = direction;
self
}
#[must_use]
pub fn on_close_menus(mut self, msg: Message) -> Self {
self.on_close_menus = Some(msg);
self
}
#[must_use]
pub fn on_close_modals(mut self, msg: Message) -> Self {
self.on_close_modals = Some(msg);
self
}
}