import { useEffect, useState } from "react"; import type { MessageMetadata } from "@fusion/core"; import { createProposedTask } from "../api"; import "./MailboxTaskProposal.css"; export function MailboxTaskProposal({ messageId, metadata, projectId, onOpenTask, onCreated }: { messageId: string; metadata?: MessageMetadata; projectId?: string; onOpenTask?: (id: string) => void; onCreated?: () => void }) { const [creating, setCreating] = useState(false); const [currentMetadata, setCurrentMetadata] = useState(metadata); useEffect(() => setCurrentMetadata(metadata), [metadata]); if (currentMetadata?.kind !== "task-proposal" || !currentMetadata.proposedTask) return null; const proposal = currentMetadata.proposedTask; const status = currentMetadata.proposalStatus ?? "pending"; const create = async () => { setCreating(true); try { const response = await createProposedTask(messageId, projectId); // FNXC:EphemeralAgentTaskCreation 2026-07-30-13:00: apply the finalized response immediately so a stale mailbox list cannot offer a duplicate create click before SSE refreshes it. setCurrentMetadata(response.proposal.metadata); onCreated?.(); } finally { setCreating(false); } }; return
{proposal.title}

{proposal.description}

{status === "pending" && } {status === "creating" && } {status === "created" && currentMetadata.createdTaskId && } {status === "dismissed" && Task proposal dismissed}
; }