Skip to main content

edc_web_ui/contexts/
edc_connector_context.rs

1use 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}