import { useMemo, useState } from "react" import { CheckCircle } from "../../ui/icons" import type { ApprovalRecord, DocumentRecord } from "@shared/types" import { extractApprovalDocumentReferences, type ApprovalDocumentReference } from "@shared/approval-documents" import { unwrap } from "../../../lib/desktop" import { useAppStore } from "../../../state/store" import { ActionButton, Card, Eyebrow, InlineNotice, Input, TextArea } from "../../ui" import { useT } from "../../../i18n" import { describeActionError } from "../execution-utils" function ApprovalDocumentEditor({ companyId, document, fallback, }: { companyId: string document: DocumentRecord fallback?: ApprovalDocumentReference }) { const t = useT() const addToast = useAppStore((s) => s.addToast) const [title, setTitle] = useState(document.title) const [content, setContent] = useState(document.content ?? "") const [saving, setSaving] = useState(false) const [saveError, setSaveError] = useState(null) async function handleSave() { if (!title.trim()) { setSaveError(t("approval.documentTitleRequired")) return } setSaving(true) setSaveError(null) try { unwrap( await window.agentCompany.saveDocument({ id: document.id, companyId, type: document.type, title: title.trim(), content, authorAgentId: document.authorAgentId ?? null, reviewerAgentId: document.reviewerAgentId ?? null, projectId: document.projectId ?? null, goalId: document.goalId ?? null, parentDocId: document.parentDocId ?? null, version: document.version, status: document.status, tagsJson: document.tagsJson, }), ) addToast(t("approval.documentSavedToast").replace("{title}", title.trim()), "success") } catch (error) { setSaveError(describeActionError(error)) } finally { setSaving(false) } } return (
{fallback?.title ?? document.title}
{(fallback?.type ?? document.type).replaceAll("_", " ")} · v{document.version} · {document.status}
void handleSave()} loading={saving} />
{saveError ? : null}