"use client"; import { useState, useEffect, useCallback } from "react"; import { useRouter } from "next/navigation"; import { useAuth } from "@/context/AuthContext"; import { getLeavesForUser, getUserBalance, LeaveRequest, } from "@/lib/leavesStore"; import { LeaveSheet } from "@/components/LeaveSheet"; import { LeaveTable } from "@/components/LeaveTable"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { CalendarDays, PlusCircle, Clock, CheckCircle2, XCircle, Wallet, } from "lucide-react"; import { ROUTES } from "@/lib/routes"; export default function EmployeePage() { const { user, logout, isLoading } = useAuth(); const router = useRouter(); const [leaves, setLeaves] = useState([]); const [balance, setBalance] = useState(0); const [sheetOpen, setSheetOpen] = useState(false); const [dataLoaded, setDataLoaded] = useState(false); const loadData = useCallback(async () => { if (!user) return; const [data, bal] = await Promise.all([ getLeavesForUser(user.id), Promise.resolve(getUserBalance(user.id)), ]); setLeaves(data.sort((a, b) => b.appliedAt.localeCompare(a.appliedAt))); setBalance(bal); setDataLoaded(true); }, [user]); useEffect(() => { // if (!isLoading && !user) router.replace("/"); // else if (!isLoading && user?.role === "manager") router.replace("/manager"); if (!isLoading && !user) router.replace(ROUTES.home); else if (!isLoading && user?.role === "manager") router.replace(ROUTES.manager); else if (!isLoading && user) loadData(); }, [user, isLoading, router, loadData]); 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 stats = [ { label: "Leave Balance", value: balance, unit: "days", icon: Wallet, 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)" }, ]; return (
LeaveFlow
{user.name}

Hello, {user.name.split(" ")[0]}

Apply for leave from here

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

{s.value}{s.unit && {s.unit}}

); })}
Leave History
); }