Skip to content

fix(ui): strip row components from serializable form state#17371

Open
rasitakyol wants to merge 1 commit into
payloadcms:mainfrom
rasitakyol:codex/fix-serializable-form-rows
Open

fix(ui): strip row components from serializable form state#17371
rasitakyol wants to merge 1 commit into
payloadcms:mainfrom
rasitakyol:codex/fix-serializable-form-rows

Conversation

@rasitakyol

Copy link
Copy Markdown
Contributor

What?

Remove row-level custom components when reducing admin form state to serializable fields.

Why?

Array and blocks rows can contain a React RowLabel component. That value may include circular references, so preview and SEO fields can fail while serializing form state even though top-level custom components are already removed.

How?

Clone and sanitize each row without mutating the original form state, while preserving row metadata such as IDs, block types, and collapsed state. A focused unit test covers circular row labels, top-level non-serializable values, preserved metadata, and input immutability.

Validation:

  • pnpm test:unit packages/ui/src/forms/Form/reduceToSerializableFields.spec.ts
  • pnpm eslint --max-warnings=0 packages/ui/src/forms/Form/reduceToSerializableFields.ts
  • pnpm prettier --check packages/ui/src/forms/Form/reduceToSerializableFields.ts packages/ui/src/forms/Form/reduceToSerializableFields.spec.ts
  • pnpm build:ui

Fixes #16786

@rasitakyol
rasitakyol marked this pull request as ready for review July 16, 2026 21:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

plugin-seo & ui: PreviewField throws "circular structure to JSON"

1 participant