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