edc_web_components/components/
create_transfer_process.rs1use 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}