feat!: add support for dynamic select api#16520
Merged
jacobsfletch merged 14 commits intomainfrom May 7, 2026
Merged
Conversation
Contributor
📦 esbuild Bundle Analysis for payloadThis analysis was generated by esbuild-bundle-analyzer. 🤖
Largest pathsThese visualization shows top 20 largest paths in the bundle.Meta file: packages/next/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_shared.json, Out file: esbuild/exports/shared.js
Meta file: packages/richtext-lexical/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_shared.json, Out file: esbuild/exports/shared_optimized/index.js
DetailsNext to the size is how much the size has increased or decreased compared with the base branch of this PR.
|
paulpopus
approved these changes
May 7, 2026
jacobsfletch
added a commit
that referenced
this pull request
May 8, 2026
Requires #16520. Enables the Select API in the list view by default. Deprecates the experimental `admin.listViewSelectAPI` property, as this is now the default behavior. ```diff import type { CollectionConfig } from 'payload'; const MyCollection: CollectionConfig = { slug: 'pages', admin: { - listViewSelectAPI: true } } ``` Fixes a few known issues around this property, including automatically selecting feature-specific fields, e.g. `_tz`, `_order`, etc. #### Optional If your admin-only functions rely on specific fields, you must force select those fields via the `select` property on your collection or global config. For example, if your `admin.formatDocURL` function requires the `slug` field, you must force that field into selection to ensure its present even when inactive in the list view: ```diff import type { CollectionConfig } from 'payload'; const MyCollection: CollectionConfig = { slug: 'pages', admin: { formatDocURL: ({ doc }) => { return `/${doc.slug}` // `slug` must be selected! } }, + select: () => ({ + slug: true + }) } ``` #### Codemod To migrate automatically, there's a codemod for this change available by running: ```bash npx @payloadcms/codemod --transform migrate-list-view-select-api ``` The codemod is unaware of your admin-only function dependencies. You may have to add the `select` definitions by hand, as needed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces static
forceSelectproperty in favor of a newselectfunction.This will allow for dynamically modifying the request's
selectin any way—not just forcing fields into selection.For example, you may want to force select
field2iffield1is also selected. Like when a virtual field is active in the list view, but requires other inactive fields to calculate its value. It's not currently possible to do this through staticforceSelectdefinitions unless you want to apply this it across all APIs.For example, when using the
admin.enableListViewSelectAPIfeature flag, you must force select all fields required ofadmin.formatDocURL, etc., which would be applied even outside the context of the admin panel. See #16471.import type { CollectionConfig } from 'payload' const MyCollection: CollectionConfig = { slug: 'posts', - forceSelect: { - slug: true - }, + select: ({ select }) => ({ + ...select, + slug: true + }) }Codemod
To migrate automatically, there's a codemod for this change available by running: