From bd73f0cc7669d5cc2b572514b1b7a5435c012123 Mon Sep 17 00:00:00 2001 From: Chandler Copeland Date: Fri, 20 Mar 2026 10:36:25 -0600 Subject: [PATCH] feat(05-04): lock field placer to read-only when document is Sent - Add readOnly prop to FieldPlacer; when true: hide palette, disable all pointer events on field boxes, show fields at 60% opacity, suppress delete button and all four resize handles - PdfViewer accepts docStatus prop and derives readOnly={docStatus==='Sent'||'Signed'} - PdfViewerWrapper forwards docStatus prop to PdfViewer - page.tsx passes docStatus={doc.status} to PdfViewerWrapper Co-Authored-By: Claude Sonnet 4.6 --- .../(protected)/documents/[docId]/_components/PdfViewer.tsx | 6 ++++-- .../documents/[docId]/_components/PdfViewerWrapper.tsx | 4 ++-- .../src/app/portal/(protected)/documents/[docId]/page.tsx | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx index a955856..b9604db 100644 --- a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx +++ b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewer.tsx @@ -19,12 +19,14 @@ interface PageInfo { scale: number; } -export function PdfViewer({ docId }: { docId: string }) { +export function PdfViewer({ docId, docStatus }: { docId: string; docStatus?: string }) { const [numPages, setNumPages] = useState(0); const [pageNumber, setPageNumber] = useState(1); const [scale, setScale] = useState(1.0); const [pageInfo, setPageInfo] = useState(null); + const readOnly = docStatus === 'Sent' || docStatus === 'Signed'; + return (
@@ -65,7 +67,7 @@ export function PdfViewer({ docId }: { docId: string }) {
{/* PDF canvas wrapped in FieldPlacer for drag-and-drop field placement */} - + setNumPages(numPages)} diff --git a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewerWrapper.tsx b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewerWrapper.tsx index ae241d0..7fcc29f 100644 --- a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewerWrapper.tsx +++ b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/_components/PdfViewerWrapper.tsx @@ -3,6 +3,6 @@ import dynamic from 'next/dynamic'; const PdfViewer = dynamic(() => import('./PdfViewer').then(m => m.PdfViewer), { ssr: false }); -export function PdfViewerWrapper({ docId }: { docId: string }) { - return ; +export function PdfViewerWrapper({ docId, docStatus }: { docId: string; docStatus?: string }) { + return ; } diff --git a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/page.tsx b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/page.tsx index 6cfd5dc..4e96594 100644 --- a/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/page.tsx +++ b/teressa-copeland-homes/src/app/portal/(protected)/documents/[docId]/page.tsx @@ -48,7 +48,7 @@ export default async function DocumentPage({
- +