edc_web_components/pages/
transfer_process_page.rs1use crate::components::ListTransferProcesses;
2use crate::contexts::use_edc_connector_context;
3use crate::models::TransferProcessItem;
4use edc_connector_client::{EdcConnectorApiVersion, types::query::Query};
5use patternfly_yew::prelude::*;
6use yew::prelude::*;
7use yew::suspense::use_future_with;
8
9#[derive(Clone, Debug, PartialEq, Properties)]
10pub struct TransferProcessPageProps {
11 #[prop_or_default]
12 pub contract_agreement_id: Option<String>,
13 #[prop_or_default]
14 pub onshow: Callback<String>,
15}
16
17#[component]
18pub fn TransferProcessPage(props: &TransferProcessPageProps) -> Html {
19 let refresh = use_state(|| 0usize);
20 let offset = use_state(|| 0usize);
21 let limit = use_state(|| 10usize);
22
23 let onoffset = use_callback(
24 (refresh.clone(), offset.setter()),
25 |offset, (refresh, offset_setter)| {
26 offset_setter.set(offset);
27 refresh.set(**refresh + 1);
28 },
29 );
30
31 let onlimit = use_callback(
32 (refresh.clone(), limit.setter()),
33 |limit, (refresh, limit_setter)| {
34 limit_setter.set(limit);
35 refresh.set(**refresh + 1);
36 },
37 );
38
39 html!(
40 <Stack gutter=true>
41 <StackItem>
42 <Title level={Level::H3} size={Size::XXLarge}>{ "List Transfer Processes" }</Title>
43 </StackItem>
44 <StackItem>
45 <Suspense>
46 <TransferProcessPageInner
47 offset={*offset}
48 limit={*limit}
49 {onoffset}
50 {onlimit}
51 contract_agreement_id={props.contract_agreement_id.clone()}
52 force_refresh={*refresh}
53 onshow={props.onshow.clone()}
54 />
55 </Suspense>
56 </StackItem>
57 </Stack>
58 )
59}
60
61#[derive(Clone, Debug, PartialEq, Properties)]
62pub struct TransferProcessPageInnerProps {
63 pub offset: usize,
64 pub limit: usize,
65 pub onoffset: Callback<usize>,
66 pub onlimit: Callback<usize>,
67 pub contract_agreement_id: Option<String>,
68 pub force_refresh: usize,
69 pub onshow: Callback<String>,
70}
71
72#[component]
73pub fn TransferProcessPageInner(props: &TransferProcessPageInnerProps) -> HtmlResult {
74 let edc_connector_context = use_edc_connector_context();
75
76 let transfer_processe_items = use_future_with(
77 (
78 edc_connector_context,
79 props.limit,
80 props.offset,
81 props.contract_agreement_id.clone(),
82 props.force_refresh,
83 ),
84 |parameters| async move {
85 let (edc_connector_context, limit, offset, contract_agreement_id, _) = (*parameters).clone();
86
87 let query_builder = Query::builder().limit(limit as u32).offset(offset as u32);
88
89 let query_builder = if let Some(contract_agreement_id) = contract_agreement_id {
90 query_builder.filter("contractId", "=", contract_agreement_id)
91 } else {
92 query_builder
93 };
94
95 let query = query_builder.build();
96
97 if let Some(client) = edc_connector_context.get_client() {
98 client
99 .transfer_processes(EdcConnectorApiVersion::V4)
100 .query(query)
101 .await
102 .unwrap_or_default()
103 .into_iter()
104 .map(TransferProcessItem::from)
105 .collect::<Vec<_>>()
106 } else {
107 vec![]
108 }
109 },
110 )?;
111
112 let transfer_processe_items = (*transfer_processe_items).clone();
113
114 Ok(html!(
115 <ListTransferProcesses
116 transfer_processe_items={transfer_processe_items}
117 offset={props.offset}
118 limit={props.limit}
119 onoffset={props.onoffset.clone()}
120 onlimit={props.onlimit.clone()}
121 onshow={props.onshow.clone()}
122 />
123 ))
124}