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} />)
}
}