ByteBrief / src /app /dashboard /layout.tsx
Gigishot's picture
Upload 68 files
78aa7cb verified
Raw
History Blame Contribute Delete
1.32 kB
'use client';
import { AppSidebar } from '@/components/dashboard/app-sidebar';
import { SidebarProvider, SidebarInset } from '@/components/ui/sidebar';
import { useUser } from '@/firebase';
import { useRouter } from 'next/navigation';
import { useEffect } from 'react';
import { Skeleton } from '@/components/ui/skeleton';
function AuthGuard({ children }: { children: React.ReactNode }) {
const { user, isUserLoading } = useUser();
const router = useRouter();
useEffect(() => {
if (!isUserLoading && !user) {
router.replace('/login');
}
}, [isUserLoading, user, router]);
if (isUserLoading || !user) {
return (
<div className="flex h-screen items-center justify-center">
<div className="flex flex-col items-center gap-4">
<Skeleton className="h-12 w-12 rounded-full" />
<div className="space-y-2">
<Skeleton className="h-4 w-[250px]" />
<Skeleton className="h-4 w-[200px]" />
</div>
</div>
</div>
);
}
return <>{children}</>;
}
export default function DashboardLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<AuthGuard>
<SidebarProvider>
<AppSidebar />
<SidebarInset>{children}</SidebarInset>
</SidebarProvider>
</AuthGuard>
);
}