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#[component]
10pub fn TransferProcessPage() -> Html {
11 let refresh = use_state(|| 0usize);
12 let offset = use_state(|| 0usize);
13 let limit = use_state(|| 10usize);
14
15 let onoffset = use_callback(
16 (refresh.clone(), offset.setter()),
17 |offset, (refresh, offset_setter)| {
18 offset_setter.set(offset);
19 refresh.set(**refresh + 1);
20 },
21 );
22
23 let onlimit = use_callback(
24 (refresh.clone(), limit.setter()),
25 |limit, (refresh, limit_setter)| {
26 limit_setter.set(limit);
27 refresh.set(**refresh + 1);
28 },
29 );
30
31 html!(
32 <Stack gutter=true>
33 <StackItem>
34 <Title level={Level::H3} size={Size::XXLarge}>{ "List Transfer Processes" }</Title>
35 </StackItem>
36 <StackItem>
37 <Suspense>
38 <TransferProcessPageInner
39 offset={*offset}
40 limit={*limit}
41 {onoffset}
42 {onlimit}
43 force_refresh={*refresh}
44 />
45 </Suspense>
46 </StackItem>
47 </Stack>
48 )
49}
50
51#[derive(Clone, Debug, PartialEq, Properties)]
52pub struct TransferProcessPageInnerProps {
53 pub offset: usize,
54 pub limit: usize,
55 pub onoffset: Callback<usize>,
56 pub onlimit: Callback<usize>,
57 pub force_refresh: usize,
58}
59
60#[component]
61pub fn TransferProcessPageInner(props: &TransferProcessPageInnerProps) -> HtmlResult {
62 let edc_connector_context = use_edc_connector_context();
63
64 let transfer_processe_items = use_future_with(
65 (
66 edc_connector_context,
67 props.limit,
68 props.offset,
69 props.force_refresh,
70 ),
71 |parameters| async move {
72 let (edc_connector_context, limit, offset, _) = (*parameters).clone();
73
74 let query = Query::builder()
75 .limit(limit as u32)
76 .offset(offset as u32)
77 .build();
78
79 if let Some(client) = edc_connector_context.get_client() {
80 client
81 .transfer_processes(EdcConnectorApiVersion::V4)
82 .query(query)
83 .await
84 .unwrap_or_default()
85 .into_iter()
86 .map(TransferProcessItem::from)
87 .collect::<Vec<_>>()
88 } else {
89 vec![]
90 }
91 },
92 )?;
93
94 let transfer_processe_items = (*transfer_processe_items).clone();
95
96 Ok(html!(
97 <ListTransferProcesses
98 transfer_processe_items={transfer_processe_items}
99 offset={props.offset}
100 limit={props.limit}
101 onoffset={props.onoffset.clone()}
102 onlimit={props.onlimit.clone()}
103 />
104 ))
105}