Files
x-server-mobile/frontend/src/stores/user.ts
T

52 lines
1.3 KiB
TypeScript
Raw Normal View History

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)
set({ user, token, isLoggedIn: true })
},
logout: () => {
2026-02-25 23:54:38 +08:00
localStorage.removeItem('token')
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,
}),
}
)
)