blob: af1f022110ada1e8c311d0ffb3c60806560d6449 [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';
Krishyaaffe8102025-06-08 00:44:46 +080029import GroupDetail from './pages/InterestGroup/GroupDetail';
Krishyac6b24832025-06-05 20:13:20 +080030
Krishya8f2fec82025-06-04 21:54:46 +080031function RedirectToAuth() {
32 if (typeof window !== 'undefined') {
33 window.location.replace('/auth');
34 }
35 return null;
36}
37
Krishya6bf199c2025-06-06 21:14:23 +080038// 私有路由保护组件
39function PrivateRoute({ component: Component }) {
40 const [location, setLocation] = useLocation();
41 const { user, loading } = useUser();
42
43 if (loading) {
44 return <div>加载中...</div>;
45 }
46
47 if (!user) {
48 setLocation('/auth');
49 return null;
50 }
51
52 return <Component />;
53}
54
Krishya75e43c02025-04-05 21:16:30 +080055function App() {
56 return (
57 <UserProvider>
Krishyac6b24832025-06-05 20:13:20 +080058 <GroupProvider>
Krishyab5ef96d2025-06-05 13:57:05 +080059 <>
Krishya6bf199c2025-06-06 21:14:23 +080060 {/* 公开路由 */}
Krishyab5ef96d2025-06-05 13:57:05 +080061 <Route path="/auth" component={AuthPage} />
Krishya767f9b92025-06-05 23:59:37 +080062
Krishya6bf199c2025-06-06 21:14:23 +080063 {/* 根路径跳转到登录页 */}
64 <Route path="/" component={() => <RedirectToAuth />} />
Krishyac6b24832025-06-05 20:13:20 +080065
Krishya6bf199c2025-06-06 21:14:23 +080066 {/* 私有路由用 PrivateRoute 包裹 */}
67 <Route path="/friend-moments" component={() => <PrivateRoute component={FriendMoments} />} />
68 <Route path="/friend-moments/create" component={() => <PrivateRoute component={CreateMoment} />} />
69 <Route path="/forum" component={() => <PrivateRoute component={ForumPage} />} />
70 <Route path="/forum/post/:postId" component={({ postId }) => <PrivateRoute component={() => <PostDetailPage postId={postId} />} />} />
71 <Route path="/forum/create-post" component={() => <PrivateRoute component={CreatePostPage} />} />
72 <Route path="/seed-list" component={() => <PrivateRoute component={SeedList} />} />
73 <Route path="/publish-seed" component={() => <PrivateRoute component={PublishSeed} />} />
74 <Route path="/seed/:id" component={({ id }) => <PrivateRoute component={() => <SeedDetail id={id} />} />} />
75 <Route path="/interest-groups" component={() => <PrivateRoute component={InterestGroup} />} />
76 <Route path="/messages" component={() => <PrivateRoute component={MessagePage} />} />
Krishya73cd8822025-06-07 15:48:41 +080077 {/* <Route path="/level" component={() => <PrivateRoute component={LevelPage} />} /> */}
Krishya6bf199c2025-06-06 21:14:23 +080078 <Route path="/information/:userId" component={({ userId }) => <PrivateRoute component={() => <UserInfo userId={userId} />} />} />
223010093d8132e2025-06-07 11:34:38 +080079 <Route path="/new-user-guide" component={() => <PrivateRoute component={NewUserGuide} />} />
Krishyaaffe8102025-06-08 00:44:46 +080080 <Route path="/group/:groupId" component={({ groupId }) => <PrivateRoute component={() => <GroupDetail groupId={groupId} />} />} />
Krishya6bf199c2025-06-06 21:14:23 +080081
82 {/* 用户中心路由 */}
Krishyac6b24832025-06-05 20:13:20 +080083 <Route path="/user/profile" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080084 <PrivateRoute component={() => <UserLayout><UserProfile /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080085 )} />
223010094952a0f2025-06-07 18:58:16 +080086 <Route path="/user/newbie-tasks" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080087 <PrivateRoute component={() => <UserLayout><NewbieTasks /></UserLayout>} />
223010094952a0f2025-06-07 18:58:16 +080088 )} />
Krishya6bf199c2025-06-06 21:14:23 +080089 <Route path="/user/dynamics" component={() => (
90 <PrivateRoute component={() => <UserLayout><UserDynamics /></UserLayout>} />
91 )} />
Krishyac6b24832025-06-05 20:13:20 +080092 <Route path="/user/friends" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080093 <PrivateRoute component={() => <UserLayout><UserFriends /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080094 )} />
95 <Route path="/user/collections" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080096 <PrivateRoute component={() => <UserLayout><UserCollect /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +080097 )} />
98 <Route path="/user/invite" component={() => (
Krishya6bf199c2025-06-06 21:14:23 +080099 <PrivateRoute component={() => <UserLayout><UserInvite /></UserLayout>} />
Krishyac6b24832025-06-05 20:13:20 +0800100 )} />
223010094952a0f2025-06-07 18:58:16 +0800101 <Route path="/user/recharge" component={() => (
102 <PrivateRoute component={() => <UserLayout><UserRecharge /></UserLayout>} />
2230100901d3ff92025-06-07 16:16:26 +0800103 )} />
223010094952a0f2025-06-07 18:58:16 +0800104 </>
Krishyab5ef96d2025-06-05 13:57:05 +0800105 </GroupProvider>
Krishya75e43c02025-04-05 21:16:30 +0800106 </UserProvider>
107 );
108}
109
Krishya73cd8822025-06-07 15:48:41 +0800110export default App;