import React, { useEffect } from 'react'; import { Routes, Route, useLocation } from 'react-router-dom'; import { AnimatePresence, motion } from 'framer-motion'; import DeviceLayout, { useIsMobile } from './components/DeviceLayout'; import Sidebar from './components/Sidebar'; import ServerDetail from './pages/ServerDetail'; import WorldsPage from './pages/WorldsPage'; import PlayersPage from './pages/PlayersPage'; import PlayerStatsPage from './pages/PlayerStatsPage'; import WorldMapPage from './pages/WorldMapPage'; import LoginPage from './pages/LoginPage'; import RegisterPage from './pages/RegisterPage'; import VerifyEmailPage from './pages/VerifyEmailPage'; import Admin from './pages/Admin'; import ProfilePage from './pages/ProfilePage'; // 페이지 전환 애니메이션 래퍼 컴포넌트 const PageWrapper = ({ children }) => ( {children} ); function App() { const isMobile = useIsMobile(); const location = useLocation(); // 인증 페이지 여부 확인 (사이드바 없이 렌더링) const isAuthPage = ['/login', '/register'].includes(location.pathname) || location.pathname.startsWith('/verify/'); // 별도 레이아웃 페이지 (관리자, 프로필) const isStandalonePage = ['/admin', '/profile'].includes(location.pathname); // 라우트 전환 시 스크롤 맨 위로 useEffect(() => { window.scrollTo(0, 0); }, [location.pathname]); // 인증 페이지는 사이드바 없이 렌더링 if (isAuthPage) { return (
} /> } /> } />
); } // 관리자/프로필 페이지는 별도 레이아웃 if (isStandalonePage) { return (
} /> } />
); } return (
{/* 사이드바 + 메인 콘텐츠 레이아웃 */}
{/* 메인 콘텐츠 영역 */}
} /> } /> } /> } /> } />
); } export default App;