summaryrefslogtreecommitdiffstats
path: root/src/views/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/mod.rs')
-rw-r--r--src/views/mod.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/views/mod.rs b/src/views/mod.rs
new file mode 100644
index 0000000..112f930
--- /dev/null
+++ b/src/views/mod.rs
@@ -0,0 +1,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()
+ }
+ }
+ }}
+ }
+}
+