edc_web_ui/pages/
transfer_process_page.rs1use crate::components::ListTransferProcesses;
2use crate::contexts::use_edc_connector_context;
3use crate::models::TransferProcessItem;
4use edc_connector_client::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 <Card>
38 <CardBody>
39 <Suspense>
40 <TransferProcessPageInner
41 offset={*offset}
42 limit={*limit}
43 {onoffset}
44 {onlimit}
45 force_refresh={*refresh}
46 />
47 </Suspense>
48 </CardBody>
49 </Card>
50 </StackItem>
51 </Stack>
52 )
53}
54
55#[derive(Clone, Debug, PartialEq, Properties)]
56pub struct TransferProcessPageInnerProps {
57 pub offset: usize,
58 pub limit: usize,
59 pub onoffset: Callback<usize>,
60 pub onlimit: Callback<usize>,
61 pub force_refresh: usize,
62}
63
64#[component]
65pub fn TransferProcessPageInner(props: &TransferProcessPageInnerProps) -> HtmlResult {
66 let edc_connector_context = use_edc_connector_context();
67
68 let transfer_processe_items = use_future_with(
69 (
70 edc_connector_context,
71 props.limit,
72 props.offset,
73 props.force_refresh,
74 ),
75 |parameters| async move {
76 let (edc_connector_context, limit, offset, _) = (*parameters).clone();
77
78 let query = Query::builder()
79 .limit(limit as u32)
80 .offset(offset as u32)
81 .build();
82
83 if let Some(client) = edc_connector_context.get_client() {
84 client
85 .transfer_processes()
86 .query(query)
87 .await
88 .unwrap_or_default()
89 .into_iter()
90 .map(TransferProcessItem::from)
91 .collect::<Vec<_>>()
92 } else {
93 vec![]
94 }
95 },
96 )?;
97
98 let transfer_processe_items = (*transfer_processe_items).clone();
99
100 Ok(html!(
101 <ListTransferProcesses
102 transfer_processe_items={transfer_processe_items}
103 offset={props.offset}
104 limit={props.limit}
105 onoffset={props.onoffset.clone()}
106 onlimit={props.onlimit.clone()}
107 />
108 ))
109}