2026-01-09 18:11:21 +09:00
|
|
|
import { useEffect } from 'react';
|
2025-12-31 21:51:23 +09:00
|
|
|
import { BrowserRouter, Routes, Route } from 'react-router-dom';
|
|
|
|
|
import { BrowserView, MobileView } from 'react-device-detect';
|
|
|
|
|
|
2026-01-07 10:10:12 +09:00
|
|
|
// 공통 컴포넌트
|
|
|
|
|
import ScrollToTop from './components/ScrollToTop';
|
|
|
|
|
|
2025-12-31 21:51:23 +09:00
|
|
|
// PC 페이지
|
2026-01-09 22:00:14 +09:00
|
|
|
import PCHome from './pages/pc/public/Home';
|
|
|
|
|
import PCMembers from './pages/pc/public/Members';
|
|
|
|
|
import PCAlbum from './pages/pc/public/Album';
|
|
|
|
|
import PCAlbumDetail from './pages/pc/public/AlbumDetail';
|
|
|
|
|
import PCAlbumGallery from './pages/pc/public/AlbumGallery';
|
|
|
|
|
import PCSchedule from './pages/pc/public/Schedule';
|
2025-12-31 21:51:23 +09:00
|
|
|
|
2026-01-07 10:10:12 +09:00
|
|
|
// 모바일 페이지
|
2026-01-09 22:00:14 +09:00
|
|
|
import MobileHome from './pages/mobile/public/Home';
|
|
|
|
|
import MobileMembers from './pages/mobile/public/Members';
|
|
|
|
|
import MobileAlbum from './pages/mobile/public/Album';
|
|
|
|
|
import MobileAlbumDetail from './pages/mobile/public/AlbumDetail';
|
|
|
|
|
import MobileAlbumGallery from './pages/mobile/public/AlbumGallery';
|
|
|
|
|
import MobileSchedule from './pages/mobile/public/Schedule';
|
2026-01-07 10:10:12 +09:00
|
|
|
|
2026-01-01 18:01:42 +09:00
|
|
|
// 관리자 페이지
|
|
|
|
|
import AdminLogin from './pages/pc/admin/AdminLogin';
|
|
|
|
|
import AdminDashboard from './pages/pc/admin/AdminDashboard';
|
2026-01-04 13:10:34 +09:00
|
|
|
import AdminMembers from './pages/pc/admin/AdminMembers';
|
2026-01-04 14:02:45 +09:00
|
|
|
import AdminMemberEdit from './pages/pc/admin/AdminMemberEdit';
|
2026-01-01 18:05:39 +09:00
|
|
|
import AdminAlbums from './pages/pc/admin/AdminAlbums';
|
2026-01-01 18:28:01 +09:00
|
|
|
import AdminAlbumForm from './pages/pc/admin/AdminAlbumForm';
|
2026-01-01 22:31:38 +09:00
|
|
|
import AdminAlbumPhotos from './pages/pc/admin/AdminAlbumPhotos';
|
2026-01-04 20:50:21 +09:00
|
|
|
import AdminSchedule from './pages/pc/admin/AdminSchedule';
|
|
|
|
|
import AdminScheduleForm from './pages/pc/admin/AdminScheduleForm';
|
2026-01-05 11:20:44 +09:00
|
|
|
import AdminScheduleCategory from './pages/pc/admin/AdminScheduleCategory';
|
2026-01-05 22:16:02 +09:00
|
|
|
import AdminScheduleBots from './pages/pc/admin/AdminScheduleBots';
|
2026-01-01 18:01:42 +09:00
|
|
|
|
2026-01-07 10:10:12 +09:00
|
|
|
// 레이아웃
|
2025-12-31 21:51:23 +09:00
|
|
|
import PCLayout from './components/pc/Layout';
|
2026-01-07 10:10:12 +09:00
|
|
|
import MobileLayout from './components/mobile/Layout';
|
2025-12-31 21:51:23 +09:00
|
|
|
|
2026-01-09 18:11:21 +09:00
|
|
|
// PC 환경에서 body에 클래스 추가하는 래퍼
|
|
|
|
|
function PCWrapper({ children }) {
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
document.body.classList.add('is-pc');
|
|
|
|
|
return () => document.body.classList.remove('is-pc');
|
|
|
|
|
}, []);
|
|
|
|
|
return children;
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-31 21:51:23 +09:00
|
|
|
function App() {
|
|
|
|
|
return (
|
2026-01-01 14:15:39 +09:00
|
|
|
<BrowserRouter future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
|
2026-01-07 10:10:12 +09:00
|
|
|
<ScrollToTop />
|
2025-12-31 21:51:23 +09:00
|
|
|
<BrowserView>
|
2026-01-09 18:11:21 +09:00
|
|
|
<PCWrapper>
|
2026-01-01 18:01:42 +09:00
|
|
|
<Routes>
|
|
|
|
|
{/* 관리자 페이지 (레이아웃 없음) */}
|
|
|
|
|
<Route path="/admin" element={<AdminLogin />} />
|
|
|
|
|
<Route path="/admin/dashboard" element={<AdminDashboard />} />
|
2026-01-04 13:10:34 +09:00
|
|
|
<Route path="/admin/members" element={<AdminMembers />} />
|
2026-01-04 14:02:45 +09:00
|
|
|
<Route path="/admin/members/:name/edit" element={<AdminMemberEdit />} />
|
2026-01-01 18:05:39 +09:00
|
|
|
<Route path="/admin/albums" element={<AdminAlbums />} />
|
2026-01-01 18:28:01 +09:00
|
|
|
<Route path="/admin/albums/new" element={<AdminAlbumForm />} />
|
|
|
|
|
<Route path="/admin/albums/:id/edit" element={<AdminAlbumForm />} />
|
2026-01-01 22:31:38 +09:00
|
|
|
<Route path="/admin/albums/:albumId/photos" element={<AdminAlbumPhotos />} />
|
2026-01-04 20:50:21 +09:00
|
|
|
<Route path="/admin/schedule" element={<AdminSchedule />} />
|
|
|
|
|
<Route path="/admin/schedule/new" element={<AdminScheduleForm />} />
|
|
|
|
|
<Route path="/admin/schedule/:id/edit" element={<AdminScheduleForm />} />
|
2026-01-05 11:20:44 +09:00
|
|
|
<Route path="/admin/schedule/categories" element={<AdminScheduleCategory />} />
|
2026-01-05 22:16:02 +09:00
|
|
|
<Route path="/admin/schedule/bots" element={<AdminScheduleBots />} />
|
2026-01-01 18:01:42 +09:00
|
|
|
|
|
|
|
|
{/* 일반 페이지 (레이아웃 포함) */}
|
|
|
|
|
<Route path="/*" element={
|
|
|
|
|
<PCLayout>
|
|
|
|
|
<Routes>
|
|
|
|
|
<Route path="/" element={<PCHome />} />
|
|
|
|
|
<Route path="/members" element={<PCMembers />} />
|
2026-01-03 14:43:43 +09:00
|
|
|
<Route path="/album" element={<PCAlbum />} />
|
2026-01-01 18:01:42 +09:00
|
|
|
<Route path="/album/:name" element={<PCAlbumDetail />} />
|
|
|
|
|
<Route path="/album/:name/gallery" element={<PCAlbumGallery />} />
|
|
|
|
|
<Route path="/schedule" element={<PCSchedule />} />
|
|
|
|
|
</Routes>
|
|
|
|
|
</PCLayout>
|
|
|
|
|
} />
|
|
|
|
|
</Routes>
|
2026-01-09 18:11:21 +09:00
|
|
|
</PCWrapper>
|
2025-12-31 21:51:23 +09:00
|
|
|
</BrowserView>
|
|
|
|
|
<MobileView>
|
2026-01-07 10:10:12 +09:00
|
|
|
<Routes>
|
|
|
|
|
<Route path="/" element={<MobileLayout><MobileHome /></MobileLayout>} />
|
|
|
|
|
<Route path="/members" element={<MobileLayout pageTitle="멤버"><MobileMembers /></MobileLayout>} />
|
|
|
|
|
<Route path="/album" element={<MobileLayout pageTitle="앨범"><MobileAlbum /></MobileLayout>} />
|
|
|
|
|
<Route path="/album/:name" element={<MobileLayout pageTitle="앨범"><MobileAlbumDetail /></MobileLayout>} />
|
|
|
|
|
<Route path="/album/:name/gallery" element={<MobileLayout pageTitle="앨범"><MobileAlbumGallery /></MobileLayout>} />
|
2026-01-09 09:26:51 +09:00
|
|
|
<Route path="/schedule" element={<MobileLayout useCustomLayout><MobileSchedule /></MobileLayout>} />
|
2026-01-07 10:10:12 +09:00
|
|
|
</Routes>
|
2025-12-31 21:51:23 +09:00
|
|
|
</MobileView>
|
|
|
|
|
</BrowserRouter>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default App;
|
2026-01-07 10:10:12 +09:00
|
|
|
|