import React from "react"; import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Calendar, Clock, FileText, User, CheckCircle, XCircle, AlertCircle } from "lucide-react"; import { Leave, LeaveStatus } from "@/types"; import { format, differenceInCalendarDays } from "date-fns"; // 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 LeaveCardProps { leave: Leave; employeeName?: string; leaveType?: string; isAdmin?: boolean; onViewDetails?: (leave: Leave) => void; onApprove?: (leave: Leave) => void; onReject?: (leave: Leave) => void; onCancel?: (leave: Leave) => void; } const LeaveCard: React.FC = ({ leave, employeeName, leaveType, isAdmin = false, onViewDetails, onApprove, onReject, onCancel, }) => { 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 Request" : (leaveType || leave.type) === "Work From Home" ? "Work From Home Request" : `${leaveType || leave.type} Leave`} {getStatusIcon(leave.status)} {leave.status}
{employeeName && isAdmin && (
{employeeName}
)}
{format(startDate, "PP")} - {format(endDate, "PP")} ({durationDays} {durationDays === 1 ? "day" : "days"})
{leave.reason}
{leave.actionDate && (
{leave.status === "Approved" ? "Approved" : leave.status === "Rejected" ? "Rejected" : "Updated"} on {format(new Date(leave.actionDate), "PP")}
)}
{onViewDetails && ( )} {isAdmin && leave.status === "Pending" && onApprove && ( )} {isAdmin && leave.status === "Pending" && onReject && ( )} {isAdmin && leave.status === "Approved" && onCancel && ( )} {!isAdmin && leave.status === "Pending" && onCancel && ( )}
); }; export default LeaveCard;