edc_web_components/components/
policy_card.rs1use 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}