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-v6-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-v6-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-v6-c-simple-list__item");
let mut button_class = classes!(props.button_class.clone(), "pf-v6-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-v6-c-simple-list__title");
let class = classes!(props.class.clone(), "pf-v6-c-simple-list__list");
html! {
<section class="pf-v6-c-simple-list__section">
<h2 class={title_class}>{ props.title.clone() }</h2>
<ul {class} role="list">{ for props.children.iter() }</ul>
</section>
}
}