edc_web_ui/contexts/
edc_connector_context.rs1use edc_connector_client::{Auth, EdcConnectorClient};
2use std::{ops::Deref, rc::Rc};
3use yew::prelude::*;
4
5#[derive(Debug, PartialEq, Clone)]
6pub enum EdcConnectorAction {}
7
8#[derive(Clone, PartialEq)]
9pub struct EdcConnectorState {
10 management_url: String,
11 api_key: Option<String>,
12}
13
14impl EdcConnectorState {
15 pub fn get_client(&self) -> Option<EdcConnectorClient> {
16 let builder = EdcConnectorClient::builder().management_url(self.management_url.clone());
17
18 let builder = if let Some(api_key) = self.api_key.as_ref() {
19 builder.with_auth(Auth::ApiToken(api_key.clone()))
20 } else {
21 builder
22 };
23
24 builder.build().ok()
25 }
26}
27
28impl Reducible for EdcConnectorState {
29 type Action = EdcConnectorAction;
30
31 fn reduce(self: Rc<Self>, _action: Self::Action) -> Rc<Self> {
32 let new_self = self.deref().clone();
33
34 new_self.into()
35 }
36}
37
38#[derive(Properties, PartialEq)]
39pub struct Props {
40 #[prop_or_default]
41 pub children: Html,
42 pub management_url: String,
43 pub api_key: Option<String>,
44}
45
46#[component]
47pub fn EdcConnectorContextProvider(props: &Props) -> Html {
48 let edc_connector_context = use_reducer(move || EdcConnectorState {
49 management_url: props.management_url.clone(),
50 api_key: props.api_key.clone(),
51 });
52
53 html! {
54 <ContextProvider<EdcConnectorContext> context={edc_connector_context}>
55 { props.children.clone() }
56 </ContextProvider<EdcConnectorContext>>
57 }
58}
59
60pub type EdcConnectorContext = UseReducerHandle<EdcConnectorState>;
61
62#[hook]
63pub fn use_edc_connector_context() -> EdcConnectorContext {
64 use_context::<EdcConnectorContext>().expect("no EDC Connector context found")
65}