Files
imphnen-frontend-service/apps/qrcampaign/src/routes/_authenticated/admin.tsx
T
maulanasdqnandClaude Opus 4.6 4240e8eb51 feat: migrate all 5 Vite apps from react-router to TanStack Router
Migrated backoffice, hackathon, dimentorin, gacha, qrcampaign, and
infra from custom react-router file-based routing to TanStack Router
file-based routing following the tanstack-frontend-best-practice
convention.

Key changes per app:
- New routes/ directory with __root.tsx, _public.tsx, _authenticated.tsx
- Auth guards via beforeLoad (replaces old middleware.ts)
- createFileRoute pattern for all page components
- TanStackRouterVite plugin in vite.config for auto route generation
- _components/_hooks folders colocated with routes (ignored by router)
- routeTree.gen.ts auto-generated on dev/build

Convention:
- _public/* routes redirect to dashboard if authenticated
- _authenticated/* routes redirect to /auth/login if not authenticated
- $param for dynamic segments (was [param] in old convention)
- _layout suffix for pathless layout routes

Removed:
- Old src/app/ directories from all apps
- Old src/middleware.ts files
- Custom convertPagesToRoute utility (no longer needed)
- react-router dependency usage (kept in package.json for shared libs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 17:04:14 +07:00

17 lines
553 B
TypeScript

import { createFileRoute, Outlet, redirect } from '@tanstack/react-router'
import { useAuthStore } from '../../app/features/auth/store/auth.store'
export const Route = createFileRoute('/_authenticated/admin')({
beforeLoad: () => {
const { user, isAuthenticated } = useAuthStore.getState()
if (!isAuthenticated) {
throw redirect({ to: '/auth/login' })
}
const userRole = user?.role?.name
if (userRole !== 'Admin' && userRole !== 'Super Admin') {
throw redirect({ to: '/' })
}
},
component: () => <Outlet />,
})