2026-02-24 17:57:25 +08:00
|
|
|
import { create } from 'zustand'
|
|
|
|
|
import { persist } from 'zustand/middleware'
|
|
|
|
|
import type { User, Company } from '@/types'
|
|
|
|
|
|
|
|
|
|
interface UserState {
|
|
|
|
|
user: User | null
|
|
|
|
|
token: string | null
|
|
|
|
|
currentCompany: Company | null
|
|
|
|
|
isLoggedIn: boolean
|
|
|
|
|
|
|
|
|
|
// Actions
|
|
|
|
|
setUser: (user: User | null) => void
|
|
|
|
|
setToken: (token: string | null) => void
|
|
|
|
|
setCurrentCompany: (company: Company | null) => void
|
|
|
|
|
login: (user: User, token: string) => void
|
|
|
|
|
logout: () => void
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const useUserStore = create<UserState>()(
|
|
|
|
|
persist(
|
|
|
|
|
(set) => ({
|
|
|
|
|
user: null,
|
|
|
|
|
token: null,
|
|
|
|
|
currentCompany: null,
|
|
|
|
|
isLoggedIn: false,
|
|
|
|
|
|
|
|
|
|
setUser: (user) => set({ user }),
|
|
|
|
|
setToken: (token) => set({ token }),
|
|
|
|
|
setCurrentCompany: (currentCompany) => set({ currentCompany }),
|
|
|
|
|
|
|
|
|
|
login: (user, token) => {
|
2026-02-25 23:54:38 +08:00
|
|
|
localStorage.setItem('token', token)
|
2026-02-24 17:57:25 +08:00
|
|
|
set({ user, token, isLoggedIn: true })
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
logout: () => {
|
2026-02-25 23:54:38 +08:00
|
|
|
localStorage.removeItem('token')
|
2026-02-24 17:57:25 +08:00
|
|
|
set({ user: null, token: null, currentCompany: null, isLoggedIn: false })
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
{
|
|
|
|
|
name: 'user-storage',
|
|
|
|
|
partialize: (state) => ({
|
|
|
|
|
user: state.user,
|
|
|
|
|
token: state.token,
|
|
|
|
|
currentCompany: state.currentCompany,
|
|
|
|
|
isLoggedIn: state.isLoggedIn,
|
|
|
|
|
}),
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
)
|