use crate::{class::Class, format_class};
use dioxus::prelude::*;
use std::borrow::Cow;
pub fn ModalCard<'a>(cx: Scope<'a, ModalCardProps<'a>>) -> Element {
let class = format_class!(cx, "modal");
let active_class = format_class!(cx, active_class, "is-active");
let close_class = format_class!(cx, close_class, "delete");
let container_class = if cx.props.visible {
format!("{class} {active_class}").into()
} else {
class
};
render! {
div {
class: "{container_class}",
div { class: "modal-background" }
div {
class: "modal-card",
header {
class: "modal-card-head",
div {
class: "modal-card-title",
"{cx.props.title}"
}
button {
class: "{close_class}",
onclick: move |event| {
if let Some(handler) = cx.props.on_close.as_ref() {
handler.call(event);
}
}
}
}
section {
class: "modal-card-body",
&cx.props.children
}
}
}
}
}
#[derive(Props)]
pub struct ModalCardProps<'a> {
#[props(into)]
pub class: Option<Class<'a>>,
#[props(into)]
pub active_class: Option<Class<'a>>,
#[props(into)]
pub close_class: Option<Class<'a>>,
pub on_close: Option<EventHandler<'a, MouseEvent>>,
#[props(default = false)]
pub visible: bool,
#[props(into)]
pub title: Cow<'a, str>,
children: Element<'a>,
}