51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
|
|
'use client';
|
||
|
|
|
||
|
|
import { useEffect } from 'react';
|
||
|
|
import { useRouter, usePathname } from 'next/navigation';
|
||
|
|
import { AdminSidebar } from '@/components/admin/AdminSidebar';
|
||
|
|
|
||
|
|
export default function AdminLayoutClient({
|
||
|
|
children,
|
||
|
|
}: {
|
||
|
|
children: React.ReactNode;
|
||
|
|
}) {
|
||
|
|
const router = useRouter();
|
||
|
|
const pathname = usePathname();
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
// Skip auth check for login page
|
||
|
|
if (pathname === '/admin/login') {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Check authentication
|
||
|
|
const checkAuth = async () => {
|
||
|
|
try {
|
||
|
|
const response = await fetch('/api/admin/auth/verify');
|
||
|
|
if (!response.ok) {
|
||
|
|
router.push('/admin/login');
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
router.push('/admin/login');
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
checkAuth();
|
||
|
|
}, [pathname, router]);
|
||
|
|
|
||
|
|
// If on login page, render full-screen without sidebar
|
||
|
|
if (pathname === '/admin/login') {
|
||
|
|
return <>{children}</>;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Dashboard/orders pages with sidebar
|
||
|
|
return (
|
||
|
|
<div className="min-h-screen bg-sail-white">
|
||
|
|
<AdminSidebar />
|
||
|
|
<main className="ml-64 p-8">
|
||
|
|
{children}
|
||
|
|
</main>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|