diff --git a/src/app/projects/[projectId]/setup/contractors/ContractorPermissionsTable.tsx b/src/app/projects/[projectId]/setup/contractors/ContractorPermissionsTable.tsx index 36dd3021..d7bca2b0 100644 --- a/src/app/projects/[projectId]/setup/contractors/ContractorPermissionsTable.tsx +++ b/src/app/projects/[projectId]/setup/contractors/ContractorPermissionsTable.tsx @@ -142,7 +142,8 @@ export function ContractorPermissionsTable({ ? { kind: "blocked", reason } : { kind: "needs-confirmation", reason }; } - if (!res.ok) throw new Error(body.error ?? "Couldn't remove the contractor"); + if (!res.ok) + throw new Error(body.error ?? "Couldn't remove the contractor"); return { kind: "removed" }; }, onSuccess: (outcome, { contractor }) => { @@ -321,7 +322,9 @@ export function ContractorPermissionsTable({
- {contractor.organisationName.charAt(0).toUpperCase()} + {contractor.organisationName + .charAt(0) + .toUpperCase()} {contractor.organisationName} @@ -391,59 +394,71 @@ export function ContractorPermissionsTable({ data-testid={`contractor-permissions-${contractor.organisationId}`} > {/* Full-bleed: the detail table *is* the expanded - space, spanning every column of the row above. */} + space, spanning every column of the row above. + + The wrapper is a one-row grid whose track animates + 0fr → 1fr, so the detail unrolls to whatever height + its own content needs — no measuring, and no effect + to run the animation: mounting starts it. */} - - - - - {PERMISSION_COLUMNS.map((column) => ( - - ))} - - - - {contractor.assignments.map((assignment) => ( - - - {PERMISSION_COLUMNS.map((column) => ( - +
+
+
- Workstream - - {column.header} -
- - {assignment.workstreamName} - - {assignment.workOrders > 0 && ( - - {assignment.workOrders}{" "} - {assignment.workOrders === 1 - ? "work order" - : "work orders"} - - )} - - -
+ + + + {PERMISSION_COLUMNS.map((column) => ( + + ))} + + + + {contractor.assignments.map((assignment) => ( + + + {PERMISSION_COLUMNS.map((column) => ( + + ))} + ))} - - ))} - -
+ Workstream + + {column.header} +
+ + {assignment.workstreamName} + + {assignment.workOrders > 0 && ( + + {assignment.workOrders}{" "} + {assignment.workOrders === 1 + ? "work order" + : "work orders"} + + )} + + +
+ + +
+ )} @@ -467,7 +482,10 @@ export function ContractorPermissionsTable({ Work orders can only be imported once every workstream has both a stage ladder and a contractor.

-