edc_web_components/components/
simple_or_id_field.rs1use patternfly_yew::prelude::*;
2use yew::prelude::*;
3
4#[derive(Clone, PartialEq, Properties)]
5pub struct Props {
6 pub is_simple: bool,
7 pub value: String,
8 pub onchange: Callback<(bool, String)>,
9}
10
11#[component]
12pub fn SimpleOrIdField(props: &Props) -> Html {
13 let is_simple_target = use_state(|| props.is_simple);
14 let target = use_state(|| props.value.clone());
15
16 let on_target_id = use_callback(
17 (
18 props.onchange.clone(),
19 is_simple_target.clone(),
20 target.clone(),
21 ),
22 move |_, (onchange, is_simple_target, target)| {
23 is_simple_target.set(false);
24 onchange.emit((false, (**target).to_string()))
25 },
26 );
27
28 let on_target_simple = use_callback(
29 (
30 props.onchange.clone(),
31 is_simple_target.clone(),
32 target.clone(),
33 ),
34 move |_, (onchange, is_simple_target, target)| {
35 is_simple_target.set(true);
36 onchange.emit((true, (**target).to_string()))
37 },
38 );
39
40 let oninput_target = use_callback(
41 (
42 props.onchange.clone(),
43 is_simple_target.clone(),
44 target.clone(),
45 ),
46 move |value: String, (onchange, is_simple_target, target)| {
47 target.set(value.clone());
48 onchange.emit((**is_simple_target, value))
49 },
50 );
51
52 let target_mode = if *is_simple_target { "Simple" } else { "ID" };
53
54 html!(
55 <Split>
56 <SplitItem>
57 <Dropdown text={html!(target_mode)}>
58 <MenuAction onclick={on_target_simple}>{ "Simple" }</MenuAction>
59 <MenuAction onclick={on_target_id}>{ "ID" }</MenuAction>
60 </Dropdown>
61 </SplitItem>
62 <SplitItem fill=true>
63 <TextInput value={(*target).clone()} onchange={oninput_target} />
64 </SplitItem>
65 </Split>
66 )
67}