blob: e47e7e2f31928556b64da2096b33f3dec8cbd820 [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';
Krishya2283d882025-05-27 22:25:19 +080019import LevelPage from './pages/LevelPage/LevelPage';
Krishya2e0f49a2025-05-29 10:59:01 +080020import NewbieTasks from './pages/UserCenter/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';
27
Krishya8f2fec82025-06-04 21:54:46 +080028function RedirectToAuth() {
29 if (typeof window !== 'undefined') {
30 window.location.replace('/auth');
31 }
32 return null;
33}
34
Krishya6bf199c2025-06-06 21:14:23 +080035// 私有路由保护组件
36function PrivateRoute({ component: Component }) {
37 const [location, setLocation] = useLocation();
38 const { user, loading } = useUser();
39
40 if (loading) {
41 return <div>加载中...</div>;
42 }
43
44 if (!user) {
45 setLocation('/auth');
46 return null;
47 }
48
49 return <Component />;
50}
51
Krishya75e43c02025-04-05 21:16:30 +080052function App() {
53 return (
54 <UserProvider>
Krishyac6b24832025-06-05 20:13:20 +080055 <GroupProvider>
Krishyab5ef96d2025-06-05 13:57:05 +080056 <>
Krishya6bf199c2025-06-06 21:14:23 +080057 {/* 公开路由 */}
Krishyab5ef96d2025-06-05 13:57:05 +080058 <Route path="/auth" component={AuthPage} />
Krishya767f9b92025-06-05 23:59:37 +080059
Krishya6bf199c2025-06-06 21:14:23 +080060 {/* 根路径跳转到登录页 */}
61 <Route path="/" component={() => <RedirectToAuth />} />
Krishyac6b24832025-06-05 20:13:20 +080062
Krishya6bf199c2025-06-06 21:14:23 +080063 {/* 私有路由用 PrivateRoute 包裹 */}
64 <Route path="/friend-moments" component={() => <PrivateRoute component={FriendMoments} />} />
65 <Route path="/friend-moments/create" component={() => <PrivateRoute component={CreateMoment} />} />
66 <Route path="/forum" component={() => <PrivateRoute component={ForumPage} />} />
67 <Route path="/forum/post/:postId" component={({ postId }) => <PrivateRoute component={() => <PostDetailPage postId={postId} />} />} />
68 <Route path="/forum/create-post" component={() => <PrivateRoute component={CreatePostPage} />} />
69 <Route path="/seed-list" component={() => <PrivateRoute component={SeedList} />} />
70 <Route path="/publish-seed" component={() => <PrivateRoute component={PublishSeed} />} />
71 <Route path="/seed/:id" component={({ id }) => <PrivateRoute component={() => <SeedDetail id={id} />} />} />
72 <Route path="/interest-groups" component={() => <PrivateRoute component={InterestGroup} />} />
73 <Route path="/messages" component={() => <PrivateRoute component={MessagePage} />} />
74 <Route path="/level" component={() => <PrivateRoute component={LevelPage} />} />
75 <Route path="/information/:userId" component={({ userId }) => <PrivateRoute component={() => <UserInfo userId={userId} />} />} />
76
77 {/* 用户中心路由 */}
Krishyac6b24832025-06-05 20:13:20 +080078 <Route path="/user/profile" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080079 <PrivateRoute component={() => <UserLayout><UserProfile /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080080 )} />
81 <Route path="/user/newbie-tasks" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080082 <PrivateRoute component={() => <UserLayout><NewbieTasks /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080083 )} />
Krishya6bf199c2025-06-06 21:14:23 +080084 <Route path="/user/dynamics" component={() => (
85 <PrivateRoute component={() => <UserLayout><UserDynamics /></UserLayout>} />
86 )} />
Krishyac6b24832025-06-05 20:13:20 +080087 <Route path="/user/friends" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080088 <PrivateRoute component={() => <UserLayout><UserFriends /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080089 )} />
90 <Route path="/user/collections" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080091 <PrivateRoute component={() => <UserLayout><UserCollect /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080092 )} />
93 <Route path="/user/invite" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080094 <PrivateRoute component={() => <UserLayout><UserInvite /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080095 )} />
Krishyab5ef96d2025-06-05 13:57:05 +080096 </>
97 </GroupProvider>
Krishya75e43c02025-04-05 21:16:30 +080098 </UserProvider>
99 );
100}
101
Krishyac6b24832025-06-05 20:13:20 +0800102export default App;
Krishya6bf199c2025-06-06 21:14:23 +0800103
104
105// // export default App;
106
107// import { Route } from 'wouter';
108// import { Redirect } from 'wouter';
109// import AuthPage from './pages/AuthPage/AuthPage';
110// import HomePage from './pages/HomePage';
111// import FriendMoments from './pages/FriendMoments/FriendMoments';
112// import ForumPage from './pages/Forum/posts-main/ForumPage';
113// import SeedList from './pages/SeedList/SeedList';
114// import PostDetailPage from './pages/Forum/posts-detail/PostDetailPage';
115// import { UserProvider } from './context/UserContext';
116// import { GroupProvider } from './context/useGroupStore';
117// import PublishSeed from './pages/PublishSeed/PublishSeed';
118// import SeedDetail from './pages/SeedList/SeedDetail/SeedDetail';
119// import InterestGroup from './pages/InterestGroup/InterestGroup';
120// import UserProfile from './pages/UserCenter/UserProfile';
121// import CreatePostPage from './pages/Forum/posts-create/CreatePostPage';
122// import MessagePage from './pages/MessagePage/MessagePage';
123// import CreateMoment from './pages/FriendMoments/CreateMoment';
124// // import PromotionsPage from './pages/PromotionsPage/PromotionsPage';
125// import LevelPage from './pages/LevelPage/LevelPage';
126// import NewbieTasks from './pages/UserCenter/NewbieTasks';
127// import UserDynamics from './pages/UserCenter/UserDynamics';
128// import UserFriends from './pages/UserCenter/UserFriends';
129// import UserCollect from './pages/UserCenter/UserCollect';
130// import UserInvite from './pages/UserCenter/UserInvite';
131// import UserInfo from './pages/UserInfo/UserInfo';
132// import UserLayout from './pages/UserCenter/UserLayout';
133
134// function RedirectToAuth() {
135// if (typeof window !== 'undefined') {
136// window.location.replace('/auth');
137// }
138// return null;
139// }
140
141// function App() {
142// return (
143// <UserProvider>
144// <GroupProvider>
145// <>
146// <Route path="/" component={RedirectToAuth} />
147// <Route path="/auth" component={AuthPage} />
148// <Route path="/friend-moments" component={FriendMoments} />
149// <Route path="/friend-moments/create" component={CreateMoment} />
150// <Route path="/forum" component={ForumPage} />
151// <Route path="/forum/post/:postId" component={PostDetailPage} />
152// <Route path="/forum/create-post" component={CreatePostPage} />
153// <Route path="/seed-list" component={SeedList} />
154// <Route path="/publish-seed" component={PublishSeed} />
155// {/* <Route path="/publish-seed" component={SimpleUploader} /> */}
156// <Route path="/seed/:id" component={SeedDetail} />
157// <Route path="/interest-groups" component={InterestGroup} />
158// <Route path="/messages" component={MessagePage} />
159// {/* <Route path="/promotions" component={PromotionsPage} /> */}
160// <Route path="/level" component={LevelPage} />
161// <Route path="/information/:userId" component={UserInfo} />
162
163
164// {/* 用户中心嵌套路由模拟 */}
165// <Route path="/user/profile" component={() => (
166// <UserLayout><UserProfile /></UserLayout>
167// )} />
168// <Route path="/user/newbie-tasks" component={() => (
169// <UserLayout><NewbieTasks /></UserLayout>
170// )} />
171// <Route path="/user/dynamics" component={() => (
172// <UserLayout><UserDynamics /></UserLayout>
173// )} />
174// <Route path="/user/friends" component={() => (
175// <UserLayout><UserFriends /></UserLayout>
176// )} />
177// <Route path="/user/collections" component={() => (
178// <UserLayout><UserCollect /></UserLayout>
179// )} />
180// <Route path="/user/invite" component={() => (
181// <UserLayout><UserInvite /></UserLayout>
182// )} />
183// </>
184// </GroupProvider>
185// </UserProvider>
186// );
187// }
188
189// export default App;