Skip to main content

edc_web_components/components/
policy_card.rs

1use crate::components::PolicyProperties;
2use crate::models::PolicyDefinitionItem;
3use patternfly_yew::prelude::*;
4use yew::prelude::*;
5
6#[derive(Clone, Debug, PartialEq, Properties)]
7pub struct PolicyCardProps {
8  pub policy_definition_item: PolicyDefinitionItem,
9  #[prop_or_default]
10  pub selected: bool,
11  #[prop_or_default]
12  pub disabled: bool,
13  #[prop_or("selectable-policy".to_string())]
14  pub policy_selection_group_id: String,
15  pub on_click: Callback<()>,
16}
17
18#[component]
19pub fn PolicyCard(props: &PolicyCardProps) -> Html {
20  let selectable_actions = yew::props!(CardSelectableActionsObjectProperties {
21    action: CardSelectableActionsVariant::Click {
22      onclick: Some(props.on_click.reform(move |_| ())),
23    },
24    base: yew::props!(CardSelectableActionsObjectBase {
25      name: props.policy_selection_group_id.clone()
26    })
27  });
28
29  html!(
30    <Card selectable=true disabled={props.disabled} selected={props.selected}>
31      <CardHeader {selectable_actions}>
32        <div>{ &props.policy_definition_item.name }</div>
33      </CardHeader>
34      <CardBody>
35        <DescriptionList>
36          <PolicyProperties
37            permissions={props.policy_definition_item.permissions.clone()}
38            obligations={props.policy_definition_item.obligations.clone()}
39            prohibitions={props.policy_definition_item.prohibitions.clone()}
40            extensible_properties={props.policy_definition_item.extensible_properties.clone()}
41            assigner={props.policy_definition_item.assigner.clone()}
42            assignee={props.policy_definition_item.assignee.clone()}
43          />
44        </DescriptionList>
45      </CardBody>
46    </Card>
47  )
48}