Skip to main content

edc_web_components/pages/
transfer_process_page.rs

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