edc_web_components/contexts/
policy_constraints_context.rs1use edc_connector_client::types::policy::Constraint;
2use yew::prelude::*;
3
4#[derive(Debug, Clone, PartialEq)]
5pub struct PolicyConstraintRenderer {
6 pub action: String,
7 pub constraint: Constraint,
8 pub title: String,
9 pub inner: Html,
10}
11
12impl PolicyConstraintRenderer {
13 fn is(&self, action: &str, constraint: &Constraint) -> bool {
14 self.action == action && &self.constraint == constraint
15 }
16}
17
18#[derive(Clone, PartialEq)]
19pub struct PolicyConstraintRendererState {
20 constraints: Vec<PolicyConstraintRenderer>,
21}
22
23impl PolicyConstraintRendererState {
24 pub fn renderer_constraint(
25 &self,
26 action: &str,
27 constraint: &Constraint,
28 ) -> Option<(String, Html)> {
29 self
30 .constraints
31 .iter()
32 .find(|policy_constraint_renderer| policy_constraint_renderer.is(action, constraint))
33 .map(|policy_constraint_renderer| {
34 (
35 policy_constraint_renderer.title.to_string(),
36 policy_constraint_renderer.inner.clone(),
37 )
38 })
39 }
40}
41
42#[derive(Properties, PartialEq)]
43pub struct PolicyConstraintRendererContextProviderProps {
44 #[prop_or_default]
45 pub children: Html,
46 pub constraints: Vec<PolicyConstraintRenderer>,
47}
48
49#[component]
50pub fn PolicyConstraintRendererContextProvider(
51 props: &PolicyConstraintRendererContextProviderProps,
52) -> Html {
53 let context = use_state(move || PolicyConstraintRendererState {
54 constraints: props.constraints.clone(),
55 });
56
57 use_effect_with(
58 (props.constraints.clone(), context.setter()),
59 |(constraints, context_setter)| {
60 context_setter.set(PolicyConstraintRendererState {
61 constraints: constraints.clone(),
62 });
63 },
64 );
65
66 html! {
67 <ContextProvider<PolicyConstraintRendererState> context={(*context).clone()}>
68 { props.children.clone() }
69 </ContextProvider<PolicyConstraintRendererState>>
70 }
71}
72
73#[hook]
74pub fn use_policy_constraint_renderer_context() -> Option<PolicyConstraintRendererState> {
75 use_context::<PolicyConstraintRendererState>()
76}