Skip to main content

edc_web_components/contexts/
policy_library.rs

1use edc_connector_client::types::policy::Policy;
2use yew::prelude::*;
3
4#[derive(Debug, Clone, PartialEq)]
5pub struct PolicyLibraryItem {
6  pub name: String,
7  pub policy: Policy,
8}
9
10#[derive(Clone, PartialEq)]
11pub struct PolicyLibraryState {
12  policy_library_items: Vec<PolicyLibraryItem>,
13}
14
15impl PolicyLibraryState {
16  pub fn policy_library(&self) -> &[PolicyLibraryItem] {
17    &self.policy_library_items
18  }
19}
20
21#[derive(Properties, PartialEq)]
22pub struct PolicyLibraryContextProviderProps {
23  #[prop_or_default]
24  pub children: Html,
25  pub policy_library_items: Vec<PolicyLibraryItem>,
26}
27
28#[component]
29pub fn PolicyLibraryContextProvider(props: &PolicyLibraryContextProviderProps) -> Html {
30  let context = use_state(move || PolicyLibraryState {
31    policy_library_items: props.policy_library_items.clone(),
32  });
33
34  use_effect_with(
35    (props.policy_library_items.clone(), context.setter()),
36    |(policy_library_items, context_setter)| {
37      context_setter.set(PolicyLibraryState {
38        policy_library_items: policy_library_items.clone(),
39      });
40    },
41  );
42
43  html! {
44    <ContextProvider<PolicyLibraryState> context={(*context).clone()}>
45      { props.children.clone() }
46    </ContextProvider<PolicyLibraryState>>
47  }
48}
49
50#[hook]
51pub fn use_policy_library_context() -> Option<PolicyLibraryState> {
52  use_context::<PolicyLibraryState>()
53}