Fixed invalid table nesting in settings lists - #29390
Conversation
no ref The legacy TableRow already renders a spanning table cell, so nested TableCell and TableHead components produced invalid td/div markup and noisy acceptance-test logs. Render the visual columns as flex content within the row's existing cell.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
WalkthroughThe PR refactors settings table layouts by replacing Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
| Command | Status | Duration | Result |
|---|---|---|---|
nx run @tryghost/admin:test:acceptance |
✅ Succeeded | 4m 3s | View ↗ |
nx run @tryghost/admin-x-settings:test:acceptance |
✅ Succeeded | 3m 19s | View ↗ |
nx run-many -t test:unit -p @tryghost/admin-x-s... |
✅ Succeeded | 2m 23s | View ↗ |
nx run ghost-monorepo:lint:boundaries |
✅ Succeeded | 20s | View ↗ |
nx run-many -t lint -p @tryghost/admin-x-settin... |
✅ Succeeded | 51s | View ↗ |
nx run @tryghost/admin:build |
✅ Succeeded | 39s | View ↗ |
nx run-many --target=build --projects=tag:publi... |
✅ Succeeded | <1s | View ↗ |
💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗
☁️ Nx Cloud last updated this comment at 2026-07-16 14:45:23 UTC

What changed
TableRowcell.Why
The legacy
TableRowcomponent already renders a spanning<td>containing layout<div>elements. These lists passedTableCellandTableHeadchildren into it, producing<td>or<th>elements beneath<div>and triggeringvalidateDOMNestingwarnings in Admin acceptance-test logs.The current full Admin acceptance log contained three occurrences across the newsletter and recommendations suites. A source scan found the same pattern in incoming recommendations and webhooks, so those are included as well.
Testing
pnpm nx run @tryghost/admin:test:acceptance -- src/settings/membership/member-welcome-emails.acceptance.test.tsx src/settings/email/newsletters.acceptance.test.tsx src/settings/growth/recommendations.acceptance.test.tsx(42 tests; no DOM-nesting warnings)pnpm nx run @tryghost/admin-x-settings:lintpnpm nx run @tryghost/admin-x-settings:test:unit(203 tests)