import { useState, useMemo } from "react"; import type { DirectiveSummary, DirectiveStatus } from "../../lib/api"; import { useSupervisorQuestions } from "../../contexts/SupervisorQuestionsContext"; import { DirectiveContextMenu } from "./DirectiveContextMenu"; const STATUS_BADGE: Record = { draft: { color: "text-[#7788aa] border-[#2a3a5a]", label: "DRAFT" }, active: { color: "text-green-400 border-green-800", label: "ACTIVE" }, idle: { color: "text-yellow-400 border-yellow-800", label: "IDLE" }, paused: { color: "text-orange-400 border-orange-800", label: "PAUSED" }, archived: { color: "text-[#556677] border-[#2a3a5a]", label: "ARCHIVED" }, }; interface DirectiveListProps { directives: DirectiveSummary[]; selectedId: string | null; onSelect: (id: string) => void; onCreate: () => void; onStart?: (directive: DirectiveSummary) => void; onPause?: (directive: DirectiveSummary) => void; onArchive?: (directive: DirectiveSummary) => void; onDelete?: (directive: DirectiveSummary) => void; onGoToPR?: (directive: DirectiveSummary) => void; } export function DirectiveList({ directives, selectedId, onSelect, onCreate, onStart, onPause, onArchive, onDelete, onGoToPR }: DirectiveListProps) { const { pendingQuestions } = useSupervisorQuestions(); const [contextMenuPosition, setContextMenuPosition] = useState<{ x: number; y: number } | null>(null); const [contextMenuDirective, setContextMenuDirective] = useState(null); const handleContextMenu = (e: React.MouseEvent, directive: DirectiveSummary) => { e.preventDefault(); setContextMenuPosition({ x: e.clientX, y: e.clientY }); setContextMenuDirective(directive); }; const closeContextMenu = () => { setContextMenuPosition(null); setContextMenuDirective(null); }; const questionsPerDirective = useMemo(() => { const counts = new Map(); for (const q of pendingQuestions) { if (q.directiveId) { counts.set(q.directiveId, (counts.get(q.directiveId) || 0) + 1); } } return counts; }, [pendingQuestions]); return (
Directives
{directives.length === 0 ? (
No directives yet
) : ( directives.map((d) => { const badge = STATUS_BADGE[d.status] || STATUS_BADGE.draft; const progress = d.totalSteps > 0 ? Math.round((d.completedSteps / d.totalSteps) * 100) : 0; return ( ); }) )}
{/* Context Menu */} {contextMenuPosition && contextMenuDirective && ( onStart?.(contextMenuDirective)} onPause={() => onPause?.(contextMenuDirective)} onArchive={() => onArchive?.(contextMenuDirective)} onDelete={() => onDelete?.(contextMenuDirective)} onGoToPR={() => onGoToPR?.(contextMenuDirective)} /> )}
); }