feat(frontend): finished login form with validation

This commit is contained in:
2025-02-21 09:16:07 -06:00
parent d939332499
commit 9719451580
25 changed files with 551 additions and 230 deletions

View File

@@ -1,16 +1,14 @@
import {useRouter} from "@tanstack/react-router";
import {useSessionStore} from "../store/sessionStore";
import {useQueryClient} from "@tanstack/react-query";
export const useLogout = () => {
const {clearSession} = useSessionStore();
const router = useRouter();
const queryClient = useQueryClient();
const logout = async () => {
router.invalidate();
router.clearCache();
await clearSession();
queryClient.invalidateQueries();
clearSession();
window.location.reload();
};

View File

@@ -9,28 +9,31 @@ type User = {
export type SessionState = {
user: User | null;
token: string | null;
setSession: (user: SessionState["user"], token: string) => void;
setSession: (user: User | null, token: string | null) => void;
clearSession: () => void;
};
export const useSessionStore = create<SessionState>((set) => {
// Initialize from localStorage
const storedUser = localStorage.getItem("user");
// Initialize token from localStorage, but user remains in memory only
const storedToken = localStorage.getItem("auth_token");
return {
user: storedUser ? JSON.parse(storedUser) : null,
user: null, // User is NOT stored in localStorage
token: storedToken || null,
setSession: (user, token) => {
localStorage.setItem("auth_token", token);
//localStorage.setItem("user", JSON.stringify(user));
if (token) {
localStorage.setItem("auth_token", token);
} else {
localStorage.removeItem("auth_token");
}
console.log("Setting session:", {user, token});
set({user, token});
},
clearSession: () => {
localStorage.removeItem("auth_token");
//localStorage.removeItem("user");
set({user: null, token: null});
},
};