Files
workspace/code/app/app-rn/src/store/user.ts
T
2026-06-26 17:35:29 +08:00

74 lines
1.4 KiB
TypeScript

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<UserState>()(
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,
}),
},
),
);