83 lines
3.2 KiB
TypeScript
83 lines
3.2 KiB
TypeScript
import Link from 'next/link'
|
|
import { LayoutDashboard, Package, Settings, Users, LogOut, LayoutGrid, ShoppingCart } from 'lucide-react'
|
|
|
|
import { redirect } from 'next/navigation'
|
|
import { createClient } from '@/lib/supabase/server'
|
|
|
|
export default async function AdminLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode
|
|
}) {
|
|
const supabase = await createClient()
|
|
const { data: { user } } = await supabase.auth.getUser()
|
|
if (!user) redirect('/auth/login')
|
|
|
|
const { data: userData } = await supabase
|
|
.from('users')
|
|
.select('role')
|
|
.eq('id', user.id)
|
|
.single()
|
|
|
|
if (!userData || userData.role !== 'admin') {
|
|
redirect('/')
|
|
}
|
|
|
|
return (
|
|
<div className="flex min-h-screen bg-[#020617] text-white">
|
|
{/* Sidebar */}
|
|
<aside className="w-64 border-r border-white/5 bg-black/20 backdrop-blur-xl flex flex-col">
|
|
<div className="p-6">
|
|
<Link href="/" className="flex items-center gap-2">
|
|
<div className="w-8 h-8 bg-primary rounded-lg flex items-center justify-center">
|
|
<Package className="h-5 w-5 text-white" />
|
|
</div>
|
|
<span className="font-bold text-xl tracking-tighter">Admin Panel</span>
|
|
</Link>
|
|
</div>
|
|
|
|
<nav className="flex-1 px-4 space-y-2 py-4">
|
|
<Link href="/admin" className="flex items-center gap-3 px-3 py-2 rounded-lg text-slate-400 hover:text-white hover:bg-white/5 transition-all">
|
|
<LayoutDashboard className="w-5 h-5" />
|
|
Dashboard
|
|
</Link>
|
|
<Link href="/admin/products" className="flex items-center gap-3 px-3 py-2 rounded-lg text-slate-400 hover:text-white hover:bg-white/5 transition-all">
|
|
<Package className="w-5 h-5" />
|
|
Produkte
|
|
</Link>
|
|
<Link href="/admin/categories" className="flex items-center gap-3 px-3 py-2 rounded-lg text-slate-400 hover:text-white hover:bg-white/5 transition-all">
|
|
<LayoutGrid className="w-5 h-5" />
|
|
Kategorien
|
|
</Link>
|
|
<Link href="/admin/orders" className="flex items-center gap-3 px-3 py-2 rounded-lg text-slate-400 hover:text-white hover:bg-white/5 transition-all">
|
|
<ShoppingCart className="w-5 h-5" />
|
|
Bestellungen
|
|
</Link>
|
|
<Link href="/admin/users" className="flex items-center gap-3 px-3 py-2 rounded-lg text-slate-400 hover:text-white hover:bg-white/5 transition-all">
|
|
<Users className="w-5 h-5" />
|
|
Benutzer
|
|
</Link>
|
|
<Link href="/admin/settings" className="flex items-center gap-3 px-3 py-2 rounded-lg text-slate-400 hover:text-white hover:bg-white/5 transition-all">
|
|
<Settings className="w-5 h-5" />
|
|
Einstellungen
|
|
</Link>
|
|
</nav>
|
|
|
|
<div className="p-4 border-t border-white/5">
|
|
<button className="flex w-full items-center gap-3 px-3 py-2 rounded-lg text-slate-400 hover:text-white hover:bg-white/5 transition-all">
|
|
<LogOut className="w-5 h-5" />
|
|
Abmelden
|
|
</button>
|
|
</div>
|
|
</aside>
|
|
|
|
{/* Main Content */}
|
|
<main className="flex-1 overflow-auto">
|
|
<div className="container mx-auto max-w-7xl">
|
|
{children}
|
|
</div>
|
|
</main>
|
|
</div>
|
|
)
|
|
}
|