import { useCallback, useState } from "react"; import type { RunFactsInterrupt } from "./demo-run-facts.js"; type InterruptDecisionFormProps = { readonly interrupt: RunFactsInterrupt; readonly runId: string; readonly onSubmit?: ((selectedIssueIds: ReadonlyArray, comment: string) => void) | undefined; readonly onRequestRevision?: (() => void) | undefined; readonly terminalOutcome?: "submitted" | "revision requested" | undefined; readonly showReportPreview?: boolean; }; export const InterruptDecisionForm = ({ interrupt, runId, onSubmit, onRequestRevision, terminalOutcome, showReportPreview = true, }: InterruptDecisionFormProps) => { const [selectedIds, setSelectedIds] = useState>(() => new Set(interrupt.proposedIssues.map((issue) => issue.id)), ); const [comment, setComment] = useState("Create the selected issue."); const toggleIssue = useCallback((id: string) => { setSelectedIds((prev) => { const next = new Set(prev); if (next.has(id)) next.delete(id); else next.add(id); return next; }); }, []); const handleSubmit = useCallback( (e: React.FormEvent) => { e.preventDefault(); onSubmit?.([...selectedIds], comment); }, [selectedIds, comment, onSubmit], ); if (terminalOutcome) { return (
{interrupt.kind} {runId}

Outcome: {terminalOutcome}

); } return (
{interrupt.kind} {runId}
Typed
{interrupt.typed ? "yes" : "no"}
Outcomes
{interrupt.outcomes.join(" / ")}
{showReportPreview && interrupt.reportMarkdownPreview && (
          {interrupt.reportMarkdownPreview}
        
)}
Proposed issues {interrupt.proposedIssues.map((issue) => ( ))}