use crate::{class::Class, format_class};
use dioxus::prelude::*;
use std::borrow::Cow;
pub fn Message<'a>(cx: Scope<'a, MessageProps<'a>>) -> Element {
if cx.props.hidden {
return None;
}
let class = format_class!(cx, "message");
let close_class = format_class!(cx, close_class, "delete");
let title = cx.props.title.as_deref().unwrap_or_default();
render! {
div {
class: "{class}",
if !title.is_empty() {
render!(div {
class: "message-header",
span { "{title}" }
button {
class: "{close_class}",
onclick: move |_event| {
if let Some(handler) = cx.props.on_close.as_ref() {
handler.call(false);
}
}
}
})
}
div {
class: "message-body",
&cx.props.children
}
}
}
}
#[derive(Props)]
pub struct MessageProps<'a> {
#[props(into)]
pub class: Option<Class<'a>>,
#[props(into)]
pub close_class: Option<Class<'a>>,
pub on_close: Option<EventHandler<'a, bool>>,
#[props(default = false)]
pub hidden: bool,
#[props(into)]
pub title: Option<Cow<'a, str>>,
children: Element<'a>,
}