use leptos::*;
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
pub enum Type {
Success,
Warning,
Error,
#[default]
Info,
}
impl Type {
pub fn as_str(&self) -> &'static str {
match self {
Type::Success => "success",
Type::Warning => "warning",
Type::Error => "error",
Type::Info => "info",
}
}
}
#[component]
pub fn Alert(
#[prop(into, optional)] title: MaybeSignal<String>,
#[prop(into, optional, default = Type::Info.into())] type_: MaybeSignal<Type>,
#[prop(into, optional)] description: MaybeSignal<String>,
#[prop(into, optional, default = true.into())] closable: MaybeSignal<bool>,
#[prop(into, optional, default = false.into())] center: MaybeSignal<bool>,
#[prop(into, optional)] close_text: MaybeSignal<String>,
#[prop(into, optional, default = false.into())] show_icon: MaybeSignal<bool>,
#[prop(into, optional)] on_close: Option<Callback<i32>>,
) -> impl IntoView
{
view! {
<el-alert
title=title
type=type_.get().as_str()
description=description
prop:closable=closable
center=center
close-text=close_text
show-icon=show_icon
on:ce-close=move|_: leptos::ev::CustomEvent| {
if let Some(cb) = on_close {
cb.call(0);
}
}
>
</el-alert>
}
}