patternfly_yew/components/dual_list_selector/
pane.rs1use yew::prelude::*;
4
5use super::{DualListSelectorItemRenderer, DualListSelectorList, DualListSelectorListWrapper};
6
7#[derive(Debug, Clone, PartialEq, Properties)]
10pub struct DualListSelectorPaneProps<T: DualListSelectorItemRenderer> {
11 #[prop_or_default]
13 pub class: Classes,
14
15 #[prop_or_default]
17 pub options: Vec<T>,
18
19 #[prop_or_default]
21 pub selected_options: Vec<usize>,
22
23 pub onoptionselect: Callback<super::OnOptionSelectArgsNoChosen>,
25
26 #[prop_or_default]
28 pub title: Option<AttrValue>,
29
30 #[prop_or_default]
32 pub status: Option<AttrValue>,
33
34 #[prop_or_default]
36 pub is_chosen: bool,
37
38 #[prop_or_default]
40 pub disabled: bool,
41
42 #[prop_or_default]
44 pub children: ChildrenWithProps<DualListSelectorList<T>>,
45}
46
47#[function_component(DualListSelectorPane)]
48pub fn pane<T: DualListSelectorItemRenderer>(props: &DualListSelectorPaneProps<T>) -> Html {
49 let mut class = classes!["pf-v6-c-dual-list-selector__pane", props.class.clone()];
50 if props.is_chosen {
51 class.push("pf-m-chosen")
52 } else {
53 class.push("pf-m-available")
54 }
55 let title = match &props.title {
56 None => html! {},
57 Some(title) => html! {
58 <div class={classes!["pf-v6-c-dual-list-selector__header"]}>
59 <div class={classes!["pf-v6-c-dual-list-selector__title"]}>
60 <div class={classes!["pf-v6-c-dual-list-selector__title-text"]}>{ title }</div>
61 </div>
62 </div>
63 },
64 };
65 let status = match &props.status {
66 None => html! {},
67 Some(status) => html! {
68 <div class="pf-v6-c-dual-list-selector__status">
69 <div
70 class="pf-v6-c-dual-list-selector__status-text"
71 id="dual-list-selector-basic-available-pane-status"
72 >
73 { status }
74 </div>
75 </div>
76 },
77 };
78 html! {
79 <div {class}>
80 { title }
81 { status }
82 <DualListSelectorListWrapper<T>
83 options={props.options.clone()}
84 selected_options={props.selected_options.clone()}
85 onoptionselect={props.onoptionselect.clone()}
86 disabled={props.disabled}
87 >
88 { for props.children.iter() }
89 </DualListSelectorListWrapper<T>>
90 </div>
91 }
92}