veza/apps/web/src/features/auth/store/authStore.ts
2025-12-03 22:56:50 +01:00

60 lines
1.4 KiB
TypeScript

import { create } from 'zustand';
import { persist } from 'zustand/middleware';
import { User, AuthResponse, AuthTokens } from '../types/index';
interface AuthState {
user: User | null;
accessToken: string | null;
refreshToken: string | null;
isAuthenticated: boolean;
// Actions
login: (response: AuthResponse) => void;
setTokens: (tokens: AuthTokens) => void;
logout: () => void;
}
export const useAuthStore = create<AuthState>()(
persist(
(set) => ({
user: null,
accessToken: null,
refreshToken: null,
isAuthenticated: false,
login: (response: AuthResponse) => {
set({
user: response.user,
accessToken: response.token.access_token,
refreshToken: response.token.refresh_token,
isAuthenticated: true,
});
},
setTokens: (tokens: AuthTokens) => {
set({
accessToken: tokens.access_token,
refreshToken: tokens.refresh_token,
});
},
logout: () => {
set({
user: null,
accessToken: null,
refreshToken: null,
isAuthenticated: false,
});
},
}),
{
name: 'auth-storage', // key in localStorage
partialize: (state) => ({
user: state.user,
accessToken: state.accessToken,
refreshToken: state.refreshToken,
isAuthenticated: state.isAuthenticated,
}),
}
)
);