blob: fe3c582de561085ae36954efc951dbfc44615fa4 [file] [log] [blame]
Krishya6bf199c2025-06-06 21:14:23 +08001import React from 'react';
2import { Route, useLocation } from 'wouter';
3import { UserProvider, useUser } from './context/UserContext';
Krishyac6b24832025-06-05 20:13:20 +08004
Krishya1df05892025-04-05 21:16:30 +08005import AuthPage from './pages/AuthPage/AuthPage';
Krishya75e43c02025-04-05 21:16:30 +08006import HomePage from './pages/HomePage';
Krishyae71688a2025-04-10 21:25:17 +08007import FriendMoments from './pages/FriendMoments/FriendMoments';
Krishya7ec1dd02025-04-19 15:29:03 +08008import ForumPage from './pages/Forum/posts-main/ForumPage';
22301009ecc1c1c2025-04-09 21:56:23 +08009import SeedList from './pages/SeedList/SeedList';
Krishya7ec1dd02025-04-19 15:29:03 +080010import PostDetailPage from './pages/Forum/posts-detail/PostDetailPage';
Krishyac6b24832025-06-05 20:13:20 +080011import { GroupProvider } from './context/useGroupStore';
223010095b28c672025-04-10 20:12:45 +080012import PublishSeed from './pages/PublishSeed/PublishSeed';
Krishya8f2fec82025-06-04 21:54:46 +080013import SeedDetail from './pages/SeedList/SeedDetail/SeedDetail';
223010093a876cc2025-04-14 16:22:20 +080014import InterestGroup from './pages/InterestGroup/InterestGroup';
223010097ff51f22025-04-15 21:35:28 +080015import UserProfile from './pages/UserCenter/UserProfile';
Krishya7ec1dd02025-04-19 15:29:03 +080016import CreatePostPage from './pages/Forum/posts-create/CreatePostPage';
Krishyaf1d0ea82025-05-03 17:01:58 +080017import MessagePage from './pages/MessagePage/MessagePage';
18import CreateMoment from './pages/FriendMoments/CreateMoment';
Krishya73cd8822025-06-07 15:48:41 +080019// import LevelPage from './pages/LevelPage/LevelPage';
223010094952a0f2025-06-07 18:58:16 +080020import NewbieTasks from './pages/NewUserGuide/NewbieTasks';
Krishya6bf199c2025-06-06 21:14:23 +080021import UserDynamics from './pages/UserCenter/UserDynamics';
22301009648cb7e2025-06-04 08:54:23 +080022import UserFriends from './pages/UserCenter/UserFriends';
2230100964011632025-06-04 21:57:22 +080023import UserCollect from './pages/UserCenter/UserCollect';
Krishya7096ab12025-06-05 17:15:46 +080024import UserInvite from './pages/UserCenter/UserInvite';
Krishya767f9b92025-06-05 23:59:37 +080025import UserInfo from './pages/UserInfo/UserInfo';
Krishyac6b24832025-06-05 20:13:20 +080026import UserLayout from './pages/UserCenter/UserLayout';
223010093d8132e2025-06-07 11:34:38 +080027import NewUserGuide from './pages/NewUserGuide/NewUserGuide';
223010094952a0f2025-06-07 18:58:16 +080028import UserRecharge from './pages/UserCenter/UserRecharge';
Krishyac6b24832025-06-05 20:13:20 +080029
Krishya8f2fec82025-06-04 21:54:46 +080030function RedirectToAuth() {
31 if (typeof window !== 'undefined') {
32 window.location.replace('/auth');
33 }
34 return null;
35}
36
Krishya6bf199c2025-06-06 21:14:23 +080037// 私有路由保护组件
38function PrivateRoute({ component: Component }) {
39 const [location, setLocation] = useLocation();
40 const { user, loading } = useUser();
41
42 if (loading) {
43 return <div>加载中...</div>;
44 }
45
46 if (!user) {
47 setLocation('/auth');
48 return null;
49 }
50
51 return <Component />;
52}
53
Krishya75e43c02025-04-05 21:16:30 +080054function App() {
55 return (
56 <UserProvider>
Krishyac6b24832025-06-05 20:13:20 +080057 <GroupProvider>
Krishyab5ef96d2025-06-05 13:57:05 +080058 <>
Krishya6bf199c2025-06-06 21:14:23 +080059 {/* 公开路由 */}
Krishyab5ef96d2025-06-05 13:57:05 +080060 <Route path="/auth" component={AuthPage} />
Krishya767f9b92025-06-05 23:59:37 +080061
Krishya6bf199c2025-06-06 21:14:23 +080062 {/* 根路径跳转到登录页 */}
63 <Route path="/" component={() => <RedirectToAuth />} />
Krishyac6b24832025-06-05 20:13:20 +080064
Krishya6bf199c2025-06-06 21:14:23 +080065 {/* 私有路由用 PrivateRoute 包裹 */}
66 <Route path="/friend-moments" component={() => <PrivateRoute component={FriendMoments} />} />
67 <Route path="/friend-moments/create" component={() => <PrivateRoute component={CreateMoment} />} />
68 <Route path="/forum" component={() => <PrivateRoute component={ForumPage} />} />
69 <Route path="/forum/post/:postId" component={({ postId }) => <PrivateRoute component={() => <PostDetailPage postId={postId} />} />} />
70 <Route path="/forum/create-post" component={() => <PrivateRoute component={CreatePostPage} />} />
71 <Route path="/seed-list" component={() => <PrivateRoute component={SeedList} />} />
72 <Route path="/publish-seed" component={() => <PrivateRoute component={PublishSeed} />} />
73 <Route path="/seed/:id" component={({ id }) => <PrivateRoute component={() => <SeedDetail id={id} />} />} />
74 <Route path="/interest-groups" component={() => <PrivateRoute component={InterestGroup} />} />
75 <Route path="/messages" component={() => <PrivateRoute component={MessagePage} />} />
Krishya73cd8822025-06-07 15:48:41 +080076 {/* <Route path="/level" component={() => <PrivateRoute component={LevelPage} />} /> */}
Krishya6bf199c2025-06-06 21:14:23 +080077 <Route path="/information/:userId" component={({ userId }) => <PrivateRoute component={() => <UserInfo userId={userId} />} />} />
223010093d8132e2025-06-07 11:34:38 +080078 <Route path="/new-user-guide" component={() => <PrivateRoute component={NewUserGuide} />} />
Krishya6bf199c2025-06-06 21:14:23 +080079
80 {/* 用户中心路由 */}
Krishyac6b24832025-06-05 20:13:20 +080081 <Route path="/user/profile" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080082 <PrivateRoute component={() => <UserLayout><UserProfile /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080083 )} />
223010094952a0f2025-06-07 18:58:16 +080084 <Route path="/user/newbie-tasks" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080085 <PrivateRoute component={() => <UserLayout><NewbieTasks /></UserLayout>} />
223010094952a0f2025-06-07 18:58:16 +080086 )} />
Krishya6bf199c2025-06-06 21:14:23 +080087 <Route path="/user/dynamics" component={() => (
88 <PrivateRoute component={() => <UserLayout><UserDynamics /></UserLayout>} />
89 )} />
Krishyac6b24832025-06-05 20:13:20 +080090 <Route path="/user/friends" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080091 <PrivateRoute component={() => <UserLayout><UserFriends /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080092 )} />
93 <Route path="/user/collections" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080094 <PrivateRoute component={() => <UserLayout><UserCollect /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080095 )} />
96 <Route path="/user/invite" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080097 <PrivateRoute component={() => <UserLayout><UserInvite /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080098 )} />
223010094952a0f2025-06-07 18:58:16 +080099 <Route path="/user/recharge" component={() => (
100 <PrivateRoute component={() => <UserLayout><UserRecharge /></UserLayout>} />
2230100901d3ff92025-06-07 16:16:26 +0800101 )} />
223010094952a0f2025-06-07 18:58:16 +0800102 </>
Krishyab5ef96d2025-06-05 13:57:05 +0800103 </GroupProvider>
Krishya75e43c02025-04-05 21:16:30 +0800104 </UserProvider>
105 );
106}
107
Krishya73cd8822025-06-07 15:48:41 +0800108export default App;