CityTrack / Frontend /app /worker /layout.tsx
0xarchit's picture
frontend v2 refactor and enhancements
c2bc4c7
"use client";
import { useState, useEffect } from "react";
import { useRouter } from "next/navigation";
import { useAuth } from "@/components/AuthProvider";
import DashboardSidebar from "@/components/DashboardSidebar";
import DashboardHeader from "@/components/DashboardHeader";
export default function WorkerLayout({
children,
}: {
children: React.ReactNode;
}) {
const { role, loading, signOut } = useAuth();
const [mobileOpen, setMobileOpen] = useState(false);
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
const router = useRouter();
useEffect(() => {
if (!loading && role !== "worker") {
router.push("/signin");
}
}, [loading, role, router]);
if (loading) return null;
return (
<div className="flex min-h-screen bg-urban-bg font-sans text-slate-900 overflow-hidden relative">
<DashboardSidebar
role="worker"
mobileOpen={mobileOpen}
setMobileOpen={setMobileOpen}
desktopOpen={isSidebarOpen}
onLogout={signOut}
/>
<div className="absolute top-0 left-0 w-full h-full pointer-events-none z-0 overflow-hidden">
<div className="absolute top-[-10%] right-[-5%] w-[40%] h-[40%] bg-urban-primary/5 rounded-full blur-[100px]"></div>
<div className="absolute bottom-[-10%] left-[-5%] w-[30%] h-[30%] bg-amber-500/5 rounded-full blur-[80px]"></div>
</div>
<div className="flex-1 flex flex-col min-h-screen transition-all duration-300 relative z-10 h-screen overflow-hidden">
<DashboardHeader
setMobileOpen={setMobileOpen}
toggleSidebar={() => setIsSidebarOpen(!isSidebarOpen)}
title="Field Worker Portal"
/>
<main className="flex-1 overflow-x-hidden overflow-y-auto p-4 sm:p-6 lg:p-8">
{children}
</main>
</div>
</div>
);
}