Skip to main content

edc_web_ui/pages/
transfer_process_page.rs

1use 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}