feat(documents): detail page with signers, watchers, activity, actions

Replaces the PR4 stub at /documents/[id] with the full Phase A detail
view: gradient header strip, status-aware action bar (Cancel /
Download / Email signatories), per-signer remind + copy-link, watcher
list with remove, and activity timeline. Adds the supporting endpoints
(cancel, compose-completion-email, watchers GET/POST/DELETE) and
listDocumentWatchers / addDocumentWatcher / removeDocumentWatcher
service helpers. The document GET now serves the aggregator shape
when ?detail=true.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matt Ciaccio
2026-04-28 02:39:46 +02:00
parent 2a3fae4d6a
commit aa15807063
8 changed files with 568 additions and 16 deletions

View File

@@ -5,6 +5,7 @@ import { parseBody } from '@/lib/api/route-helpers';
import { errorResponse } from '@/lib/errors';
import {
getDocumentById,
getDocumentDetail,
updateDocument,
deleteDocument,
} from '@/lib/services/documents.service';
@@ -13,6 +14,11 @@ import { updateDocumentSchema } from '@/lib/validators/documents';
export const GET = withAuth(
withPermission('documents', 'view', async (req, ctx, params) => {
try {
const url = new URL(req.url);
if (url.searchParams.get('detail') === 'true') {
const detail = await getDocumentDetail(params.id!, ctx.portId);
return NextResponse.json({ data: detail });
}
const doc = await getDocumentById(params.id!, ctx.portId);
return NextResponse.json({ data: doc });
} catch (error) {