use leptos::prelude::*; use wasm_bindgen_futures::spawn_local; use crate::api::{self, Me}; use crate::components::toast::{provide_toast, ToastView}; use crate::router::Location; use crate::views::admin::AdminView; use crate::views::browser::Browser; use crate::views::shares::SharesPanel; #[component] pub fn ShellView( me: ReadSignal>, set_me: WriteSignal>, set_phase: WriteSignal, loc: ReadSignal, ) -> impl IntoView { let toast = provide_toast(); let (show_shares, set_show_shares) = signal(false); let (show_admin, set_show_admin) = signal(false); let on_logout = move |_| { spawn_local(async move { let _ = api::logout().await; set_me.set(None); set_phase.set(crate::app::AuthPhase::Login); }); }; view! {
"📂 filebrowser-ng"
{move || { let m = me.get()?; let u = m.user?; let is_admin = u.is_admin; Some( view! { {u.name} "admin" } .into_view() .into_any(), ) }}
{move || { let is_admin = me .get() .and_then(|m| m.user) .map(|u| u.is_admin) .unwrap_or(false); if show_admin.get() && is_admin { view! { } .into_view() .into_any() } else { view! { } .into_view() .into_any() } }}
{move || if show_shares.get() { view! { } .into_view() .into_any() } else { view! {}.into_any() }}
} }