Spaces:
Configuration error
Configuration error
import { create } from 'zustand' | |
import { persist } from 'zustand/middleware' | |
import { User } from '../../../shared/types' | |
import { authService } from '../services/authService' | |
interface AuthState { | |
user: User | null | |
token: string | null | |
loading: boolean | |
error: string | null | |
} | |
interface AuthActions { | |
login: (email: string, password: string) => Promise<void> | |
register: (data: { | |
email: string | |
username: string | |
password: string | |
displayName: string | |
}) => Promise<void> | |
logout: () => void | |
checkAuth: () => Promise<void> | |
updateUser: (user: Partial<User>) => void | |
clearError: () => void | |
} | |
export const useAuthStore = create<AuthState & AuthActions>()( | |
persist( | |
(set, get) => ({ | |
// State | |
user: null, | |
token: null, | |
loading: false, | |
error: null, | |
// Actions | |
login: async (email: string, password: string) => { | |
set({ loading: true, error: null }) | |
try { | |
const response = await authService.login({ email, password }) | |
set({ | |
user: response.user, | |
token: response.token, | |
loading: false, | |
error: null, | |
}) | |
} catch (error: any) { | |
set({ | |
loading: false, | |
error: error.message || 'Login failed', | |
}) | |
throw error | |
} | |
}, | |
register: async (data) => { | |
set({ loading: true, error: null }) | |
try { | |
const response = await authService.register(data) | |
set({ | |
user: response.user, | |
token: response.token, | |
loading: false, | |
error: null, | |
}) | |
} catch (error: any) { | |
set({ | |
loading: false, | |
error: error.message || 'Registration failed', | |
}) | |
throw error | |
} | |
}, | |
logout: () => { | |
authService.logout() | |
set({ | |
user: null, | |
token: null, | |
error: null, | |
}) | |
}, | |
checkAuth: async () => { | |
const { token } = get() | |
if (!token) { | |
set({ loading: false }) | |
return | |
} | |
set({ loading: true }) | |
try { | |
const user = await authService.getCurrentUser() | |
set({ | |
user, | |
loading: false, | |
error: null, | |
}) | |
} catch (error) { | |
set({ | |
user: null, | |
token: null, | |
loading: false, | |
error: null, | |
}) | |
} | |
}, | |
updateUser: (userData) => { | |
const { user } = get() | |
if (user) { | |
set({ | |
user: { ...user, ...userData }, | |
}) | |
} | |
}, | |
clearError: () => { | |
set({ error: null }) | |
}, | |
}), | |
{ | |
name: 'auth-storage', | |
partialize: (state) => ({ | |
token: state.token, | |
user: state.user, | |
}), | |
} | |
) | |
) | |