edc-web-ui 0.3.1

A Rust Web interface with patternfly-yew client for EDC
mod logged_in_application;
mod login_component;
mod main_view;
mod oauth_inner_application;
mod switch_app_route;
mod toggle_theme;

use crate::app_route::AppRoute;
use crate::configuration::Configuration;
use logged_in_application::LoggedInApplication;
use login_component::LoginComponent;
use main_view::MainView;
use oauth_inner_application::OauthInnerApplication;
use switch_app_route::switch_app_route;
use toggle_theme::ToggleTheme;
use yew::prelude::*;
use yew_nested_router::Router;
use yew_oauth2::openid::*;

#[component]
pub fn MainApplication() -> Html {
  let edc_client_configuration = use_state(|| Option::<Configuration>::None);

  let onlogout = use_callback(
    edc_client_configuration.setter(),
    |_, edc_client_configuration_setter| {
      edc_client_configuration_setter.set(None);
    },
  );

  let onconfiguration = use_callback(
    edc_client_configuration.setter(),
    |configuration, edc_client_configuration_setter| {
      edc_client_configuration_setter.set(Some(configuration));
    },
  );

  if let Some(edc_client_configuration) = (*edc_client_configuration).clone() {
    let management_url = edc_client_configuration.management_url;
    let api_key = edc_client_configuration.api_key.clone();
    let client_id = edc_client_configuration.client_id.clone();
    let openid_issuer_url = edc_client_configuration.openid_issuer_url.clone();

    let content = if let Some(client_id) = &client_id
      && let Some(openid_issuer_url) = openid_issuer_url
    {
      let config = Config::new(client_id.clone(), openid_issuer_url);

      html!(
        <OAuth2 {config}>
          <OauthInnerApplication
            {management_url}
            {api_key}
            participant_id={client_id.clone()}
            {onlogout}
          />
        </OAuth2>
      )
    } else {
      html!(
        <LoggedInApplication
          {management_url}
          {api_key}
          participant_id={client_id.unwrap_or_default()}
          {onlogout}
        />
      )
    };

    html!(<Router<AppRoute> default={AppRoute::Assets}>{ content }</Router<AppRoute>>)
  } else {
    html!(<LoginComponent {onconfiguration} />)
  }
}