"use client"; import { useState, useEffect, useCallback } from "react"; import { useRouter } from "next/navigation"; import { useAuth } from "@/context/AuthContext"; import { getLeaves, updateLeaveStatus, LeaveRequest } from "@/lib/leavesStore"; import { LeaveTable } from "@/components/LeaveTable"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { CalendarDays, Clock, CheckCircle2, XCircle, LayoutDashboard, } from "lucide-react"; import { ROUTES } from "@/lib/routes"; type FilterStatus = "All" | "Pending" | "Approved" | "Rejected"; export default function ManagerPage() { const { user, logout, isLoading } = useAuth(); const router = useRouter(); const [leaves, setLeaves] = useState([]); const [filter, setFilter] = useState("All"); const [loadingId, setLoadingId] = useState(null); const [dataLoaded, setDataLoaded] = useState(false); const loadData = useCallback(async () => { const data = await getLeaves(); setLeaves(data.sort((a, b) => b.appliedAt.localeCompare(a.appliedAt))); setDataLoaded(true); }, []); useEffect(() => { // if (!isLoading && !user) router.replace("/"); // else if (!isLoading && user?.role === "employee") router.replace("/employee"); if (!isLoading && !user) router.replace(ROUTES.home); else if (!isLoading && user?.role === "employee") router.replace(ROUTES.employee); else if (!isLoading && user) loadData(); }, [user, isLoading, router, loadData]); const handleApprove = async (id: number) => { setLoadingId(id); await updateLeaveStatus(id, "Approved"); await loadData(); setLoadingId(null); }; const handleReject = async (id: number) => { setLoadingId(id); await updateLeaveStatus(id, "Rejected"); await loadData(); setLoadingId(null); }; if (isLoading || !user || !dataLoaded) { return (

Loading…

); } const pending = leaves.filter((l) => l.status === "Pending").length; const approved = leaves.filter((l) => l.status === "Approved").length; const rejected = leaves.filter((l) => l.status === "Rejected").length; const filtered = filter === "All" ? leaves : leaves.filter((l) => l.status === filter); const stats = [ { label: "Total Requests", value: leaves.length, icon: LayoutDashboard, color: "var(--brand-600)", bg: "var(--brand-50)", border: "var(--brand-200)" }, { label: "Pending", value: pending, icon: Clock, color: "var(--color-pending)", bg: "var(--color-pending-bg)", border: "var(--color-pending-border)" }, { label: "Approved", value: approved, icon: CheckCircle2, color: "var(--color-success)", bg: "var(--color-success-bg)", border: "var(--color-success-border)" }, { label: "Rejected", value: rejected, icon: XCircle, color: "var(--color-danger)", bg: "var(--color-danger-bg)", border: "var(--color-danger-border)" }, ]; const filters: FilterStatus[] = ["All", "Pending", "Approved", "Rejected"]; const filterCounts: Record = { All: leaves.length, Pending: pending, Approved: approved, Rejected: rejected }; return (
LeaveFlow
{user.name}

Manager Dashboard

Review and manage all employee leave requests

{stats.map((s) => { const Icon = s.icon; return (
{s.label}

{s.value}

); })}
Leave Requests
{filters.map((f) => ( ))}
); }