edc-web-ui 0.1.0

A Rust Web interface with patternfly-yew client for EDC
Documentation
use patternfly_yew::prelude::*;
use yew::prelude::*;

#[derive(Clone, PartialEq, Properties)]
pub struct Props {
  pub is_simple: bool,
  pub value: String,
  pub onchange: Callback<(bool, String)>,
}

#[function_component]
pub fn SimpleOrIdField(props: &Props) -> Html {
  let is_simple_target = use_state(|| props.is_simple);
  let target = use_state(|| props.value.clone());

  let on_target_id = use_callback(
    (
      props.onchange.clone(),
      is_simple_target.clone(),
      target.clone(),
    ),
    move |_, (onchange, is_simple_target, target)| {
      is_simple_target.set(false);
      onchange.emit((false, (**target).to_string()))
    },
  );

  let on_target_simple = use_callback(
    (
      props.onchange.clone(),
      is_simple_target.clone(),
      target.clone(),
    ),
    move |_, (onchange, is_simple_target, target)| {
      is_simple_target.set(true);
      onchange.emit((true, (**target).to_string()))
    },
  );

  let oninput_target = use_callback(
    (
      props.onchange.clone(),
      is_simple_target.clone(),
      target.clone(),
    ),
    move |value: String, (onchange, is_simple_target, target)| {
      target.set(value.clone());
      onchange.emit((**is_simple_target, value))
    },
  );

  let target_mode = if *is_simple_target { "Simple" } else { "ID" };

  html!(
    <Split>
      <SplitItem>
        <Dropdown text={target_mode}>
          <MenuAction onclick={on_target_simple}>{"Simple"}</MenuAction>
          <MenuAction onclick={on_target_id}>{"ID"}</MenuAction>
        </Dropdown>
      </SplitItem>
      <SplitItem fill=true>
        <TextInput
          value={(*target).clone()}
          onchange={oninput_target}
          />
      </SplitItem>
    </Split>
  )
}