52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
|
|
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) => {
|
||
|
|
localStorage.setItem('access_token', token)
|
||
|
|
set({ user, token, isLoggedIn: true })
|
||
|
|
},
|
||
|
|
|
||
|
|
logout: () => {
|
||
|
|
localStorage.removeItem('access_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,
|
||
|
|
}),
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|