summaryrefslogtreecommitdiffstats
path: root/src/views/mod.rs
blob: 112f9306e30f2b45196e2255dc2ba39272e6373a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use filamento::UpdateMessage;
use leptos::prelude::*;
use login_page::LoginPage;
use macaw::Macaw;
use tokio::sync::mpsc::Receiver;

use crate::client::Client;

pub mod login_page;
pub mod macaw;

pub enum AppState {
    LoggedOut,
    LoggedIn,
}

#[component]
pub fn App() -> impl IntoView {
    let (app, set_app) = signal(AppState::LoggedOut);
    let (client, set_client) = signal(None::<(Client, Receiver<UpdateMessage>)>);

    view! {
        {move || match &*app.read() {
            AppState::LoggedOut => view! { <LoginPage set_app set_client /> }.into_any(),
            AppState::LoggedIn => {
                if let Some((client, updates)) = set_client.write_untracked().take() {
                    view! { <Macaw client updates set_app /> }.into_any()
                } else {
                    set_app.set(AppState::LoggedOut);
                    view! { <LoginPage set_app set_client /> }.into_any()
                }
            }
        }}
    }
}