51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
'use client'
|
|
|
|
import { useUser } from '@/hooks/useUser'
|
|
import { useRouter } from 'next/navigation'
|
|
import { useEffect } from 'react'
|
|
import { useTranslations } from 'next-intl'
|
|
|
|
export default function AdminLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode
|
|
}) {
|
|
const { userData, loading } = useUser()
|
|
const router = useRouter()
|
|
const t = useTranslations('admin')
|
|
|
|
useEffect(() => {
|
|
if (!loading && (!userData || !userData.isAdmin)) {
|
|
router.push('/')
|
|
}
|
|
}, [userData, loading, router])
|
|
|
|
if (loading) {
|
|
return (
|
|
<div className="min-h-screen bg-background">
|
|
<div className="flex items-center justify-center h-screen">
|
|
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
if (!userData || !userData.isAdmin) {
|
|
return null
|
|
}
|
|
|
|
return (
|
|
<div className="min-h-screen bg-background">
|
|
<div className="border-b border-border bg-card">
|
|
<div className="container mx-auto px-4 py-4">
|
|
<h1 className="text-2xl font-bold text-foreground">
|
|
{t('dashboard')}
|
|
</h1>
|
|
</div>
|
|
</div>
|
|
<div className="container mx-auto px-4 py-8">
|
|
{children}
|
|
</div>
|
|
</div>
|
|
)
|
|
} |