feat!(app): ContextDrawer return type for context_drawer method
This commit is contained in:
parent
aaadf7199e
commit
a355a049d9
7 changed files with 115 additions and 68 deletions
62
src/app/context_drawer.rs
Normal file
62
src/app/context_drawer.rs
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
use std::borrow::Cow;
|
||||
|
||||
use crate::Element;
|
||||
|
||||
pub struct ContextDrawer<'a, Message: Clone + 'static> {
|
||||
pub title: Option<Cow<'a, str>>,
|
||||
pub header_actions: Vec<Element<'a, Message>>,
|
||||
pub header: Option<Element<'a, Message>>,
|
||||
pub content: Element<'a, Message>,
|
||||
pub footer: Option<Element<'a, Message>>,
|
||||
pub on_close: Message,
|
||||
}
|
||||
|
||||
#[cfg(feature = "about")]
|
||||
pub fn about<'a, Message: Clone + 'static>(
|
||||
about: &'a crate::widget::about::About,
|
||||
on_url_press: impl Fn(String) -> Message,
|
||||
on_close: Message,
|
||||
) -> ContextDrawer<'a, Message> {
|
||||
context_drawer(crate::widget::about(about, on_url_press), on_close)
|
||||
}
|
||||
|
||||
pub fn context_drawer<'a, Message: Clone + 'static>(
|
||||
content: impl Into<Element<'a, Message>>,
|
||||
on_close: Message,
|
||||
) -> ContextDrawer<'a, Message> {
|
||||
ContextDrawer {
|
||||
title: None,
|
||||
content: content.into(),
|
||||
header_actions: vec![],
|
||||
footer: None,
|
||||
on_close,
|
||||
header: None,
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Message: Clone + 'static> ContextDrawer<'a, Message> {
|
||||
/// Set a context drawer header title
|
||||
pub fn title(mut self, title: impl Into<Cow<'a, str>>) -> Self {
|
||||
self.title = Some(title.into());
|
||||
self
|
||||
}
|
||||
/// App-specific actions at the start of the context drawer header
|
||||
pub fn header_actions(
|
||||
mut self,
|
||||
header_actions: impl IntoIterator<Item = Element<'a, Message>>,
|
||||
) -> Self {
|
||||
self.header_actions = header_actions.into_iter().collect();
|
||||
self
|
||||
}
|
||||
/// Non-scrolling elements placed below the context drawer title row
|
||||
pub fn header(mut self, header: impl Into<Element<'a, Message>>) -> Self {
|
||||
self.header = Some(header.into());
|
||||
self
|
||||
}
|
||||
|
||||
/// Elements placed below the context drawer scrollable
|
||||
pub fn footer(mut self, footer: impl Into<Element<'a, Message>>) -> Self {
|
||||
self.footer = Some(footer.into());
|
||||
self
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue