u
This commit is contained in:
1 parent
c0531c1d0a
commit
46106d0c76
13 files changed
+171
-146
No files matched your search
@@ -1,65 +1,45 @@
|
||||
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()
|
||||
// navStore.navigateToAuth()
|
||||
navStore.replace(`/auth`)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
// 1️⃣ 初始化默认空间(如果用户当前没选中空间)
|
||||
if (!spaceStore.inSpace()) {
|
||||
const res = await enterDefaultSpaceApi()
|
||||
if (res.isSuccess) {
|
||||
if (res.data.space_id === 0) {
|
||||
// 跳转到空间管理页面
|
||||
}
|
||||
spaceStore.setCurrentSpace(res.data)
|
||||
}
|
||||
}
|
||||
if (spaceStore.inSpace())
|
||||
return
|
||||
|
||||
// 2️⃣ 初始化分类
|
||||
await moneyCategoryStore.init()
|
||||
const res = await enterDefaultSpaceApi()
|
||||
if (!res.isSuccess)
|
||||
return
|
||||
|
||||
const space = res.data
|
||||
if (space.space_id === 0) {
|
||||
navStore.navigateTo(`/space`)
|
||||
}
|
||||
catch (err) {
|
||||
console.error('App init error:', err)
|
||||
}
|
||||
finally {
|
||||
// 5️⃣ 初始化完成
|
||||
set({ ready: true })
|
||||
else {
|
||||
spaceStore.setCurrentSpace(space)
|
||||
|
||||
navStore.replace(`(tabs)`)
|
||||
}
|
||||
},
|
||||
|
||||
reset: () => {
|
||||
set({ ready: false })
|
||||
useMoneyCategoryStore.getState().clear()
|
||||
useUserStore.getState().clear()
|
||||
useSpaceStore.getState().clear()
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { icons } from 'lucide-react-native'
|
||||
import { router } from 'expo-router'
|
||||
import { router, useNavigation } from 'expo-router'
|
||||
import { create } from 'zustand'
|
||||
|
||||
export interface NavItem {
|
||||
@@ -11,8 +11,10 @@ export interface NavItem {
|
||||
interface NavState {
|
||||
navMenus: NavItem[]
|
||||
pathname: string
|
||||
replace: (p: string) => void
|
||||
setPathname: (p: string) => void
|
||||
navigateToAuth: () => void
|
||||
navigateTo: (p: string) => void
|
||||
setNavMenus: (menus: NavItem[]) => void
|
||||
}
|
||||
|
||||
@@ -21,7 +23,7 @@ const DEFAULT_NAV_MENUS: NavItem[] = [
|
||||
{ label: '恋爱记', path: '/love', icon: 'Heart' },
|
||||
{ label: '聊天', path: '/chat', icon: 'MessageCircle' },
|
||||
{ label: '个人中心', path: '/user', icon: 'CircleUserRound' },
|
||||
{ label: '空间管理', path: '/space/manage', icon: 'Earth' },
|
||||
{ label: '空间管理', path: '/space', icon: 'Earth' },
|
||||
]
|
||||
|
||||
export const useNavStore = create<NavState>()(
|
||||
@@ -37,6 +39,15 @@ export const useNavStore = create<NavState>()(
|
||||
router.replace('/auth')
|
||||
}
|
||||
},
|
||||
navigateTo: (p: string) => {
|
||||
router.navigate(p)
|
||||
},
|
||||
replace: (p: string) => {
|
||||
if (router.canDismiss()) {
|
||||
router.dismissAll()
|
||||
}
|
||||
router.replace(p)
|
||||
},
|
||||
setNavMenus: navMenus => set({ navMenus }),
|
||||
}),
|
||||
)
|
||||
Reference in new issue
Block a user