Files
DataClaw/frontend/src/store/authStore.ts
T

40 lines
1.1 KiB
TypeScript

import { create } from 'zustand';
export interface User {
id: number;
username: string;
email: string;
is_admin: boolean;
}
interface AuthState {
user: User | null;
token: string | null;
isAuthenticated: boolean;
login: (user: User, token: string) => void;
updateUser: (user: Partial<User>) => void;
logout: () => void;
}
export const useAuthStore = create<AuthState>((set) => ({
user: JSON.parse(localStorage.getItem('user') || 'null'),
token: localStorage.getItem('token'),
isAuthenticated: !!localStorage.getItem('token'),
login: (user, token) => {
localStorage.setItem('user', JSON.stringify(user));
localStorage.setItem('token', token);
set({ user, token, isAuthenticated: true });
},
updateUser: (updatedUser) => set((state) => {
const user = state.user ? { ...state.user, ...updatedUser } : null;
if (user) {
localStorage.setItem('user', JSON.stringify(user));
}
return { user };
}),
logout: () => {
localStorage.removeItem('user');
localStorage.removeItem('token');
set({ user: null, token: null, isAuthenticated: false });
},
}));