- app/(app)/admin/layout.tsx: sidebar-nav (Gebruikers/Claude Jobs/Producten) - app/(app)/admin/page.tsx: redirect naar /admin/jobs - app/(app)/admin/jobs/page.tsx: server component, query jobs+user+product, status-filter via searchParams - components/admin/jobs-table.tsx: StatusFilter (router.push op select), JobsTable met status-badges (MD3 tokens), CancelButton (disabled in eindstatus), DeleteDialog
16 lines
745 B
TypeScript
16 lines
745 B
TypeScript
import { requireAdmin } from '@/lib/auth-guard'
|
|
import Link from 'next/link'
|
|
|
|
export default async function AdminLayout({ children }: { children: React.ReactNode }) {
|
|
await requireAdmin()
|
|
return (
|
|
<div className="flex min-h-screen">
|
|
<nav className="w-48 border-r p-4 flex flex-col gap-2">
|
|
<Link href="/admin/users" className="text-sm font-medium text-foreground hover:text-primary">Gebruikers</Link>
|
|
<Link href="/admin/jobs" className="text-sm font-medium text-foreground hover:text-primary">Claude Jobs</Link>
|
|
<Link href="/admin/products" className="text-sm font-medium text-foreground hover:text-primary">Producten</Link>
|
|
</nav>
|
|
<main className="flex-1 p-6">{children}</main>
|
|
</div>
|
|
)
|
|
}
|