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-v5-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-v5-c-dual-list-selector__header"]}>
59 <div class={classes!["pf-v5-c-dual-list-selector__title"]}>
60 <div class={classes!["pf-v5-c-dual-list-selector__title-text"]}>
61 { title }
62 </div>
63 </div>
64 </div>
65 },
66 };
67 let status = match &props.status {
68 None => html! {},
69 Some(status) => html! {
70 <div class="pf-v5-c-dual-list-selector__status">
71 <div class="pf-v5-c-dual-list-selector__status-text" id="dual-list-selector-basic-available-pane-status">
72 { status }
73 </div>
74 </div>
75 },
76 };
77 html! {
78 <div {class}>
79 { title }
80 { status }
81 <DualListSelectorListWrapper<T>
82 options={props.options.clone()}
83 selected_options={props.selected_options.clone()}
84 onoptionselect={props.onoptionselect.clone()}
85 disabled={props.disabled}
86 >
87 { for props.children.iter() }
88 </DualListSelectorListWrapper<T>>
89 </div>
90 }
91}