Files
tuliprox/frontend/src/app/components/api_user/api_user_view.rs
T

59 lines
2.2 KiB
Rust
Raw Normal View History

2025-08-27 23:12:56 +02:00
use yew::{function_component, html, Callback, Html};
use crate::app::components::loading_indicator::BusyIndicator;
2025-09-24 12:31:38 +02:00
use crate::app::components::{AppIcon, IconButton, ToastrView, WebsocketStatus};
2025-09-02 22:31:20 +02:00
use crate::app::components::theme::Theme;
2025-08-27 23:12:56 +02:00
use crate::hooks::use_service_context;
use crate::provider::DialogProvider;
2025-09-02 22:31:20 +02:00
use yew::use_state;
2025-08-27 23:12:56 +02:00
#[function_component]
pub fn ApiUserView() -> Html {
let services = use_service_context();
2025-09-02 22:31:20 +02:00
let theme = use_state(Theme::get_current_theme);
let handle_theme_switch = {
let set_theme = theme.clone();
Callback::from(move |_| {
let new_theme = if *set_theme == Theme::Dark { Theme::Bright } else { Theme::Dark };
new_theme.switch_theme();
set_theme.set(new_theme);
})
};
2025-08-27 23:12:56 +02:00
let handle_logout = {
let services_ctx = services.clone();
Callback::from(move |_| services_ctx.auth.logout())
};
html! {
<DialogProvider>
<ToastrView />
<div class="tp__app">
<BusyIndicator />
<div class="tp__app-main">
<div class="tp__app-main__header tp__app-header">
<div class="tp__app-main__header-left">
{
if let Some(ref title) = services.config.ui_config.app_title {
2025-08-28 00:37:20 +02:00
html! { <span class="tp__app-title">{ title }</span> }
2025-08-27 23:12:56 +02:00
} else {
2025-08-28 00:37:20 +02:00
html! { <AppIcon name="AppTitle" /> }
2025-08-27 23:12:56 +02:00
}
}
</div>
<div class={"tp__app-header-toolbar"}>
2025-09-24 12:31:38 +02:00
<WebsocketStatus/>
2025-09-02 22:31:20 +02:00
<IconButton name="Theme" icon={if *theme == Theme::Bright {"Moon"} else {"Sun"}} onclick={handle_theme_switch} />
2025-08-27 23:12:56 +02:00
<IconButton name="Logout" icon="Logout" onclick={handle_logout} />
</div>
</div>
<div class="tp__app-main__body">
{" TODO "}
</div>
</div>
</div>
</DialogProvider>
}
}