| import React from 'react'; |
| import { Route, useLocation } from 'wouter'; |
| import { UserProvider, useUser } from './context/UserContext'; |
| |
| import AuthPage from './pages/AuthPage/AuthPage'; |
| import HomePage from './pages/HomePage'; |
| import FriendMoments from './pages/FriendMoments/FriendMoments'; |
| import ForumPage from './pages/Forum/posts-main/ForumPage'; |
| import SeedList from './pages/SeedList/SeedList'; |
| import PostDetailPage from './pages/Forum/posts-detail/PostDetailPage'; |
| import { GroupProvider } from './context/useGroupStore'; |
| import PublishSeed from './pages/PublishSeed/PublishSeed'; |
| import SeedDetail from './pages/SeedList/SeedDetail/SeedDetail'; |
| import InterestGroup from './pages/InterestGroup/InterestGroup'; |
| import UserProfile from './pages/UserCenter/UserProfile'; |
| import CreatePostPage from './pages/Forum/posts-create/CreatePostPage'; |
| import MessagePage from './pages/MessagePage/MessagePage'; |
| import CreateMoment from './pages/FriendMoments/CreateMoment'; |
| // import LevelPage from './pages/LevelPage/LevelPage'; |
| import NewbieTasks from './pages/NewUserGuide/NewbieTasks'; |
| import UserDynamics from './pages/UserCenter/UserDynamics'; |
| import UserFriends from './pages/UserCenter/UserFriends'; |
| import UserCollect from './pages/UserCenter/UserCollect'; |
| import UserInvite from './pages/UserCenter/UserInvite'; |
| import UserInfo from './pages/UserInfo/UserInfo'; |
| import UserLayout from './pages/UserCenter/UserLayout'; |
| import NewUserGuide from './pages/NewUserGuide/NewUserGuide'; |
| import UserRecharge from './pages/UserCenter/UserRecharge'; |
| import GroupDetail from './pages/InterestGroup/GroupDetail'; |
| |
| function RedirectToAuth() { |
| if (typeof window !== 'undefined') { |
| window.location.replace('/auth'); |
| } |
| return null; |
| } |
| |
| // 私有路由保护组件 |
| function PrivateRoute({ component: Component }) { |
| const [location, setLocation] = useLocation(); |
| const { user, loading } = useUser(); |
| |
| if (loading) { |
| return <div>加载中...</div>; |
| } |
| |
| if (!user) { |
| setLocation('/auth'); |
| return null; |
| } |
| |
| return <Component />; |
| } |
| |
| function App() { |
| return ( |
| <UserProvider> |
| <GroupProvider> |
| <> |
| {/* 公开路由 */} |
| <Route path="/auth" component={AuthPage} /> |
| |
| {/* 根路径跳转到登录页 */} |
| <Route path="/" component={() => <RedirectToAuth />} /> |
| |
| {/* 私有路由用 PrivateRoute 包裹 */} |
| <Route path="/friend-moments" component={() => <PrivateRoute component={FriendMoments} />} /> |
| <Route path="/friend-moments/create" component={() => <PrivateRoute component={CreateMoment} />} /> |
| <Route path="/forum" component={() => <PrivateRoute component={ForumPage} />} /> |
| <Route path="/forum/post/:postId" component={({ postId }) => <PrivateRoute component={() => <PostDetailPage postId={postId} />} />} /> |
| <Route path="/forum/create-post" component={() => <PrivateRoute component={CreatePostPage} />} /> |
| <Route path="/seed-list" component={() => <PrivateRoute component={SeedList} />} /> |
| <Route path="/publish-seed" component={() => <PrivateRoute component={PublishSeed} />} /> |
| <Route path="/seed/:id" component={({ id }) => <PrivateRoute component={() => <SeedDetail id={id} />} />} /> |
| <Route path="/interest-groups" component={() => <PrivateRoute component={InterestGroup} />} /> |
| <Route path="/messages" component={() => <PrivateRoute component={MessagePage} />} /> |
| {/* <Route path="/level" component={() => <PrivateRoute component={LevelPage} />} /> */} |
| <Route path="/information/:userId" component={({ userId }) => <PrivateRoute component={() => <UserInfo userId={userId} />} />} /> |
| <Route path="/new-user-guide" component={() => <PrivateRoute component={NewUserGuide} />} /> |
| <Route path="/group/:groupId" component={({ groupId }) => <PrivateRoute component={() => <GroupDetail groupId={groupId} />} />} /> |
| |
| {/* 用户中心路由 */} |
| <Route path="/user/profile" component={() => ( |
| <PrivateRoute component={() => <UserLayout><UserProfile /></UserLayout>} /> |
| )} /> |
| <Route path="/user/newbie-tasks" component={() => ( |
| <PrivateRoute component={() => <UserLayout><NewbieTasks /></UserLayout>} /> |
| )} /> |
| <Route path="/user/dynamics" component={() => ( |
| <PrivateRoute component={() => <UserLayout><UserDynamics /></UserLayout>} /> |
| )} /> |
| <Route path="/user/friends" component={() => ( |
| <PrivateRoute component={() => <UserLayout><UserFriends /></UserLayout>} /> |
| )} /> |
| <Route path="/user/collections" component={() => ( |
| <PrivateRoute component={() => <UserLayout><UserCollect /></UserLayout>} /> |
| )} /> |
| <Route path="/user/invite" component={() => ( |
| <PrivateRoute component={() => <UserLayout><UserInvite /></UserLayout>} /> |
| )} /> |
| <Route path="/user/recharge" component={() => ( |
| <PrivateRoute component={() => <UserLayout><UserRecharge /></UserLayout>} /> |
| )} /> |
| </> |
| </GroupProvider> |
| </UserProvider> |
| ); |
| } |
| |
| export default App; |