edc-web-ui 0.1.0

A Rust Web interface with patternfly-yew client for EDC
Documentation
use crate::contexts::use_edc_connector_context;
use edc_connector_client::types::transfer_process::TransferRequest;
use patternfly_yew::prelude::*;
use yew::platform::spawn_local;
use yew::prelude::*;

#[function_component]
pub fn CreateTransferProcess() -> Html {
  let edc_connector_context = use_edc_connector_context();

  let contract_id = use_state(|| "".to_string());
  let counter_party_address = use_state(|| "".to_string());
  let transfer_type = use_state(|| "".to_string());

  let onsubmit = use_callback(
    (
      edc_connector_context,
      contract_id.clone(),
      counter_party_address.clone(),
      transfer_type.clone(),
    ),
    |event: SubmitEvent,
     (edc_connector_context, contract_id, counter_party_address, transfer_type)| {
      event.prevent_default();

      let edc_connector_context = edc_connector_context.clone();
      let contract_id = (**contract_id).clone();
      let counter_party_address = (**counter_party_address).clone();
      let transfer_type = (**transfer_type).clone();

      spawn_local(async move {
        let transfer_request = TransferRequest::builder()
          .contract_id(contract_id)
          .counter_party_address(counter_party_address)
          .transfer_type(transfer_type)
          .build();

        if let Some(client) = edc_connector_context.get_client() {
          let _ = client
            .transfer_processes()
            .initiate(&transfer_request)
            .await;
        }
      })
    },
  );

  let onchange_contract_id = {
    let contract_id = contract_id.clone();

    use_callback((), move |value, _| {
      contract_id.set(value);
    })
  };

  let onchange_counter_party_address = {
    let counter_party_address = counter_party_address.clone();

    use_callback((), move |value, _| {
      counter_party_address.set(value);
    })
  };

  let onchange_transfer_type = {
    let transfer_type = transfer_type.clone();

    use_callback((), move |value, _| {
      transfer_type.set(value);
    })
  };

  let disabled = false;

  html!(
    <Form {onsubmit}>
      <FormGroup
        label={"Contract ID"}
        required={true}
        >
        <TextInput
          required={true}
          value={(*contract_id).to_string()}
          onchange={onchange_contract_id}
          />
      </FormGroup>

      <FormGroup
        label={"Counter Party Address"}
        required={true}
        >
        <TextInput
          required={true}
          value={(*counter_party_address).to_string()}
          onchange={onchange_counter_party_address}
          />
      </FormGroup>

      <FormGroup
        label={"Transfer Type"}
        required={true}
        >
        <TextInput
          required={true}
          value={(*transfer_type).to_string()}
          onchange={onchange_transfer_type}
          />
      </FormGroup>

      <ActionGroup>
        <Button
          variant={ButtonVariant::Primary}
          label="Submit"
          r#type={ButtonType::Submit}
          {disabled}
          />
        <Button variant={ButtonVariant::Secondary} label="Reset" r#type={ButtonType::Reset}/>
      </ActionGroup>
    </Form>
  )
}