+ {/* Row header */}
setExpanded((e) => !e)}
>
{doc.filename}
@@ -119,10 +193,7 @@ function DocumentRow({
{(doc.file_size / 1024).toFixed(0)} KB
+ {/* Expanded detail */}
{expanded && (
+
+ {/* Tags */}
{tags.length > 0 && (
Tags:{" "}
{tags.map((t) => (
-
+
{t}
))}
)}
+ {/* Extracted fields (excluding internal-only keys) */}
{extractedData && (
Extracted data:
{Object.entries(extractedData)
- .filter(([k]) => k !== "tags")
+ .filter(([k]) => k !== "tags" && k !== "suggested_categories")
.map(([k, v]) => (
| {k} |
{Array.isArray(v)
- ? v.length === 0
- ? "—"
- : JSON.stringify(v, null, 2)
- : v !== null && v !== undefined && v !== ""
- ? String(v)
- : "—"}
+ ? v.length === 0 ? "—" : JSON.stringify(v, null, 2)
+ : v !== null && v !== undefined && v !== "" ? String(v) : "—"}
|
))}
@@ -186,25 +248,18 @@ function DocumentRow({
)}
+ {/* Error */}
{doc.error_message && (
Error: {doc.error_message}
)}
+ {/* Assigned categories */}
Categories:{" "}
{doc.categories.map((c) => (
-
+
{c.name}{" "}
+
+ {/* AI-suggested categories */}
+ {pendingSuggestions.length > 0 && (
+
+
Suggested by AI:
+
+ {pendingSuggestions.map((name) => {
+ const existing = categories.find(
+ (c) => c.name.toLowerCase() === name.toLowerCase()
+ );
+ return (
+ setDismissed((prev) => new Set([...prev, n]))}
+ />
+ );
+ })}
+
+
+ "Assign" links an existing category · "Create & Assign" creates it first · ✕ dismisses the suggestion
+
+
+ )}
)}
);
}
+// ── Page ────────────────────────────────────────────────────────────────────
+
export default function DocumentsPage() {
const qc = useQueryClient();
const fileRef = useRef(null);
@@ -317,15 +400,7 @@ export default function DocumentsPage() {
Manage categories
{categories.map((c) => (
-
+
{c.name}
))}