use crate::prelude::ButtonType;
use yew::prelude::*;
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct SimpleListProperties {
#[prop_or_default]
pub children: ChildrenWithProps<SimpleListItem>,
#[prop_or_default]
pub class: Classes,
}
#[function_component(SimpleList)]
pub fn simple_list(props: &SimpleListProperties) -> Html {
html! {
<SimpleListInner class={props.class.clone()}>
<ul class={"pf-v5-c-simple-list__list"} role="list">
{ for props.children.iter() }
</ul>
</SimpleListInner>
}
}
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct SimpleListGroupedProperties {
#[prop_or_default]
pub children: ChildrenWithProps<SimpleListGroup>,
#[prop_or_default]
pub class: Classes,
}
#[function_component(SimpleListGrouped)]
pub fn simple_list_grouped(props: &SimpleListGroupedProperties) -> Html {
html! {
<SimpleListInner class={props.class.clone()}>
{for props.children.iter()}
</SimpleListInner>
}
}
#[derive(Debug, Clone, PartialEq, Properties)]
struct SimpleListInnerProperties {
#[prop_or_default]
children: Html,
#[prop_or_default]
class: Classes,
}
#[function_component(SimpleListInner)]
fn simple_list_inner(props: &SimpleListInnerProperties) -> Html {
let class = classes!("pf-v5-c-simple-list", props.class.clone());
html! {
<div {class}>{props.children.clone()}</div>
}
}
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct SimpleListItemProperties {
#[prop_or_default]
pub children: Html,
#[prop_or_default]
pub class: Classes,
#[prop_or_default]
pub button_class: Classes,
#[prop_or_default]
pub active: bool,
#[prop_or_default]
pub onclick: Callback<MouseEvent>,
#[prop_or_default]
pub r#type: ButtonType,
}
#[function_component(SimpleListItem)]
pub fn simple_list_item(props: &SimpleListItemProperties) -> Html {
let class = classes!(props.class.clone(), "pf-v5-c-simple-list__item");
let mut button_class = classes!(props.button_class.clone(), "pf-v5-c-simple-list__item-link");
if props.active {
button_class.push("pf-m-current");
}
html! {
<li {class}>
<button class={button_class} onclick={props.onclick.clone()} type="button">
{props.children.clone()}
</button>
</li>
}
}
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct SimpleListGroupProperties {
#[prop_or_default]
pub children: ChildrenWithProps<SimpleListItem>,
#[prop_or_default]
pub class: Classes,
#[prop_or_default]
pub title_class: Classes,
#[prop_or_default]
pub title: Html,
}
#[function_component(SimpleListGroup)]
pub fn simple_list_group(props: &SimpleListGroupProperties) -> Html {
let title_class = classes!(props.title_class.clone(), "pf-v5-c-simple-list__title");
let class = classes!(props.class.clone(), "pf-v5-c-simple-list__list");
html! {
<section class="pf-v5-c-simple-list__section">
<h2 class={title_class}>{props.title.clone()}</h2>
<ul {class} role="list">
{for props.children.iter()}
</ul>
</section>
}
}