Stop rendering the DocumentCenter as a blank page

Both the prose-documents and work-products sections rendered as
`{x.length > 0 ? ... : null}` with no else branch, and the whole
DocumentCenter was only mounted when a company was selected. The
combined result: a company with no files gave the operator a page
containing only a title and a "New" button, and an operator who had
not yet picked a company saw nothing at all — the exact "page is blank
even though docs were generated" complaint.

Add an explicit empty state inside DocumentCenter (surfaced only when
both collections are empty) and a separate "select a company" empty
state at the section router level. Strings live in the i18n bundle so
the Chinese locale is not left behind.
This commit is contained in:
ZacharyZhang-NY committed 2026-04-19 19:10:57 -04:00
1 parent 905473d985
commit 2222a67428
4 files changed
+38 -13

No files matched your search

@@ -1,7 +1,7 @@
import { useMemo, useState } from "react";
import { FileText, FloppyDisk, NotePencil, Trash } from "../ui/icons";
import { FileText, FloppyDisk, NotePencil, Plus, Trash } from "../ui/icons";
import type { AgentRecord, DocumentRecord, GoalRecord, ProjectRecord, WorkProductRecord } from "@shared/types";
import { ActionButton, ConfirmDialog, InlineNotice, Input, ListFrame, ListRow, Modal, Select, StatusPill, TextArea } from "../ui";
import { ActionButton, ConfirmDialog, EmptyState, 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";
@@ -120,10 +120,18 @@ export function DocumentCenter({ companyId, documents, workProducts, agents, pro
const activeDocument = useMemo(() => documents.find((document) => document.id === editingId) ?? null, [documents, editingId]);
const totalCount = documents.length + workProducts.length;
const isEmpty = totalCount === 0;
return (
<div>
<SectionHeader title={t("ops.documentCenter")} count={totalCount} action={() => setEditingId(NEW_ENTITY_ID)} />
{isEmpty ? (
<EmptyState
title={t("ops.documentsEmptyTitle")}
detail={t("ops.documentsEmptyDetail")}
action={<ActionButton label={t("ops.documentsEmptyAction")} icon={Plus} tone="accent" onClick={() => setEditingId(NEW_ENTITY_ID)} />}
/>
) : null}
{documents.length > 0 ? (
<div>
<div className="px-4 pt-3 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground">