/** * ActivityInformationCard Component * Displays activity details for Claim Management requests */ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Calendar, MapPin, DollarSign, Receipt } from 'lucide-react'; import { ClaimActivityInfo } from '@/pages/RequestDetail/types/claimManagement.types'; import { format } from 'date-fns'; import { formatDateTime } from '@/utils/dateFormatter'; interface ActivityInformationCardProps { activityInfo: ClaimActivityInfo; className?: string; // Plug-and-play: Pass timestamps from module's business logic createdAt?: string | Date; updatedAt?: string | Date; } export function ActivityInformationCard({ activityInfo, className, createdAt, updatedAt }: ActivityInformationCardProps) { // Defensive check: Ensure activityInfo exists if (!activityInfo) { console.warn('[ActivityInformationCard] activityInfo is missing'); return (

Activity information not available

); } const formatCurrency = (amount: string | number) => { const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount; if (isNaN(numAmount)) return 'N/A'; return `₹${numAmount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`; }; const formatDate = (dateString?: string) => { if (!dateString) return 'N/A'; try { return format(new Date(dateString), 'MMM d, yyyy'); } catch { return dateString; } }; return ( Activity Information
{/* Activity Name */}

{activityInfo.activityName}

{/* Activity Type */}

{activityInfo.activityType}

{/* Location */}

{activityInfo.location}

{/* Requested Date */}

{formatDate(activityInfo.requestedDate)}

{/* Estimated Budget */}

{activityInfo.estimatedBudget ? formatCurrency(activityInfo.estimatedBudget) : 'TBD'}

{/* Closed Expenses - Show if value exists (including 0) */} {activityInfo.closedExpenses !== undefined && activityInfo.closedExpenses !== null && (

{formatCurrency(activityInfo.closedExpenses)}

)} {/* Period */} {activityInfo.period && (

{formatDate(activityInfo.period.startDate)} - {formatDate(activityInfo.period.endDate)}

)}
{/* Closed Expenses Breakdown */} {activityInfo.closedExpensesBreakdown && activityInfo.closedExpensesBreakdown.length > 0 && (
{activityInfo.closedExpensesBreakdown.map((item: { description: string; amount: number }, index: number) => (
{item.description} {formatCurrency(item.amount)}
))}
Total {formatCurrency( activityInfo.closedExpensesBreakdown.reduce((sum: number, item: { description: string; amount: number }) => sum + item.amount, 0) )}
)} {/* Description */} {activityInfo.description && (

{activityInfo.description}

)} {/* Timestamps - Similar to Request Details Card */} {(createdAt || updatedAt) && (
{createdAt && (

{formatDateTime(createdAt)}

)} {updatedAt && (

{formatDateTime(updatedAt)}

)}
)}
); }