Files
tripwithbonus/frontend/app/store/userStore.ts
2025-05-16 19:29:46 +03:00

48 lines
1.4 KiB
TypeScript

import { create } from 'zustand'
import { persist } from 'zustand/middleware'
import { User, UserState } from '../types'
interface UserStore extends UserState {
// состояние
isAuthenticated: boolean
user: User | null
// действия
setUser: (user: User | null) => void
setAuthenticated: (isAuthenticated: boolean) => void
logout: () => void
// асинхронные действия
//! что пользователь может делать асинхронно?
}
const useUserStore = create<UserStore>()(
persist(
(set) => ({
// начальное состояние
isAuthenticated: false,
user: null,
favorites: [],
// синхронные действия
setUser: (user) => set({ user }),
setAuthenticated: (isAuthenticated) => set({ isAuthenticated }),
logout: () =>
set({
isAuthenticated: false,
user: null,
}),
}),
//! асинхронщина?
{ name: 'user-store' }
)
)
export default useUserStore
// пример использования
// const { user, isAuthenticated } = useUserStore() -- получаем данные из стора
// const { setUser, setAuthenticated } = useUserStore() -- устанавливаем данные в стор
// const { logout } = useUserStore() -- выходим из пользовательского аккаунта