diff --git a/app/src/full_context.rs b/app/src/full_context.rs index 02b44f4..fe0215e 100644 --- a/app/src/full_context.rs +++ b/app/src/full_context.rs @@ -170,7 +170,7 @@ pub fn FullContextRedirect<'a>(cx: Scope<'a, RedirectorProps<'a>>) -> Element { Ok(_) => true, Err(StorageError::KeyNotFound(_)) => { navigator.push(Route::Login); - false + return None; } Err(e) => unreachable!("Could not get token: {e:?}"), }; @@ -179,7 +179,7 @@ pub fn FullContextRedirect<'a>(cx: Scope<'a, RedirectorProps<'a>>) -> Element { Ok(_) => true, Err(StorageError::KeyNotFound(_)) => { navigator.push(Route::HouseholdSelection); - false + return None; } Err(e) => unreachable!("Could not get household: {e:?}"), }; diff --git a/app/src/main.rs b/app/src/main.rs index cbad1a3..3a946e6 100644 --- a/app/src/main.rs +++ b/app/src/main.rs @@ -134,7 +134,8 @@ pub fn LoginRedirect(cx: Scope) -> Element { let token = match LocalStorage::get::("token") { Ok(v) => Some(v), Err(StorageError::KeyNotFound(_)) => { - return None; + navigator.push(Route::Login); + None } Err(e) => unreachable!("Could not get token: {e:?}"), }; @@ -142,16 +143,28 @@ pub fn LoginRedirect(cx: Scope) -> Element { use_shared_state_provider(cx, || token.clone()); cx.render(match token { - Some(_) => rsx! { - Outlet:: {} + Some(info) => rsx! { + LoginRedirectInner {info: info}, }, None => { - navigator.push(Route::Login); rsx! {{}} } }) } +#[derive(Props, PartialEq)] +struct LoginRedirectInnerProps { + info: LoginInfo, +} + +fn LoginRedirectInner(cx: Scope) -> Element { + use_shared_state_provider(cx, || cx.props.info.clone()); + + cx.render(rsx! { + Outlet:: {} + }) +} + async fn do_login(username: String, password: String) -> anyhow::Result<()> { let rsp = gloo_net::http::Request::post(api!("login")) .json(&LoginRequest {