use yew::prelude::*;
use crate::prelude::{Action, Button, ButtonVariant, ExtendClasses, Icon, Size, Title};
#[derive(Clone, PartialEq, Properties)]
pub struct EmptyStateProperties {
#[prop_or_default]
pub children: Html,
#[prop_or_default]
pub title: String,
#[prop_or_default]
pub icon: Option<Icon>,
#[prop_or_default]
pub primary: Option<Action>,
#[prop_or_default]
pub secondaries: Vec<Action>,
#[prop_or_default]
pub size: Option<Size>,
#[prop_or_default]
pub full_height: bool,
}
impl EmptyStateProperties {
fn title_size(&self) -> Size {
match self.size {
Some(Size::XLarge)
| Some(Size::XXLarge)
| Some(Size::XXXLarge)
| Some(Size::XXXXLarge) => Size::XXXXLarge,
_ => Size::Large,
}
}
}
#[function_component(EmptyState)]
pub fn empty_state(props: &EmptyStateProperties) -> Html {
let mut classes = Classes::from("pf-v5-c-empty-state");
if props.full_height {
classes.push("pf-m-full-height");
}
classes.extend_from(&props.size);
html! (
<div class={classes}>
<div class="pf-v5-c-empty-state__content">
<div class="pf-v5-c-empty-state__header">
if let Some(icon) = &props.icon {
<div class="pf-v5-c-empty-state__icon">
{ *icon }
</div>
}
<Title size={ props.title_size() }>{ props.title.clone() }</Title>
</div>
<div class="pf-v5-c-empty-state__body">
{ props.children.clone() }
</div>
if props.primary.is_some() || !props.secondaries.is_empty() {
<div class="pf-v5-c-empty-state__footer">
if let Some(action) = &props.primary {
<div class="pf-v5-c-empty-state__actions">
<Button label={action.label.clone()} variant={ButtonVariant::Primary} onclick={action.callback.reform(|_|{})}/>
</div>
}
if !props.secondaries.is_empty() {
<div class="pf-v5-c-empty-state__actions">
{ for props.secondaries.iter().map(|action|{
html!{
<Button label={action.label.clone()} variant={ButtonVariant::Link} onclick={action.callback.reform(|_|{})}/>
}
}) }
</div>
}
</div>
}
</div>
</div>
)
}