Skip to main content

edc_web_components/components/
create_transfer_process.rs

1use crate::contexts::use_edc_connector_context;
2use edc_connector_client::EdcConnectorApiVersion;
3use edc_connector_client::types::transfer_process::TransferRequest;
4use patternfly_yew::prelude::*;
5use yew::platform::spawn_local;
6use yew::prelude::*;
7
8#[derive(Clone, Debug, PartialEq, Properties)]
9pub struct CreateTransferProcessProps {
10  #[prop_or_default]
11  pub on_create: Callback<()>,
12}
13
14#[component]
15pub fn CreateTransferProcess(props: &CreateTransferProcessProps) -> Html {
16  let edc_connector_context = use_edc_connector_context();
17
18  let contract_id = use_state(|| "".to_string());
19  let counter_party_address = use_state(|| "".to_string());
20  let transfer_type = use_state(|| "".to_string());
21
22  let onsubmit = use_callback(
23    (
24      edc_connector_context,
25      contract_id.clone(),
26      counter_party_address.clone(),
27      transfer_type.clone(),
28      props.on_create.clone(),
29    ),
30    |event: SubmitEvent,
31     (edc_connector_context, contract_id, counter_party_address, transfer_type, on_create)| {
32      event.prevent_default();
33
34      let edc_connector_context = edc_connector_context.clone();
35      let contract_id = (**contract_id).clone();
36      let counter_party_address = (**counter_party_address).clone();
37      let transfer_type = (**transfer_type).clone();
38      let on_create = on_create.clone();
39
40      spawn_local(async move {
41        let transfer_request = TransferRequest::builder()
42          .contract_id(contract_id)
43          .counter_party_address(counter_party_address)
44          .transfer_type(transfer_type)
45          .build();
46
47        if let Some(client) = edc_connector_context.get_client() {
48          let _ = client
49            .transfer_processes(EdcConnectorApiVersion::V4)
50            .initiate(&transfer_request)
51            .await;
52
53          on_create.emit(());
54        }
55      })
56    },
57  );
58
59  let onchange_contract_id = use_callback(
60    contract_id.setter(),
61    move |contract_id, contract_id_setter| {
62      contract_id_setter.set(contract_id);
63    },
64  );
65
66  let onchange_counter_party_address = use_callback(
67    counter_party_address.setter(),
68    move |counter_party_address, counter_party_address_setter| {
69      counter_party_address_setter.set(counter_party_address);
70    },
71  );
72
73  let onchange_transfer_type = use_callback(
74    transfer_type.setter(),
75    move |transfer_type, transfer_type_setter| {
76      transfer_type_setter.set(transfer_type);
77    },
78  );
79
80  let disabled = false;
81
82  html!(
83    <Form {onsubmit}>
84      <FormGroup label="Contract ID" required=true>
85        <TextInput
86          required=true
87          value={(*contract_id).to_string()}
88          onchange={onchange_contract_id}
89        />
90      </FormGroup>
91      <FormGroup label="Counter Party Address" required=true>
92        <TextInput
93          required=true
94          value={(*counter_party_address).to_string()}
95          onchange={onchange_counter_party_address}
96        />
97      </FormGroup>
98      <FormGroup label="Transfer Type" required=true>
99        <TextInput
100          required=true
101          value={(*transfer_type).to_string()}
102          onchange={onchange_transfer_type}
103        />
104      </FormGroup>
105      <ActionGroup>
106        <Button
107          variant={ButtonVariant::Primary}
108          label="Submit"
109          r#type={ButtonType::Submit}
110          {disabled}
111        />
112        <Button variant={ButtonVariant::Secondary} label="Reset" r#type={ButtonType::Reset} />
113      </ActionGroup>
114    </Form>
115  )
116}