edc-web-components 0.3.0

A Rust Web Components with patternfly-yew client for EDC
Documentation
use edc_connector_client::types::policy::Operator;
use patternfly_yew::prelude::*;
use yew::prelude::*;

static OPERATORS: [(&str, &str); 13] = [
  ("Equal", "eq"),
  ("Not equal", "neq"),
  ("Greater than", "gt"),
  ("Greater than or equal", "gteq"),
  ("Less than", "lt"),
  ("Less than or equal", "lteq"),
  ("Term less than or equal", "term-lteq"),
  ("Has part", "hasPart"),
  ("Is a", "isA"),
  ("Is all of", "isAllOf"),
  ("Is any of", "isAnyOf"),
  ("Is none of", "isNoneOf"),
  ("Is part of", "isPärtOf"),
];

#[derive(Clone, PartialEq, Properties)]
pub struct OperatorSelectorProps {
  pub operator: Operator,
  pub onchange: Callback<Operator>,
}

#[component]
pub fn OperatorSelector(props: &OperatorSelectorProps) -> Html {
  let operators = OPERATORS.iter().map(|(name, operator)| {
    let name = name.to_string();
    let operator = Operator::Simple(operator.to_string());
    let onchange = props.onchange.clone();

    html_nested!(
      <MenuAction selected=false onclick={onchange.reform(move |_| operator.clone())}>
        { name }
      </MenuAction>
    )
  });

  let label = match &props.operator {
    Operator::Simple(operator) => OPERATORS
      .iter()
      .find(|(_, operator_value)| *operator_value == operator)
      .map(|(operator_name, _)| operator_name.to_string())
      .unwrap_or(operator.to_string()),
    Operator::Id { id } => id.to_string(),
  };

  html!(<Dropdown text={label}>{ for operators }</Dropdown>)
}