'use client' import { cn } from '@/lib/utils' import { Badge } from '@/components/ui/badge' import { Card } from '@/components/ui/card' import { ArrowRight } from 'lucide-react' type StageNode = { id?: string name: string stageType: string sortOrder: number _count?: { projectStageStates: number } } type TrackLane = { id?: string name: string kind: string sortOrder: number stages: StageNode[] } type PipelineVisualizationProps = { tracks: TrackLane[] className?: string } const stageColors: Record = { INTAKE: 'bg-blue-50 border-blue-300 text-blue-700', FILTER: 'bg-amber-50 border-amber-300 text-amber-700', EVALUATION: 'bg-purple-50 border-purple-300 text-purple-700', SELECTION: 'bg-rose-50 border-rose-300 text-rose-700', LIVE_FINAL: 'bg-emerald-50 border-emerald-300 text-emerald-700', RESULTS: 'bg-cyan-50 border-cyan-300 text-cyan-700', } const trackKindBadge: Record = { MAIN: 'bg-blue-100 text-blue-700', AWARD: 'bg-amber-100 text-amber-700', SHOWCASE: 'bg-purple-100 text-purple-700', } export function PipelineVisualization({ tracks, className, }: PipelineVisualizationProps) { const sortedTracks = [...tracks].sort((a, b) => a.sortOrder - b.sortOrder) return (
{sortedTracks.map((track) => { const sortedStages = [...track.stages].sort( (a, b) => a.sortOrder - b.sortOrder ) return ( {/* Track header */}
{track.name} {track.kind}
{/* Stage flow */}
{sortedStages.map((stage, index) => (
{stage.name} {stage.stageType.replace('_', ' ')} {stage._count?.projectStageStates !== undefined && stage._count.projectStageStates > 0 && ( {stage._count.projectStageStates} )}
{index < sortedStages.length - 1 && ( )}
))} {sortedStages.length === 0 && ( No stages )}
) })} {tracks.length === 0 && (

No tracks to visualize

)}
) }