57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import { create } from 'zustand';
|
|
import { persist } from 'zustand/middleware';
|
|
import type { User, AuthState } from '../types';
|
|
|
|
interface AuthStore extends AuthState {
|
|
// Actions
|
|
login: (user: User, token: string, refreshToken: string) => void;
|
|
logout: () => void;
|
|
updateUser: (user: Partial<User>) => void;
|
|
setToken: (token: string) => void;
|
|
}
|
|
|
|
export const useAuthStore = create<AuthStore>()(
|
|
persist(
|
|
(set) => ({
|
|
// Initial state
|
|
user: null,
|
|
token: null,
|
|
refreshToken: null,
|
|
isAuthenticated: false,
|
|
|
|
// Actions
|
|
login: (user, token, refreshToken) =>
|
|
set({
|
|
user,
|
|
token,
|
|
refreshToken,
|
|
isAuthenticated: true,
|
|
}),
|
|
|
|
logout: () =>
|
|
set({
|
|
user: null,
|
|
token: null,
|
|
refreshToken: null,
|
|
isAuthenticated: false,
|
|
}),
|
|
|
|
updateUser: (userData) =>
|
|
set((state) => ({
|
|
user: state.user ? { ...state.user, ...userData } : null,
|
|
})),
|
|
|
|
setToken: (token) => set({ token }),
|
|
}),
|
|
{
|
|
name: 'mecanicas-auth-storage',
|
|
partialize: (state) => ({
|
|
token: state.token,
|
|
refreshToken: state.refreshToken,
|
|
user: state.user,
|
|
isAuthenticated: state.isAuthenticated,
|
|
}),
|
|
}
|
|
)
|
|
);
|