Files
juip-web/src/components/stores/profile.ts

34 lines
866 B
TypeScript

import { create } from "zustand"
import {
AUTH_EVENT,
getUserInfo,
getUserToken,
type UserInfoRecord,
} from "@/api/token"
export type ProfileState = {
token: string | null
userInfo: UserInfoRecord | null
}
type ProfileActions = {
refreshFromStorage: () => void
}
export type ProfileStore = ProfileState & ProfileActions
export const useProfileStore = create<ProfileStore>()(set => ({
token: getUserToken(),
userInfo: getUserInfo<UserInfoRecord>(),
refreshFromStorage: () => {
set({ token: getUserToken(), userInfo: getUserInfo<UserInfoRecord>() })
},
}))
// 应用入口调用一次,监听登录态变化(含跨标签页 focus 同步)
export function initProfileStore() {
const sync = () => useProfileStore.getState().refreshFromStorage()
window.addEventListener(AUTH_EVENT, sync)
window.addEventListener("focus", sync)
}