v3.24.0
payloadcms/payloadv3.24.0Feb 19, 2025by denolfe
AI Summary
This release introduces join fields across collections, view component types, route transitions, and a confirmation modal. It also adds configuration options for file inputs and refines progress bar animations.
Key Highlights
- Join fields now support pagination and multiple collections.
- View component types are now exposed.
- Route transitions have been added.
- Confirmation modal for destructive actions.
- New `siblingFields` argument for field hooks.
New Features
- Join field across many collections
- Page query parameter for joins
- View component types
- Route transitions
- siblingFields arg to field hooks
- Confirmation modal
- hideFileInputOnCreate and hideRemoveFile options
- Refined progress bar animation
Full Release Notes
## [v3.24.0](https://github.com/payloadcms/payload/compare/v3.23.0...v3.24.0) (2025-02-19)
### 🚀 Features
* add support for interfaceName on radio and select fields to create reusable top level types ([#11277](https://github.com/payloadcms/payload/issues/11277)) ([acead10](https://github.com/payloadcms/payload/commit/acead10))
* join field across many collections ([#10919](https://github.com/payloadcms/payload/issues/10919)) ([6d36a28](https://github.com/payloadcms/payload/commit/6d36a28))
* add `page` query parameter for `joins` ([#10998](https://github.com/payloadcms/payload/issues/10998)) ([847d8d8](https://github.com/payloadcms/payload/commit/847d8d8))
* view component types ([#11126](https://github.com/payloadcms/payload/issues/11126)) ([b80010b](https://github.com/payloadcms/payload/commit/b80010b))
* route transitions ([#9275](https://github.com/payloadcms/payload/issues/9275)) ([3f550bc](https://github.com/payloadcms/payload/commit/3f550bc))
* add siblingFields arg to field hooks ([#11117](https://github.com/payloadcms/payload/issues/11117)) ([155f9f8](https://github.com/payloadcms/payload/commit/155f9f8))
* **richtext-lexical:** export INSERT_BLOCK_COMMAND and INSERT_INLINE_BLOCK_COMMAND ([#11193](https://github.com/payloadcms/payload/issues/11193)) ([dc36572](https://github.com/payloadcms/payload/commit/dc36572))
* **translations:** add support for lithuanian ([#11243](https://github.com/payloadcms/payload/issues/11243)) ([8bbe7bc](https://github.com/payloadcms/payload/commit/8bbe7bc))
* **ui:** enable specific css selectors on the localizer per locale ([80b33ad](https://github.com/payloadcms/payload/commit/80b33ad))
* **ui:** confirmation modal ([#11271](https://github.com/payloadcms/payload/issues/11271)) ([bd8ced1](https://github.com/payloadcms/payload/commit/bd8ced1))
* **ui:** adds admin.components.listMenuItems option ([#11230](https://github.com/payloadcms/payload/issues/11230)) ([8a2b712](https://github.com/payloadcms/payload/commit/8a2b712))
* **ui:** add `hideFileInputOnCreate` and `hideRemoveFile` to collection `upload` config ([#11217](https://github.com/payloadcms/payload/issues/11217)) ([daaaa5f](https://github.com/payloadcms/payload/commit/daaaa5f))
* **ui:** refines progress bar animation curve ([#11167](https://github.com/payloadcms/payload/issues/11167)) ([16d75a7](https://github.com/payloadcms/payload/commit/16d75a7))
### 🐛 Bug Fixes
* versions not loading properly ([#11256](https://github.com/payloadcms/payload/issues/11256)) ([0651ae0](https://github.com/payloadcms/payload/commit/0651ae0))
* db transaction errors caused by checkDocumentLockStatus ([#11273](https://github.com/payloadcms/payload/issues/11273)) ([9b8f8d7](https://github.com/payloadcms/payload/commit/9b8f8d7))
* localized fields within block references were not handled properly if any parent is localized ([#11207](https://github.com/payloadcms/payload/issues/11207)) ([e6fea1d](https://github.com/payloadcms/payload/commit/e6fea1d))
* upload and auth endpoints are mounted for all collections ([#11231](https://github.com/payloadcms/payload/issues/11231)) ([749962a](https://github.com/payloadcms/payload/commit/749962a))
* populate is ignored for nested relationships ([#11227](https://github.com/payloadcms/payload/issues/11227)) ([938472b](https://github.com/payloadcms/payload/commit/938472b))
* ensure leavesFirst option works correctly in traverseFields utility ([#11219](https://github.com/payloadcms/payload/issues/11219)) ([6b9d81a](https://github.com/payloadcms/payload/commit/6b9d81a))
* join field does not show validation error ([#11170](https://github.com/payloadcms/payload/issues/11170)) ([dd28959](https://github.com/payloadcms/payload/commit/dd28959))
* **db-mongodb:** properly handle document notfound cases for update and delete operations ([#11267](https://github.com/payloadcms/payload/issues/11267)) ([7922d66](https://github.com/payloadcms/payload/commit/7922d66))
* **db-mongodb:** remove duplicative indexing of timestamps ([#11028](https://github.com/payloadcms/payload/issues/11028)) ([12f51ba](https://github.com/payloadcms/payload/commit/12f51ba))
* **db-postgres:** querying other collections via relationships inside blocks ([#11255](https://github.com/payloadcms/payload/issues/11255)) ([88548fc](https://github.com/payloadcms/payload/commit/88548fc))
* **db-postgres:** ensure `countDistinct` works correctly and achieve better performance when the query has table joins ([#11208](https://github.com/payloadcms/payload/issues/11208)) ([513ba63](https://github.com/payloadcms/payload/commit/513ba63))
* **next:** imports toast from @payloadcms/ui ([#11279](https://github.com/payloadcms/payload/issues/11279)) ([cd48904](https://github.com/payloadcms/payload/commit/cd48904))
* **next:** document header padding on tablet sized screens ([#11192](https://github.com/payloadcms/payload/issues/11192)) ([70db44f](https://github.com/payloadcms/payload/commit/70db44f))
* **next:** pre-flight OPTIONS request errors from the graphql endpoint ([#11103](https://github.com/payloadcms/payload/issues/11103)) ([ececa65](https://github.com/payloadcms/payload/commit/ececa65))
* **plugin-multi-tenant:** corrects default value for tenantsArrayTenantFieldName ([#11189](https://github.com/payloadcms/payload/issues/11189)) ([b65ae07](https://github.com/payloadcms/payload/commit/b65ae07))
* **plugin-seo:** add missing supported languages ([#11254](https://github.com/payloadcms/payload/issues/11254)) ([74ce889](https://github.com/payloadcms/payload/commit/74ce889))
* **richtext-lexical:** add container div to table element to allow horizontal scroll in HTML and JSX converters ([#11119](https://github.com/payloadcms/payload/issues/11119)) ([9068bda](https://github.com/payloadcms/payload/commit/9068bda))
* **richtext-lexical:** reliably install exact lexical version by removing it from peerDeps ([#11122](https://github.com/payloadcms/payload/issues/11122)) ([2056e9b](https://github.com/payloadcms/payload/commit/2056e9b))
* **richtext-lexical:** unindent button in toolbar is never active ([#11089](https://github.com/payloadcms/payload/issues/11089)) ([7a400a7](https://github.com/payloadcms/payload/commit/7a400a7))
* **ui:** minor issues with tabs and publish buttons when in RTL ([#11282](https://github.com/payloadcms/payload/issues/11282)) ([e83318b](https://github.com/payloadcms/payload/commit/e83318b))
* **ui:** turbopack with the latest next.js canary [skip lint] ([#11280](https://github.com/payloadcms/payload/issues/11280)) ([009e908](https://github.com/payloadcms/payload/commit/009e908))
* **ui:** disabledLocalStrategy.enableFields missing email/username fields ([#11232](https://github.com/payloadcms/payload/issues/11232)) ([9fc1cd0](https://github.com/payloadcms/payload/commit/9fc1cd0))
* **ui:** unsaved changes allows for scheduled publish missing changes ([#11001](https://github.com/payloadcms/payload/issues/11001)) ([618624e](https://github.com/payloadcms/payload/commit/618624e))
* **ui:** timezone issue related to date only fields in Pacific timezones ([#11203](https://github.com/payloadcms/payload/issues/11203)) ([8b0ae90](https://github.com/payloadcms/payload/commit/8b0ae90))
* **ui:** database errors when running autosave and ensure autosave doesn't run unnecessarily ([#11270](https://github.com/payloadcms/payload/issues/11270)) ([1328522](https://github.com/payloadcms/payload/commit/1328522))
* **ui:** do not pass req in handleFormStateLocking ([#11269](https://github.com/payloadcms/payload/issues/11269)) ([7f5aaad](https://github.com/payloadcms/payload/commit/7f5aaad))
* **ui:** issues with prevent leave and autosave when the form is submitted but invalid ([#11233](https://github.com/payloadcms/payload/issues/11233)) ([06debf5](https://github.com/payloadcms/payload/commit/06debf5))
* **ui:** allow selectinputs to reset to their initial values if theres no provided value ([#11252](https://github.com/payloadcms/payload/issues/11252)) ([1c4eba4](https://github.com/payloadcms/payload/commit/1c4eba4))
* **ui:** selection status not updating after toggleAll in useSelection hook ([#11218](https://github.com/payloadcms/payload/issues/11218)) ([5817b81](https://github.com/payloadcms/payload/commit/5817b81))
* **ui:** properly handle singular and plural bulk edit labels ([#11198](https://github.com/payloadcms/payload/issues/11198)) ([779f511](https://github.com/payloadcms/payload/commit/779f511))
* **ui:** hide edit button on deleted relationship options ([#11005](https://github.com/payloadcms/payload/issues/11005)) ([cba5c7b](https://github.com/payloadcms/payload/commit/cba5c7b))
* **ui:** respect locale in buildTableState ([#11147](https://github.com/payloadcms/payload/issues/11147)) ([077fb3a](https://github.com/payloadcms/payload/commit/077fb3a))
* **ui:** hide array field "add" button if `admin.readOnly: true` is set ([#11184](https://github.com/payloadcms/payload/issues/11184)) ([b1734b0](https://github.com/payloadcms/payload/commit/b1734b0))
* **ui:** unable to use browser back navigation after visiting list view ([#11172](https://github.com/payloadcms/payload/issues/11172)) ([0a3820a](https://github.com/payloadcms/payload/commit/0a3820a))
* **ui:** url encode imageCacheTag for media on dashboard ([#11164](https://github.com/payloadcms/payload/issues/11164)) ([d47c980](https://github.com/payloadcms/payload/commit/d47c980))
* **ui:** json schema ([#11123](https://github.com/payloadcms/payload/issues/11123)) ([7f124cf](https://github.com/payloadcms/payload/commit/7f124cf))
* **ui:** prevent omitting fileSize from non-images ([#11146](https://github.com/payloadcms/payload/issues/11146)) ([6901b26](https://github.com/payloadcms/payload/commit/6901b26))
* **ui:** adds delay to progress bar for fast networks ([#11157](https://github.com/payloadcms/payload/issues/11157)) ([de68ef4](https://github.com/payloadcms/payload/commit/de68ef4))
* **ui:** safe call within useEffect teardown ([#11135](https://github.com/payloadcms/payload/issues/11135)) ([30c77d8](https://github.com/payloadcms/payload/commit/30c77d8))
* **ui:** relationship filterOptions not applied within the list view ([#11008](https://github.com/payloadcms/payload/issues/11008)) ([2a0094d](https://github.com/payloadcms/payload/commit/2a0094d))
### ⚡ Performance
* optimize permissions calculation with lots of blocks ([#11236](https://github.com/payloadcms/payload/issues/11236)) ([313ff04](https://github.com/payloadcms/payload/commit/313ff04))
* do not populate globals when calculating permissions, cleanup getEntityPolicies ([#11237](https://github.com/payloadcms/payload/issues/11237)) ([d49de7b](https://github.com/payloadcms/payload/commit/d49de7b))
* deduplicate blocks used in multiple places using new config.blocks property ([#10905](https://github.com/payloadcms/payload/issues/10905)) ([4c8cafd](https://github.com/payloadcms/payload/commit/4c8cafd))
### 🛠 Refactors
* **ui:** simplifies confirmation modal callback ([#11278](https://github.com/payloadcms/payload/issues/11278)) ([af55549](https://github.com/payloadcms/payload/commit/af55549))
* **ui:** deprecates Link props ([#11155](https://github.com/payloadcms/payload/issues/11155)) ([cd11175](https://github.com/payloadcms/payload/commit/cd11175))
### 📚 Documentation
* fix variable name typo in usePayloadAPI (error → isError) ([#11249](https://github.com/payloadcms/payload/issues/11249)) ([7024da8](https://github.com/payloadcms/payload/commit/7024da8))
* fix typo in cors ([#11266](https://github.com/payloadcms/payload/issues/11266)) ([bf103cc](https://github.com/payloadcms/payload/commit/bf103cc))
* remove outdated `res` parameter in `login` and `resetPassword` operations ([#11268](https://github.com/payloadcms/payload/issues/11268)) ([38c1c11](https://github.com/payloadcms/payload/commit/38c1c11))
* update join field docs ([#11264](https://github.com/payloadcms/payload/issues/11264)) ([0d7cf3f](https://github.com/payloadcms/payload/commit/0d7cf3f))
* add missing jsdocs to version config ([#11258](https://github.com/payloadcms/payload/issues/11258)) ([ede7bd7](https://github.com/payloadcms/payload/commit/ede7bd7))
* dedicated custom components docs ([#10987](https://github.com/payloadcms/payload/issues/10987)) ([3229b9a](https://github.com/payloadcms/payload/commit/3229b9a))
* adds onInit to payload config options ([#11069](https://github.com/payloadcms/payload/issues/11069)) ([b646485](https://github.com/payloadcms/payload/commit/b646485))
* fix typo in readme ([#11196](https://github.com/payloadcms/payload/issues/11196)) ([35d845c](https://github.com/payloadcms/payload/commit/35d845c))
* remove file extension from import statement in useLexicalComposerContext ([#11188](https://github.com/payloadcms/payload/issues/11188)) ([480113a](https://github.com/payloadcms/payload/commit/480113a))
* fix importMap.baseDir path ([#11076](https://github.com/payloadcms/payload/issues/11076)) ([84c838c](https://github.com/payloadcms/payload/commit/84c838c))
* fix invalid link ([#11174](https://github.com/payloadcms/payload/issues/11174)) ([152a9b6](https://github.com/payloadcms/payload/commit/152a9b6))
* add inlineBlock converter example to the converters configuration in Converters.mdx ([#11158](https://github.com/payloadcms/payload/issues/11158)) ([24da30a](https://github.com/payloadcms/payload/commit/24da30a))
* filterAvailableLocales ([#11031](https://github.com/payloadcms/payload/issues/11031)) ([3131dba](https://github.com/payloadcms/payload/commit/3131dba))
* explains i18n language changing ([#10964](https://github.com/payloadcms/payload/issues/10964)) ([3098f35](https://github.com/payloadcms/payload/commit/3098f35))
* explains i18n installation ([#10963](https://github.com/payloadcms/payload/issues/10963)) ([d7dee22](https://github.com/payloadcms/payload/commit/d7dee22))
* fixes misc grammar and spelling errors ([#10996](https://github.com/payloadcms/payload/issues/10996)) ([c31bff7](https://github.com/payloadcms/payload/commit/c31bff7))
### 🧪 Tests
* blocks field helpers ([#11259](https://github.com/payloadcms/payload/issues/11259)) ([8166784](https://github.com/payloadcms/payload/commit/8166784))
* regenerate `payload-types.ts` for all test suites ([#11238](https://github.com/payloadcms/payload/issues/11238)) ([117949b](https://github.com/payloadcms/payload/commit/117949b))
* resolves `select` type errors ([#11235](https://github.com/payloadcms/payload/issues/11235)) ([e78500f](https://github.com/payloadcms/payload/commit/e78500f))
* resolves `locked-documents` type errors ([#11223](https://github.com/payloadcms/payload/issues/11223)) ([ee0ac7f](https://github.com/payloadcms/payload/commit/ee0ac7f))
* add types testing for select and joins ([#11138](https://github.com/payloadcms/payload/issues/11138)) ([4be410c](https://github.com/payloadcms/payload/commit/4be410c))
* **db-mongodb:** unit test assertion for relationship sanitization inside `blockReferences` ([#11195](https://github.com/payloadcms/payload/issues/11195)) ([2ae670e](https://github.com/payloadcms/payload/commit/2ae670e))
### 📝 Templates
* allow to pass `resource={null}` to `Media` component ([#11228](https://github.com/payloadcms/payload/issues/11228)) ([64d0217](https://github.com/payloadcms/payload/commit/64d0217))
* add new readme for quick start on vercel platform ([#11131](https://github.com/payloadcms/payload/issues/11131)) ([707e85e](https://github.com/payloadcms/payload/commit/707e85e))
* add packageManager to website template instead of engines.pnpm ([#11121](https://github.com/payloadcms/payload/issues/11121)) ([44be433](https://github.com/payloadcms/payload/commit/44be433))
* bump for v3.23.0 ([#11115](https://github.com/payloadcms/payload/issues/11115)) ([5d19958](https://github.com/payloadcms/payload/commit/5d19958))
### 🏡 Chores
* move dequal to devDependencies ([#11220](https://github.com/payloadcms/payload/issues/11220)) ([d126c2b](https://github.com/payloadcms/payload/commit/d126c2b))
* update codeowners ([#11151](https://github.com/payloadcms/payload/issues/11151)) ([706410e](https://github.com/payloadcms/payload/commit/706410e))
* typo in migrate:fresh command ([#11140](https://github.com/payloadcms/payload/issues/11140)) ([6bfa66c](https://github.com/payloadcms/payload/commit/6bfa66c))
* add typescript-strict-plugin to the payload package for incremental file-by-file migration [skip lint] ([#11133](https://github.com/payloadcms/payload/issues/11133)) ([6eee787](https://github.com/payloadcms/payload/commit/6eee787))
* tsconfig.base.json reset ([48471b7](https://github.com/payloadcms/payload/commit/48471b7))
* **deps:** bumps @monaco-editor/react to v4.7.0 to suppress react 19 warnings ([#11161](https://github.com/payloadcms/payload/issues/11161)) ([f4639c4](https://github.com/payloadcms/payload/commit/f4639c4))
* **richtext-lexical:** fix unchecked indexed access, make richtext-lexical full ts strict (part 5/5) ([#11132](https://github.com/payloadcms/payload/issues/11132)) ([09ada20](https://github.com/payloadcms/payload/commit/09ada20))
* **richtext-lexical:** improve types of UploadData ([#10982](https://github.com/payloadcms/payload/issues/10982)) ([002e921](https://github.com/payloadcms/payload/commit/002e921))
### 🤝 Contributors
- Paul (@paulpopus)
- Sasha (@r1tsuu)
- Dan Ribbens (@DanRibbens)
- Jarrod Flesch (@JarrodMFlesch)
- felismargarita (@felismargarita)
- Fredrik (@Livog)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Germán Jabloñski (@GermanJablo)
- Tib (@T1l3)
- Said Akhrarov (@akhrarovsaid)
- Patrik (@PatrikKozak)
- Jessica Chowdhury (@JessChowdhury)
- Riley Langbein (@rilrom)
- annes (@annesnour03)
- Max Malm (@benjick)
- lucasbajoua (@lucasbajoua)
- Kendell Joseph (@kendelljoseph)
- Adit (@ioExpander)
- Hulpoi George-Valentin (@GeorgeHulpoi)
- David Hu (@davidhu2000)
- Alejandro Martinez (@ja-martinez)
- Cody Stallings (@ydocsgnillats)
- Elliot DeNolf (@denolfe)