diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx index 4b86fa3..95c60e7 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/ContractorUploadModal.tsx @@ -52,6 +52,7 @@ type Props = { portfolioId: string; onClose: () => void; docStatusMap?: DocStatusMap; + approvedMeasures?: string[]; // if non-empty, used instead of proposedMeasures }; // ── Constants ───────────────────────────────────────────────────────────── @@ -261,29 +262,122 @@ function PasGuidancePanel() { // ── DocType select ──────────────────────────────────────────────────────── -function DocTypeSelect({ +// ── DocType button grid — shown when a measure is selected ─────────────── + +function DocTypeButtonGrid({ value, onChange, - showHint = false, requiredDocs, uploadedDocs, }: { value: string; onChange: (v: string) => void; - showHint?: boolean; - requiredDocs?: string[]; // file types required for the selected measure - uploadedDocs?: string[]; // file types already uploaded for the selected measure + requiredDocs: string[]; + uploadedDocs: string[]; +}) { + const [showOther, setShowOther] = useState(false); + const uploadedSet = new Set(uploadedDocs); + const requiredSet = new Set(requiredDocs); + const isOtherSelected = value !== "" && !requiredSet.has(value); + + return ( +
{hint}
: null; + })()} +{selected.hint}
)}{entry.displayName}
- {entry.displaySize &&{entry.displaySize}
} - {entry.existingS3Key &&Previously uploaded
} -{entry.displayName}
++ {entry.existingS3Key ? "Previously uploaded · " : ""} + {entry.displaySize ?? ""} + {entryMeasure && !selectedMeasure && ( + {entryMeasure} + )} +
++ Document type * +
+ {requiredDocs ? ( +{DOC_TYPE_LABELS[docType] ?? docType}
+{formatDate(doc.s3UploadTimestamp)}
+{DOC_TYPE_LABELS[docType] ?? docType}
+{DOC_TYPE_LABELS[doc.docType] ?? doc.docType}
+{formatDate(doc.s3UploadTimestamp)}
+