edc_web_components/components/
create_federated_catalog_participant.rs1use edc_federated_catalog_client::models::FederatedCatalogParticipantCreateForm;
2use edc_federated_catalog_client::{FederatedCatalogClient, FederatedCatalogClientVersion};
3use patternfly_yew::prelude::*;
5use yew::platform::spawn_local;
6use yew::prelude::*;
7use yew_oauth2::hook::use_latest_access_token;
8
9#[derive(Clone, Debug, PartialEq, Properties)]
10pub struct CreateFederatedCatalogParticipantProps {
11 #[prop_or_default]
12 pub on_create: Callback<()>,
13}
14
15#[component]
16pub fn CreateFederatedCatalogParticipant(props: &CreateFederatedCatalogParticipantProps) -> Html {
17 let id = use_state(|| "".to_string());
18 let name = use_state(|| "".to_string());
19 let target_url = use_state(|| "".to_string());
20
21 let onchange_id = use_callback(id.setter(), |value, id_setter| {
22 id_setter.set(value);
23 });
24
25 let onchange_name = use_callback(name.setter(), |value, name_setter| {
26 name_setter.set(value);
27 });
28
29 let onchange_target_url = use_callback(target_url.setter(), |value, target_url_setter| {
30 target_url_setter.set(value);
31 });
32
33 let disabled = false;
34
35 let latest_access_token_context = use_latest_access_token().unwrap();
36
37 let onsubmit = use_callback(
38 (
39 id.clone(),
40 name.clone(),
41 target_url.clone(),
42 props.on_create.clone(),
43 latest_access_token_context.clone(),
44 ),
45 |event: SubmitEvent, (id, name, target_url, on_create, latest_access_token_context)| {
46 event.prevent_default();
47 let on_create = on_create.clone();
48 let latest_access_token_context = latest_access_token_context.clone();
49
50 let id = (**id).clone();
51 let name = (**name).clone();
52 let target_url = (**target_url).clone();
53
54 spawn_local(async move {
55 let server_url = web_sys::window().unwrap().location().origin().unwrap();
56 let federated_catalog_management_client = FederatedCatalogClient::new(
57 reqwest::Client::new(),
58 format!("{server_url}/federated-catalog-management"),
59 latest_access_token_context.access_token(),
60 FederatedCatalogClientVersion::V4,
61 );
62
63 match federated_catalog_management_client
64 .create_participant(&FederatedCatalogParticipantCreateForm {
65 id: id.clone(),
66 name: name.clone(),
67 target_url: target_url.clone(),
68 })
69 .await
70 {
71 Ok(()) => {
72 on_create.emit(());
73 }
74 Err(message) => {
75 log::error!("{message}");
76 }
77 }
78 })
79 },
80 );
81
82 html!(
83 <Form {onsubmit}>
84 <FormGroup label="Counter Party DID" required=true>
85 <TextInput required=true value={(*id).to_string()} onchange={onchange_id} />
86 </FormGroup>
87 <FormGroup label="Counter Party Name" required=true>
88 <TextInput required=true value={(*name).to_string()} onchange={onchange_name} />
89 </FormGroup>
90 <FormGroup label="Counter Party Address" required=true>
91 <TextInput
92 required=true
93 value={(*target_url).to_string()}
94 onchange={onchange_target_url}
95 r#type={TextInputType::Url}
96 />
97 </FormGroup>
98 <ActionGroup>
99 <Button
100 variant={ButtonVariant::Primary}
101 label="Submit"
102 r#type={ButtonType::Submit}
103 {disabled}
104 />
105 <Button variant={ButtonVariant::Secondary} label="Reset" r#type={ButtonType::Reset} />
106 </ActionGroup>
107 </Form>
108 )
109}