45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import Link from 'next/link'
|
|
import { getTranslations } from 'next-intl/server'
|
|
|
|
export default async function AdminLayout({
|
|
children,
|
|
params,
|
|
}: {
|
|
children: React.ReactNode
|
|
params: Promise<{ locale: string }>
|
|
}) {
|
|
const { locale } = await params
|
|
const t = await getTranslations('admin')
|
|
|
|
const navItems = [
|
|
{ href: `/${locale}/admin/chat`, label: t('navChat') },
|
|
{ href: `/${locale}/admin/resources`, label: t('navResources') },
|
|
{ href: `/${locale}/admin/policies/proposals`, label: t('navPolicies') },
|
|
{ href: `/${locale}/admin/runs`, label: t('navRuns') },
|
|
{ href: `/${locale}/admin/logs`, label: t('navLogs') },
|
|
]
|
|
|
|
return (
|
|
<main className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10 space-y-6">
|
|
<section className="neo-card p-6 bg-primary text-black">
|
|
<h1 className="font-display text-3xl font-bold">{t('title')}</h1>
|
|
<p className="text-sm mt-2 max-w-4xl">{t('subtitle')}</p>
|
|
</section>
|
|
|
|
<nav className="neo-card p-4 flex flex-wrap gap-3">
|
|
{navItems.map((item) => (
|
|
<Link
|
|
key={item.href}
|
|
href={item.href}
|
|
className="neo-btn bg-white dark:bg-surface-dark px-3 py-2 text-xs"
|
|
>
|
|
{item.label}
|
|
</Link>
|
|
))}
|
|
</nav>
|
|
|
|
{children}
|
|
</main>
|
|
)
|
|
}
|