use yew::prelude::*;
use super::{DualListSelectorItemRenderer, DualListSelectorList, DualListSelectorListWrapper};
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct DualListSelectorPaneProps<T: DualListSelectorItemRenderer> {
#[prop_or_default]
pub class: Classes,
#[prop_or_default]
pub options: Vec<T>,
#[prop_or_default]
pub selected_options: Vec<usize>,
pub onoptionselect: Callback<super::OnOptionSelectArgsNoChosen>,
#[prop_or_default]
pub title: Option<AttrValue>,
#[prop_or_default]
pub status: Option<AttrValue>,
#[prop_or_default]
pub is_chosen: bool,
#[prop_or_default]
pub disabled: bool,
#[prop_or_default]
pub children: ChildrenWithProps<DualListSelectorList<T>>,
}
#[function_component(DualListSelectorPane)]
pub fn pane<T: DualListSelectorItemRenderer>(props: &DualListSelectorPaneProps<T>) -> Html {
let mut class = classes!["pf-v6-c-dual-list-selector__pane", props.class.clone()];
if props.is_chosen {
class.push("pf-m-chosen")
} else {
class.push("pf-m-available")
}
let title = match &props.title {
None => html! {},
Some(title) => html! {
<div class={classes!["pf-v6-c-dual-list-selector__header"]}>
<div class={classes!["pf-v6-c-dual-list-selector__title"]}>
<div class={classes!["pf-v6-c-dual-list-selector__title-text"]}>{ title }</div>
</div>
</div>
},
};
let status = match &props.status {
None => html! {},
Some(status) => html! {
<div class="pf-v6-c-dual-list-selector__status">
<div
class="pf-v6-c-dual-list-selector__status-text"
id="dual-list-selector-basic-available-pane-status"
>
{ status }
</div>
</div>
},
};
html! {
<div {class}>
{ title }
{ status }
<DualListSelectorListWrapper<T>
options={props.options.clone()}
selected_options={props.selected_options.clone()}
onoptionselect={props.onoptionselect.clone()}
disabled={props.disabled}
>
{ for props.children.iter() }
</DualListSelectorListWrapper<T>>
</div>
}
}