81 lines
2.0 KiB
Rust
81 lines
2.0 KiB
Rust
use yew::prelude::*;
|
|
use yew_router::prelude::*;
|
|
|
|
use crate::cookies;
|
|
use crate::layouts;
|
|
|
|
pub mod home;
|
|
pub mod login;
|
|
pub mod not_found;
|
|
pub mod settings;
|
|
|
|
#[derive(Clone, Routable, PartialEq, Eq)]
|
|
pub enum Route {
|
|
#[at("/")]
|
|
Home,
|
|
#[at("/settings")]
|
|
Settings,
|
|
#[at("/login")]
|
|
Login,
|
|
#[not_found]
|
|
#[at("/404")]
|
|
NotFound,
|
|
}
|
|
|
|
pub fn switch(routes: &Route) -> Html {
|
|
let token = {
|
|
let tmp = wasm_cookies::get(cookies::TOKEN);
|
|
if let Some(x) = tmp {
|
|
if let Ok(y) = x {
|
|
Some(y)
|
|
} else {
|
|
wasm_cookies::delete(cookies::TOKEN);
|
|
None
|
|
}
|
|
} else {
|
|
None
|
|
}
|
|
};
|
|
let logged_in = token.is_some();
|
|
let admin = {
|
|
let tmp = wasm_cookies::get(cookies::ADMIN);
|
|
if let Some(x) = tmp {
|
|
if let Ok(_) = x {
|
|
true
|
|
} else {
|
|
wasm_cookies::delete(cookies::ADMIN);
|
|
false
|
|
}
|
|
} else {
|
|
false
|
|
}
|
|
};
|
|
|
|
match routes {
|
|
Route::Home => {
|
|
html! {
|
|
<layouts::logged_in::LoggedIn {logged_in}>
|
|
<layouts::main::Main token={token.to_owned()} {logged_in}>
|
|
<home::Home {token} />
|
|
</layouts::main::Main>
|
|
</layouts::logged_in::LoggedIn>
|
|
}
|
|
}
|
|
Route::Settings => {
|
|
html! {
|
|
<layouts::logged_in::LoggedIn {logged_in}>
|
|
<layouts::main::Main token={token.to_owned()} {logged_in}>
|
|
<settings::Settings {token} {admin} />
|
|
</layouts::main::Main>
|
|
</layouts::logged_in::LoggedIn>
|
|
}
|
|
}
|
|
Route::Login => html! {
|
|
<login::Login {token} {logged_in} />
|
|
},
|
|
Route::NotFound => html! {
|
|
<not_found::NotFound {token} {logged_in} />
|
|
},
|
|
}
|
|
}
|