erp-mecanicas-diesel-fronte.../src/store/authStore.ts

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,
}),
}
)
);