import { useMemo, useState } from "react"; import { FileText, FloppyDisk, NotePencil, Trash } from "@phosphor-icons/react"; import type { AgentRecord, DocumentRecord, GoalRecord, ProjectRecord } from "@shared/types"; import { ActionButton, ConfirmDialog, InlineNotice, Input, ListFrame, ListRow, Modal, Select, StatusPill, TextArea } from "../ui"; import { useT } from "../../i18n"; import { documentTypeOptions, documentStatusOptions, splitTags, parseTags } from "./helpers"; import { SectionHeader } from "./SectionHeader"; function DocumentEditor({ companyId, agents, projects, goals, document, onSaved }: { companyId: string; agents: AgentRecord[]; projects: ProjectRecord[]; goals: GoalRecord[]; document: DocumentRecord | null; onSaved: () => Promise; }) { const [title, setTitle] = useState(document?.title ?? ""); const [type, setType] = useState(document?.type ?? "technical_spec"); const [content, setContent] = useState(document?.content ?? ""); const [status, setStatus] = useState(document?.status ?? "draft"); const [reviewerAgentId, setReviewerAgentId] = useState(document?.reviewerAgentId ?? ""); const [projectId, setProjectId] = useState(document?.projectId ?? ""); const [goalId, setGoalId] = useState(document?.goalId ?? ""); const [tags, setTags] = useState(parseTags(document?.tagsJson ?? "[]")); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); async function save() { if (!title.trim()) { setError("Document title is required."); return; } setSaving(true); setError(null); try { const result = await window.agentCompany.saveDocument({ id: document?.id ?? null, companyId, type: type as Parameters[0]["type"], title: title.trim(), content, authorAgentId: document?.authorAgentId ?? null, reviewerAgentId: reviewerAgentId || null, projectId: projectId || null, goalId: goalId || null, parentDocId: document?.parentDocId ?? null, version: document?.version ?? 1, status: status as Parameters[0]["status"], tagsJson: splitTags(tags), }); if (!result.ok) { setError(result.error.message); return; } await onSaved(); } finally { setSaving(false); } } return (
{error ? : null}
setStatus(value as typeof status)} options={documentStatusOptions} />
({ value: goal.id, label: goal.title }))]} />