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. */}
-
-
-
- |
- Workstream
- |
- {PERMISSION_COLUMNS.map((column) => (
-
- {column.header}
- |
- ))}
-
-
-
- {contractor.assignments.map((assignment) => (
-
- |
-
- {assignment.workstreamName}
-
- {assignment.workOrders > 0 && (
-
- {assignment.workOrders}{" "}
- {assignment.workOrders === 1
- ? "work order"
- : "work orders"}
-
- )}
- |
- {PERMISSION_COLUMNS.map((column) => (
-
-
- |
+
+
+
+
+
+ |
+ Workstream
+ |
+ {PERMISSION_COLUMNS.map((column) => (
+
+ {column.header}
+ |
+ ))}
+
+
+
+ {contractor.assignments.map((assignment) => (
+
+ |
+
+ {assignment.workstreamName}
+
+ {assignment.workOrders > 0 && (
+
+ {assignment.workOrders}{" "}
+ {assignment.workOrders === 1
+ ? "work order"
+ : "work orders"}
+
+ )}
+ |
+ {PERMISSION_COLUMNS.map((column) => (
+
+
+ |
+ ))}
+
))}
-
- ))}
-
-
+
+
+
+
|
)}
@@ -467,7 +482,10 @@ export function ContractorPermissionsTable({
Work orders can only be imported once every workstream has both a
stage ladder and a contractor.
-
+
{readiness.incomplete.map((workstream) => (
|