Files
workspace/code/allapp/allapp-rn/src/store/app.ts
T
2026-03-03 17:28:56 +08:00

67 lines
1.7 KiB
TypeScript

import { create } from 'zustand'
import { enterDefaultSpaceApi } from '@/request/api/space'
import { getUserSpaceApi } from '@/request/api/user'
import { useMoneyCategoryStore } from './moneyCategory'
import { useNavStore } from './navigation'
import { useSpaceStore } from './space'
import { useUserStore } from './user'
interface AppState {
ready: boolean
setReady: (v: boolean) => void
init: () => Promise<void>
reset: () => void
}
export const useAppStore = create<AppState>((set, get) => ({
ready: false,
setReady: (v: boolean) => set({ ready: v }),
init: async () => {
if (get().ready)
return
const userStore = useUserStore.getState()
const navStore = useNavStore.getState()
const moneyCategoryStore = useMoneyCategoryStore.getState()
const spaceStore = useSpaceStore.getState()
// 如果没登录,跳转到登录页,但不退出初始化
if (!userStore.isLoggedIn()) {
navStore.navigateToAuth()
return
}
try {
// 1️⃣ 初始化默认空间(如果用户当前没选中空间)
if (!spaceStore.inSpace()) {
const res = await enterDefaultSpaceApi()
if (res.isSuccess) {
if (res.data.space_id === 0) {
// 跳转到空间管理页面
}
spaceStore.setCurrentSpace(res.data)
}
}
// 2️⃣ 初始化分类
await moneyCategoryStore.init()
}
catch (err) {
console.error('App init error:', err)
}
finally {
// 5️⃣ 初始化完成
set({ ready: true })
}
},
reset: () => {
set({ ready: false })
useMoneyCategoryStore.getState().clear()
useUserStore.getState().clear()
useSpaceStore.getState().clear()
},
}))