import {Building2, CalendarDays} from 'lucide-react'; import {createBrowserRouter, Navigate, Outlet} from 'react-router'; import {AppShell, type NavItem} from '@/components/layout/AppShell'; import {RequireAuth} from '@/components/layout/RequireAuth'; import {LocalContentPage} from '@admin/pages/LocalContentPage'; import {LoginPage} from '@/pages/LoginPage'; import {NotFoundPage} from '@/pages/NotFoundPage'; import {PlaceDetailPage} from '@admin/pages/PlaceDetailPage'; import {PlaceListPage} from '@admin/pages/PlaceListPage'; import {SeoAuditPage} from '@admin/pages/SeoAuditPage'; /** * ★ 내부 메뉴는 여기 있다. AppShell(사장님 앱 소유)에 두면 이 경로 이름들이 * 사장님 번들에 문자열로 남는다 — 앱을 가른 이유가 사라진다. */ const ADMIN_NAV: NavItem[] = [ {to: '/places', match: '/places', label: '사업장', icon: Building2}, {to: '/local-content', match: '/local-content', label: '지역 콘텐츠', icon: CalendarDays}, ]; /** * 내부 운영 화면. **전부 RequireAuth 뒤에 둔다** — 예외를 하나 두는 순간 * 그 예외가 기본값이 된다. 사장님 앱과 앱을 가른 이유가 이 규칙을 지키기 위해서다. */ export const router = createBrowserRouter([ // selfServe=false: 내부 운영 계정은 우리가 만들어 준다 — 가입 링크도 구글 로그인도 두지 않는다. {path: '/login', element: }, {path: '/', element: }, { element: ( ), children: [ {path: '/places', element: }, {path: '/places/:placeId', element: }, {path: '/places/:placeId/seo', element: }, {path: '/local-content', element: }, ], }, {path: '*', element: }, ]);