edc_web_components/components/
show_policy_reference.rs1use crate::components::ShowPolicy;
2use crate::contexts::{RedirectionAction, use_redirection_context};
3use edc_connector_client::types::policy::Policy;
4use patternfly_yew::prelude::*;
5use yew::prelude::*;
6
7#[derive(Clone, Debug, PartialEq, Properties)]
8pub struct ShowPolicyReferenceProps {
9 pub policy: Policy,
10}
11
12#[component]
13pub fn ShowPolicyReference(props: &ShowPolicyReferenceProps) -> Html {
14 let backdropper = use_backdrop();
15 let redirection_context = use_redirection_context();
16
17 let onclick = use_callback(
18 (
19 backdropper.clone(),
20 redirection_context.clone(),
21 props.policy.clone(),
22 ),
23 |_, (backdropper, redirection_context, policy)| {
24 if let Some(backdropper) = backdropper {
25 let policy_id = policy.id().cloned().unwrap_or_default();
26 let policy = policy.clone();
27
28 let button = if let Some(redirection_context) = redirection_context {
29 let backdropper = backdropper.clone();
30 let redirection_context = redirection_context.clone();
31
32 html!(
33 <Button
34 variant={ButtonVariant::Primary}
35 icon={Icon::Eye}
36 onclick={redirection_context.redirect_to().reform(move |_| {
37 backdropper.close();
38 RedirectionAction::Policy(policy_id.clone())
39 })}
40 >
41 { "Show" }
42 </Button>
43 )
44 } else {
45 html!()
46 };
47
48 backdropper.open(Backdrop::new(html!(
49 <Bullseye>
50 <Modal title="Policy" variant={ModalVariant::Medium}>
51 <Bullseye>
52 <Stack gutter=true>
53 <StackItem>
54 <ShowPolicy {policy} />
55 </StackItem>
56 <StackItem>{ button }</StackItem>
57 </Stack>
58 </Bullseye>
59 </Modal>
60 </Bullseye>
61 )));
62 }
63 },
64 );
65
66 html!(
67 <Button variant={ButtonVariant::InlineLink} {onclick}>
68 <Flex>
69 <FlexItem modifiers={[FlexModifier::Align(Alignment::Center).all()]}>
70 <yew_icons::Icon data={yew_icons::IconData::LUCIDE_SHIELD} />
71 </FlexItem>
72 <FlexItem modifiers={[FlexModifier::Align(Alignment::Center).all()]}>{ "Policy" }</FlexItem>
73 </Flex>
74 </Button>
75 )
76}