blob: 11219d3cf5bf6aac928d98f578cbb64bb7aa059e [file] [log] [blame]
import React from 'react';
import { Toaster } from 'react-hot-toast';
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';
import PlaylistDetailPage from './pages/SeedList/Recommend/PlaylistDetailPage';
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>
<Toaster />
<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="/playlist/:id" component={({ id }) => (
<PrivateRoute component={() => <PlaylistDetailPage id={id} />} />
)} />
{/* 用户中心路由 */}
<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;