import AsyncStorage from "@react-native-async-storage/async-storage"; import { create } from "zustand"; import { createJSONStorage, persist } from "zustand/middleware"; interface UserState { userInfo: UserInfo; isLogged: () => boolean; getUserId: () => number; setUserInfo: (userInfo: UserInfo) => void; clear: () => void; authExpired: boolean; setAuthExpired: (v: boolean) => void; updateToken: (token: string) => void; } const defaultUserInfo: UserInfo = { id: 0, token: "", nickname: "", avatar: "", }; export const useUserStore = create()( persist( (set, get) => ({ userInfo: defaultUserInfo, authExpired: false, isLogged: () => !!get().userInfo?.token, getUserId: () => get().userInfo.id, setUserInfo: (userInfo) => set({ userInfo, }), clear: () => { set({ userInfo: defaultUserInfo, }); }, setAuthExpired: (v: boolean) => set({ authExpired: v, }), updateToken: (token: string) => set((state) => ({ userInfo: { ...state.userInfo, token, }, })), }), { name: "user-storage", storage: createJSONStorage(() => AsyncStorage), partialize: (state) => ({ userInfo: state.userInfo, }), }, ), );