import React from "react"; import { format, differenceInCalendarDays } from "date-fns"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Leave, LeaveStatus } from "@/types"; import { Employee } from "@/services/employeeApi"; import CustomDialog from "@/components/CustomDialog"; import { Calendar, Clock, FileText, User, CheckCircle, XCircle, AlertCircle, File, Download, } from "lucide-react"; // Helper function to get badge variant based on leave status const getStatusBadgeVariant = (status: LeaveStatus) => { switch (status) { case "Approved": return "success"; case "Rejected": return "destructive"; case "Cancelled": return "outline"; case "Pending": default: return "warning"; } }; // Helper function to get status icon based on leave status const getStatusIcon = (status: LeaveStatus) => { switch (status) { case "Approved": return ; case "Rejected": return ; case "Cancelled": return ; case "Pending": default: return ; } }; interface CustomLeaveDetailDialogProps { leave: Leave | null; employee?: Employee | null; approver?: Employee | null; isOpen: boolean; onClose: () => void; onDownloadDocument?: (leave: Leave) => void; } const CustomLeaveDetailDialog: React.FC = ({ leave, employee, approver, isOpen, onClose, onDownloadDocument, }) => { if (!leave) return null; const startDate = new Date(leave.startDate); const endDate = new Date(leave.endDate); const durationDays = leave.workingDays || (differenceInCalendarDays(endDate, startDate) + 1); return (

{leave.compOff ? "Comp Off" : leave.type || 'Leave'} Details

{getStatusIcon(leave.status)} {leave.status}
{employee && (
Employee:
{employee.firstName} {employee.lastName} (ID: {employee.id})
)}
Duration:
{format(startDate, "PPP")} to {format(endDate, "PPP")} ({durationDays} {durationDays === 1 ? "day" : "days"})
Applied On:
{format(new Date(leave.appliedOn), "PPP")}
Reason:
{leave.reason}
{(leave.status === "Approved" || leave.status === "Rejected") && ( <> {approver && (
Actioned By:
{approver.firstName} {approver.lastName}
)} {leave.actionDate && (
Action Date:
{format(new Date(leave.actionDate), "PPP")}
)} {leave.comments && (
Comments:
{leave.comments}
)} )} {leave.documents && (
Documents:
)}
); }; export default CustomLeaveDetailDialog;