warungpos-ui / src /store /useAuthStore.js
Mhamdans17
fix: prevent login page flash on logout
f2688f7
Raw
History Blame Contribute Delete
1.57 kB
import { create } from 'zustand';
import { login as loginApi } from '../api/auth';
const useAuthStore = create((set) => ({
user: JSON.parse(localStorage.getItem('user') || 'null'),
token: localStorage.getItem('token') || null,
isLoading: false,
error: null,
login: async (email, password) => {
set({ isLoading: true, error: null });
try {
const { data } = await loginApi(email, password);
localStorage.setItem('token', data.access_token);
localStorage.setItem('user', JSON.stringify(data.user));
set({ user: data.user, token: data.access_token, isLoading: false });
return data.user;
} catch (err) {
const msg = err.response?.data?.detail || 'Login gagal';
set({ error: msg, isLoading: false });
throw new Error(msg);
}
},
logout: () => {
localStorage.removeItem('token');
localStorage.removeItem('user');
// We intentionally don't call set({ user: null }) here.
// Setting state to null would trigger React Router's <Navigate to="/login">
// before the window.location.href reload completes, causing a flash.
window.location.href = '/';
},
isSuperAdmin: () => {
const state = useAuthStore.getState();
return state.user?.role === 'super_admin';
},
isOwner: () => {
const state = useAuthStore.getState();
return state.user?.role === 'owner';
},
isKasir: () => {
const state = useAuthStore.getState();
return state.user?.role === 'kasir';
},
clearError: () => set({ error: null }),
}));
export default useAuthStore;