import { useEffect, useMemo, useState } from "react"; import type { Task, TaskPriority } from "@fusion/core"; import { fetchTasks } from "../api"; import { useMobileScrollLock } from "../hooks/useMobileScrollLock"; import type { ResearchRunDetail } from "../research-types"; import "./ResearchTaskActionModal.css"; type Mode = "create" | "enrich"; interface ResearchTaskActionModalProps { open: boolean; mode: Mode; run: ResearchRunDetail; finding: { id: string; heading?: string; content?: string }; projectId?: string; onClose: () => void; onConfirm: (payload: { taskId?: string; title?: string; description?: string; priority?: TaskPriority; attachExport: boolean }) => Promise; } export function ResearchTaskActionModal({ open, mode, run, finding, projectId, onClose, onConfirm }: ResearchTaskActionModalProps) { useMobileScrollLock(open); const [attachExport, setAttachExport] = useState(false); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [priority, setPriority] = useState("normal"); const [taskId, setTaskId] = useState(""); const [tasks, setTasks] = useState([]); const [loadingTasks, setLoadingTasks] = useState(false); const [saving, setSaving] = useState(false); const preview = useMemo(() => { const firstSentence = (finding.content ?? "").split(/(?<=[.!?])\s+/)[0] ?? ""; return `${finding.heading || "Research finding"} — ${firstSentence}`.trim(); }, [finding.content, finding.heading]); useEffect(() => { if (!open) return; setAttachExport(false); setTitle(`Research: ${finding.heading || run.title}`); setDescription(preview); setPriority("normal"); setTaskId(""); if (mode === "enrich") { setLoadingTasks(true); void fetchTasks(50, 0, projectId) .then((rows) => setTasks(rows.filter((task) => task.column !== "archived"))) .finally(() => setLoadingTasks(false)); } }, [open, mode, projectId, finding.heading, preview, run.title]); if (!open) return null; return (
event.stopPropagation()}>

{mode === "create" ? "Create task from finding" : "Enrich existing task"}

Run: {run.id}

Finding: {finding.id}{finding.heading ? ` — ${finding.heading}` : ""}

{preview || "No preview available."}

{mode === "create" ? ( <>