edc_web_components/components/
show_policy.rs1use crate::components::ConstraintRenderer;
2use edc_connector_client::types::policy::{Policy, PolicyKind};
3use patternfly_yew::prelude::*;
4use yew::prelude::*;
5
6#[derive(Clone, Debug, PartialEq, Properties)]
7pub struct ShowPolicyProps {
8 pub policy: Policy,
9}
10
11#[component]
12pub fn ShowPolicy(props: &ShowPolicyProps) -> Html {
13 let kind = match props.policy.kind() {
14 PolicyKind::Set => "Set",
15 PolicyKind::Offer => "Offer",
16 PolicyKind::Agreement => "Agreement",
17 };
18
19 let permissions = props.policy.permissions().iter().map(|permission| {
20 html! {
21 <ConstraintRenderer
22 action={permission.action().clone()}
23 constraints={permission.constraints().to_vec()}
24 />
25 }
26 });
27
28 let obligations = props.policy.obligations().iter().map(|obligation| {
29 html! {
30 <ConstraintRenderer
31 action={obligation.action().clone()}
32 constraints={obligation.constraints().to_vec()}
33 />
34 }
35 });
36
37 let prohibitions = props.policy.prohibitions().iter().map(|prohibition| {
38 html! {
39 <ConstraintRenderer
40 action={prohibition.action().clone()}
41 constraints={prohibition.constraints().to_vec()}
42 />
43 }
44 });
45
46 let profiles = props.policy.profiles().iter().map(|profile| {
47 html_nested! {
48 <FlexItem>
49 <Label color={Color::Blue} label={profile.to_string()} />
50 </FlexItem>
51 }
52 });
53
54 let extensible_properties = props
55 .policy
56 .extensible_properties()
57 .iter()
58 .map(|(key, value)| {
59 html_nested! {
60 <StackItem>
61 <DescriptionGroup term={key.to_string()}>
62 <CodeBlock>
63 <CodeBlockCode>
64 { serde_json::to_string_pretty(value).unwrap_or_default() }
65 </CodeBlockCode>
66 </CodeBlock>
67 </DescriptionGroup>
68 </StackItem>
69 }
70 });
71
72 html!(
73 <DescriptionList mode={[DescriptionListMode::Horizontal]}>
74 <DescriptionGroup term="Id">{ props.policy.id() }</DescriptionGroup>
75 <DescriptionGroup term="Kind">{ kind }</DescriptionGroup>
76 <DescriptionGroup term="Assigner">
77 { props.policy.assigner().cloned().unwrap_or_default() }
78 </DescriptionGroup>
79 <DescriptionGroup term="Assignee">
80 { props.policy.assignee().cloned().unwrap_or_default() }
81 </DescriptionGroup>
82 <DescriptionGroup term="Permissions">{ for permissions }</DescriptionGroup>
83 <DescriptionGroup term="Obligations">{ for obligations }</DescriptionGroup>
84 <DescriptionGroup term="Prohibitions">{ for prohibitions }</DescriptionGroup>
85 <DescriptionGroup term="Profiles">
86 <Flex>{ for profiles }</Flex>
87 </DescriptionGroup>
88 <DescriptionGroup term="Extensible Properties">
89 <DescriptionList mode={[DescriptionListMode::Horizontal]}>
90 { for extensible_properties }
91 </DescriptionList>
92 </DescriptionGroup>
93 </DescriptionList>
94 )
95}