'use client'; // File: components/review-task/ParallelProgress.tsx // Parallel review progress indicator แสดงทุก discipline tracks (T072) import React from 'react'; import { CheckCircle2, Clock, AlertTriangle } from 'lucide-react'; import { Progress } from '@/components/ui/progress'; import { Badge } from '@/components/ui/badge'; type TaskStatus = 'PENDING' | 'IN_PROGRESS' | 'COMPLETED' | 'DELEGATED' | 'EXPIRED' | 'CANCELLED'; interface DisciplineTrack { disciplineId: string; disciplineName: string; taskStatus: TaskStatus; responseCode?: string; dueDate?: string; assigneeName?: string; } interface ParallelProgressProps { tracks: DisciplineTrack[]; overallPct: number; isAllComplete: boolean; } const TRACK_ICON: Record = { PENDING: Clock, IN_PROGRESS: Clock, COMPLETED: CheckCircle2, DELEGATED: Clock, EXPIRED: AlertTriangle, CANCELLED: AlertTriangle, }; const TRACK_COLOR: Record = { PENDING: 'text-muted-foreground', IN_PROGRESS: 'text-blue-500', COMPLETED: 'text-green-500', DELEGATED: 'text-amber-500', EXPIRED: 'text-destructive', CANCELLED: 'text-muted-foreground', }; export function ParallelProgress({ tracks, overallPct, isAllComplete }: ParallelProgressProps) { return (
Parallel Review Tracks
{overallPct}% {isAllComplete && ( All Complete )}
{tracks.map((track) => { const Icon = TRACK_ICON[track.taskStatus]; const colorClass = TRACK_COLOR[track.taskStatus]; return (

{track.disciplineName}

{track.assigneeName && (

{track.assigneeName}

)}
{track.responseCode && ( {track.responseCode} )} {track.dueDate && ( {new Date(track.dueDate).toLocaleDateString('th-TH', { day: '2-digit', month: 'short' })} )}
); })}
); }