Files
frontend/src/navigation/MainNavigator.tsx

101 lines
2.5 KiB
TypeScript
Raw Normal View History

/**
*
*
*
* - RootNavigator: 处理根导航和认证状态
* - DesktopNavigator: 处理桌面端侧边栏导航
* - SimpleMobileTabNavigator: 处理移动端 Tab
* - navigationService: 提供全局导航方法
*
* 1118 200
*/
import React, { useEffect, useState } from 'react';
import { LinkingOptions } from '@react-navigation/native';
import { Platform } from 'react-native';
import type { RootStackParamList } from './types';
import { RootNavigator } from './RootNavigator';
// 导入认证 Store
import { useAuthStore } from '../stores';
// Deep linking 配置
const linking: LinkingOptions<RootStackParamList> = {
prefixes: [],
config: {
screens: {
Auth: {
screens: {
Login: 'login',
Register: 'register',
ForgotPassword: 'forgot-password',
},
},
Main: {
screens: {
HomeTab: {
screens: {
Home: 'home',
Search: 'search',
},
},
MessageTab: {
screens: {
MessageList: 'messages',
Notifications: 'notifications',
},
},
ProfileTab: {
screens: {
Profile: 'me',
Settings: 'settings',
EditProfile: 'me/edit',
AccountSecurity: 'me/security',
NotificationSettings: 'me/notifications',
BlockedUsers: 'me/blocked',
},
},
},
},
PostDetail: 'posts/:postId',
UserProfile: 'users/:userId',
CreatePost: 'posts/create',
Chat: 'chat/:conversationId',
FollowList: 'users/:userId/:type',
},
},
};
/**
*
*
*
* 1.
* 2. RootNavigator
* 3. Deep Linking
*/
export default function MainNavigator() {
const { isAuthenticated, fetchCurrentUser } = useAuthStore();
const [isInitializing, setIsInitializing] = useState(true);
// 初始化认证状态
useEffect(() => {
const initAuth = async () => {
await fetchCurrentUser();
setIsInitializing(false);
};
initAuth();
}, [fetchCurrentUser]);
return (
<RootNavigator
isAuthenticated={isAuthenticated}
isInitializing={isInitializing}
/>
);
}
// 导出 linking 配置供外部使用
export { linking };