edc-web-components 0.8.0

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

#[derive(Debug, Clone, PartialEq)]
pub struct CelExpressionLibraryItem {
  pub name: String,
  pub left_operand: String,
  pub description: Option<String>,
  pub scopes: Vec<String>,
  pub expression: String,
}

#[derive(Clone, PartialEq)]
pub struct CelExpressionLibraryState {
  cel_expression_library_items: Vec<CelExpressionLibraryItem>,
}

impl CelExpressionLibraryState {
  pub fn cel_expression_library(&self) -> &[CelExpressionLibraryItem] {
    &self.cel_expression_library_items
  }
}

#[derive(Properties, PartialEq)]
pub struct CelExpressionLibraryContextProviderProps {
  #[prop_or_default]
  pub children: Html,
  pub cel_expression_library_items: Vec<CelExpressionLibraryItem>,
}

#[component]
pub fn CelExpressionLibraryContextProvider(
  props: &CelExpressionLibraryContextProviderProps,
) -> Html {
  let context = use_state(move || CelExpressionLibraryState {
    cel_expression_library_items: props.cel_expression_library_items.clone(),
  });

  use_effect_with(
    (props.cel_expression_library_items.clone(), context.setter()),
    |(cel_expression_library_items, context_setter)| {
      context_setter.set(CelExpressionLibraryState {
        cel_expression_library_items: cel_expression_library_items.clone(),
      });
    },
  );

  html! {
    <ContextProvider<CelExpressionLibraryState> context={(*context).clone()}>
      { props.children.clone() }
    </ContextProvider<CelExpressionLibraryState>>
  }
}

#[hook]
pub fn use_cel_expression_library_context() -> Option<CelExpressionLibraryState> {
  use_context::<CelExpressionLibraryState>()
}