edc_web_ui/components/
create_transfer_process.rs

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