edc-web-components 0.8.1

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

#[derive(Debug, Clone, PartialEq)]
pub struct PolicyLibraryItem {
  pub name: String,
  pub policy: Policy,
}

#[derive(Clone, PartialEq)]
pub struct PolicyLibraryState {
  policy_library_items: Vec<PolicyLibraryItem>,
}

impl PolicyLibraryState {
  pub fn policy_library(&self) -> &[PolicyLibraryItem] {
    &self.policy_library_items
  }
}

#[derive(Properties, PartialEq)]
pub struct PolicyLibraryContextProviderProps {
  #[prop_or_default]
  pub children: Html,
  pub policy_library_items: Vec<PolicyLibraryItem>,
}

#[component]
pub fn PolicyLibraryContextProvider(props: &PolicyLibraryContextProviderProps) -> Html {
  let context = use_state(move || PolicyLibraryState {
    policy_library_items: props.policy_library_items.clone(),
  });

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

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

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