edc_web_components/contexts/
policy_library.rs1use 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}