import { useSLATracking } from '@/hooks/useSLATracking'; import { Progress } from '@/components/ui/progress'; import { Badge } from '@/components/ui/badge'; import { Clock, Pause, Play, AlertTriangle } from 'lucide-react'; import { formatWorkingHours, getTimeUntilNextWorking } from '@/utils/slaTracker'; interface SLATrackerProps { startDate: string | Date; deadline: string | Date; className?: string; showDetails?: boolean; } export function SLATracker({ startDate, deadline, className = '', showDetails = true }: SLATrackerProps) { const slaStatus = useSLATracking(startDate, deadline); if (!slaStatus) { return null; } const getProgressColor = () => { if (slaStatus.progress >= 100) return 'bg-red-500'; if (slaStatus.progress >= 75) return 'bg-orange-500'; if (slaStatus.progress >= 50) return 'bg-yellow-500'; return 'bg-green-500'; }; const getStatusBadgeColor = () => { if (slaStatus.progress >= 100) return 'bg-red-100 text-red-800 border-red-200'; if (slaStatus.progress >= 75) return 'bg-orange-100 text-orange-800 border-orange-200'; if (slaStatus.progress >= 50) return 'bg-yellow-100 text-yellow-800 border-yellow-200'; return 'bg-green-100 text-green-800 border-green-200'; }; return (
{/* Status Header */}
SLA Progress {/* Pause/Play indicator */} {slaStatus.isPaused ? ( Paused ) : ( Active )}
{slaStatus.statusText}
{/* Progress Bar */}
{slaStatus.isPaused && (
)}
{/* Details */} {showDetails && (
Elapsed: {formatWorkingHours(slaStatus.elapsedHours)} Remaining: {formatWorkingHours(slaStatus.remainingHours)}
{slaStatus.progress.toFixed(1)}%
)} {/* Paused Message */} {slaStatus.isPaused && (
{getTimeUntilNextWorking()}
)}
); }