5 Commits

Author SHA1 Message Date
d25fb283cc Mode templates to folders
Some checks failed
Build Crate / build (push) Failing after 1m46s
2024-08-29 16:28:05 -04:00
988d0f9807 Fix login error
All checks were successful
Build Crate / build (push) Successful in 1m46s
2024-08-29 01:43:14 -04:00
2409cd1f52 Merge branch 'fix/login-error'
All checks were successful
Build Crate / build (push) Successful in 1m42s
2024-08-29 00:41:46 -04:00
8714f65a0f Remove reset after login error
All checks were successful
Build Crate / build (push) Successful in 16m5s
2024-08-29 00:37:24 -04:00
893a9b5a06 Merge branch 'ft/add-error-handling'
All checks were successful
Build Crate / build (push) Successful in 1m56s
2024-08-29 00:18:59 -04:00
12 changed files with 23 additions and 78 deletions

View File

@@ -57,6 +57,7 @@ fn login_form_capsule<G: Html>(
{ {
spawn_local_scoped(cx, async move { spawn_local_scoped(cx, async move {
let global_state = Reactor::<G>::from_cx(cx).get_global_state::<AppStateRx>(cx); let global_state = Reactor::<G>::from_cx(cx).get_global_state::<AppStateRx>(cx);
state.reset();
global_state.modals_open.login.set(OpenState::Closed) global_state.modals_open.login.set(OpenState::Closed)
}); });
} }
@@ -117,7 +118,6 @@ fn login_form_capsule<G: Html>(
if response.status() != StatusCode::OK { if response.status() != StatusCode::OK {
let response = response.json::<GenericResponse>().await.unwrap(); let response = response.json::<GenericResponse>().await.unwrap();
state.error.set(response.status.to_string()); state.error.set(response.status.to_string());
state.reset();
return; return;
} }

View File

@@ -70,10 +70,10 @@ pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new() PerseusApp::new()
.global_state_creator(crate::global_state::get_global_state_creator()) .global_state_creator(crate::global_state::get_global_state_creator())
.template(crate::templates::index::get_template()) .template(crate::templates::pool::index::get_template())
.template(crate::templates::add_game_form::get_template()) .template(crate::templates::pool::add_game_form::get_template())
.template(crate::templates::one_v_one_board::get_template()) .template(crate::templates::pool::one_v_one_board::get_template())
.template(crate::templates::overall_board::get_template()) .template(crate::templates::pool::overall_board::get_template())
.capsule_ref(&*crate::capsules::login_form::LOGIN_FORM) .capsule_ref(&*crate::capsules::login_form::LOGIN_FORM)
.capsule_ref(&*crate::capsules::forgot_password_form::FORGOT_PASSWORD_FORM) .capsule_ref(&*crate::capsules::forgot_password_form::FORGOT_PASSWORD_FORM)
.capsule_ref(&*crate::capsules::register_form::REGISTER_FORM) .capsule_ref(&*crate::capsules::register_form::REGISTER_FORM)

View File

@@ -1,66 +0,0 @@
// Not a page, global state that is shared between all pages
use perseus::{prelude::*, state::GlobalStateCreator};
use serde::{Deserialize, Serialize};
use crate::{
models::auth::Claims,
state_enums::{LoginState, OpenState},
};
#[derive(Serialize, Deserialize, ReactiveState, Clone)]
#[rx(alias = "AppStateRx")]
pub struct AppState {
#[rx(nested)]
pub auth: AuthData,
#[rx(nested)]
pub modals_open: ModalOpenData,
}
#[derive(Serialize, Deserialize, ReactiveState, Clone)]
#[rx(alias = "AuthDataRx")]
pub struct AuthData {
pub state: LoginState,
pub username: Option<String>,
pub claims: Claims,
}
#[derive(Serialize, Deserialize, ReactiveState, Clone)]
#[rx(alias = "ModalOpenDataRx")]
pub struct ModalOpenData {
pub login: OpenState,
}
pub fn get_global_state_creator() -> GlobalStateCreator {
GlobalStateCreator::new().build_state_fn(get_build_state)
}
#[engine_only_fn]
pub async fn get_build_state() -> AppState {
AppState {
auth: AuthData {
state: LoginState::Unknown,
username: None,
claims: Claims {
sub: "".to_owned(),
exp: 0,
},
},
modals_open: ModalOpenData {
login: OpenState::Closed,
},
}
}
// Client only code to check if they're authenticated
#[cfg(client)]
impl AuthDataRx {
pub fn detect_state(&self) {
// If the user is in a known state, return
if let LoginState::Authenticated | LoginState::NotAuthenticated = *self.state.get() {
return;
}
// TODO -> Get state from storage
self.state.set(LoginState::NotAuthenticated);
}
}

View File

@@ -1,14 +1,21 @@
pub mod add_game_form; pub mod pickleball;
pub mod index; pub mod pool;
pub mod one_v_one_board; pub mod table_tennis;
pub mod overall_board; pub mod user;
#[cfg(client)] #[cfg(client)]
use perseus::utils::get_path_prefix_client; use perseus::utils::get_path_prefix_client;
#[cfg(client)] #[cfg(client)]
pub fn get_api_path(path: &str) -> String { pub fn get_api_path(path: &str) -> String {
#[cfg(engine)]
{
path.to_string()
}
#[cfg(client)]
{
let origin = web_sys::window().unwrap().origin(); let origin = web_sys::window().unwrap().origin();
let base_path = get_path_prefix_client(); let base_path = get_path_prefix_client();
format!("{}{}{}", origin, base_path, path) format!("{}{}{}", origin, base_path, path)
} }
}

View File

View File

@@ -0,0 +1,4 @@
pub mod add_game_form;
pub mod index;
pub mod one_v_one_board;
pub mod overall_board;

View File

View File