edc-web-components 0.8.1

A Rust Web Components with patternfly-yew client for EDC
Documentation
use crate::components::PolicyProperties;
use crate::models::PolicyDefinitionItem;
use patternfly_yew::prelude::*;
use yew::prelude::*;

#[derive(Clone, Debug, PartialEq, Properties)]
pub struct PolicyCardProps {
  pub policy_definition_item: PolicyDefinitionItem,
  #[prop_or_default]
  pub selected: bool,
  #[prop_or_default]
  pub disabled: bool,
  #[prop_or("selectable-policy".to_string())]
  pub policy_selection_group_id: String,
  pub on_click: Callback<()>,
}

#[component]
pub fn PolicyCard(props: &PolicyCardProps) -> Html {
  let selectable_actions = yew::props!(CardSelectableActionsObjectProperties {
    action: CardSelectableActionsVariant::Click {
      onclick: Some(props.on_click.reform(move |_| ())),
    },
    base: yew::props!(CardSelectableActionsObjectBase {
      name: props.policy_selection_group_id.clone()
    })
  });

  html!(
    <Card selectable=true disabled={props.disabled} selected={props.selected}>
      <CardHeader {selectable_actions}>
        <div>{ &props.policy_definition_item.name }</div>
      </CardHeader>
      <CardBody>
        <DescriptionList>
          <PolicyProperties
            permissions={props.policy_definition_item.permissions.clone()}
            obligations={props.policy_definition_item.obligations.clone()}
            prohibitions={props.policy_definition_item.prohibitions.clone()}
            extensible_properties={props.policy_definition_item.extensible_properties.clone()}
            assigner={props.policy_definition_item.assigner.clone()}
            assignee={props.policy_definition_item.assignee.clone()}
          />
        </DescriptionList>
      </CardBody>
    </Card>
  )
}