Skip to main content

edc_web_components/components/
contract_agreement_reference.rs

1use crate::contexts::{RedirectionAction, use_edc_connector_context, use_redirection_context};
2use crate::models::ContractAgreementItem;
3use edc_connector_client::EdcConnectorApiVersion;
4use patternfly_yew::prelude::*;
5use yew::prelude::*;
6use yew::suspense::use_future_with;
7
8#[derive(Clone, Debug, PartialEq, Properties)]
9pub struct ContractAgreementReferenceProps {
10  pub contract_agreement_id: String,
11}
12
13#[component]
14pub fn ContractAgreementReference(props: &ContractAgreementReferenceProps) -> Html {
15  let redirection_context = use_redirection_context();
16
17  let onclick = redirection_context
18    .map(|redirection_context| {
19      let contract_agreement_id = props.contract_agreement_id.clone();
20
21      redirection_context
22        .redirect_to()
23        .reform(move |_| RedirectionAction::ContractAgreement(contract_agreement_id.clone()))
24    })
25    .unwrap_or_default();
26
27  html! {
28    html!(<Button variant={ButtonVariant::InlineLink} {onclick}>
29      <Flex>
30      <FlexItem modifiers={[FlexModifier::Align(Alignment::Center)]}>
31        <yew_icons::Icon data={yew_icons::IconData::LUCIDE_HEART_HANDSHAKE} />
32
33      </FlexItem>
34      <FlexItem modifiers={[FlexModifier::Align(Alignment::Center)]}>
35        { "Agreement" }
36      </FlexItem>
37      </Flex>
38      </Button>)
39  }
40}
41
42#[component]
43pub fn ContractAgreementReferenceInner(props: &ContractAgreementReferenceProps) -> HtmlResult {
44  let edc_connector_context = use_edc_connector_context();
45
46  let contract_agreement = use_future_with(
47    (
48      props.contract_agreement_id.clone(),
49      edc_connector_context.clone(),
50    ),
51    async move |parameters| {
52      let (contract_agreement_id, edc_connector_context) = (*parameters).clone();
53
54      if let Some(edc_connector_client) = edc_connector_context.get_client() {
55        edc_connector_client
56          .contract_agreements(EdcConnectorApiVersion::V4)
57          .get(&contract_agreement_id)
58          .await
59          .ok()
60          .map(ContractAgreementItem::from)
61      } else {
62        None
63      }
64    },
65  )?;
66
67  let _contract_agreement = (*contract_agreement).clone();
68
69  Ok(html!())
70}