v3.26.0

payloadcms/payloadv3.26.0Mar 4, 2025by denolfe

AI Summary

Enhancements include the ability to cancel jobs, improved database adapters with `updateMany` support, and new helpers for rich text editors. The UI also received improvements for mobile navigation and bulk editing.

Key Highlights

  • Ability to cancel jobs in the queue.
  • Database adapters now support `updateMany` with limits.
  • New `htmlToLexical` and `editorConfigFactory` helpers.
  • Column state is now maintained in the URL.
  • Mobile navigation closes the sidebar automatically.
  • Improved bulk upload UX with edit many option.

New Features

  • Job cancellation capability
  • Maintains column state in URL
  • db.updateMany support with limits
  • htmlToLexical helper
  • editorConfigFactory helper
  • Close nav on small screens navigation
  • Improved hasMany TextField UX

Full Release Notes

## [v3.26.0](https://github.com/payloadcms/payload/compare/v3.25.0...v3.26.0) (2025-03-04)


### 🚀 Features

* ability to cancel jobs ([#11409](https://github.com/payloadcms/payload/issues/11409)) ([38131ed](https://github.com/payloadcms/payload/commit/38131ed))
* maintains column state in url ([#11387](https://github.com/payloadcms/payload/issues/11387)) ([3709950](https://github.com/payloadcms/payload/commit/3709950))
* **db-*:** support limit in db.updateMany ([#11488](https://github.com/payloadcms/payload/issues/11488)) ([6a3d58b](https://github.com/payloadcms/payload/commit/6a3d58b))
* **db-*:** add updateMany method to database adapter ([#11441](https://github.com/payloadcms/payload/issues/11441)) ([41c7413](https://github.com/payloadcms/payload/commit/41c7413))
* **richtext-lexical:** add htmlToLexical helper ([#11479](https://github.com/payloadcms/payload/issues/11479)) ([cd29978](https://github.com/payloadcms/payload/commit/cd29978))
* **richtext-lexical:** add editorConfigFactory helper to streamline getting the editor config ([#11467](https://github.com/payloadcms/payload/issues/11467)) ([e1b3084](https://github.com/payloadcms/payload/commit/e1b3084))
* **ui:** close the nav when the user navigates away on small screens ([#10932](https://github.com/payloadcms/payload/issues/10932)) ([9bb89b7](https://github.com/payloadcms/payload/commit/9bb89b7))

### 🐛 Bug Fixes

* avif images not converting to `upload.formatOptions` set file types ([#11505](https://github.com/payloadcms/payload/issues/11505)) ([c417e3a](https://github.com/payloadcms/payload/commit/c417e3a))
* excludes index files from migration files filtering ([#10722](https://github.com/payloadcms/payload/issues/10722)) ([c828e33](https://github.com/payloadcms/payload/commit/c828e33))
* response headers from authstrategies are now merged together, even if no user was returned ([#10883](https://github.com/payloadcms/payload/issues/10883)) ([45a7c8b](https://github.com/payloadcms/payload/commit/45a7c8b))
* ensures req.origin includes port on localhost ([#11454](https://github.com/payloadcms/payload/issues/11454)) ([a65289c](https://github.com/payloadcms/payload/commit/a65289c))
* ensure errors returned from tasks are properly logged ([#11443](https://github.com/payloadcms/payload/issues/11443)) ([d53f166](https://github.com/payloadcms/payload/commit/d53f166))
* incorrect value inside beforeValidate field hooks ([#11433](https://github.com/payloadcms/payload/issues/11433)) ([b3e7a9d](https://github.com/payloadcms/payload/commit/b3e7a9d))
* **examples:** ensure working multi-tenant example with pg ([#11501](https://github.com/payloadcms/payload/issues/11501)) ([4ddf965](https://github.com/payloadcms/payload/commit/4ddf965))
* **examples:** replace depreciated 'mergeHeaders' import in the MultiTenant example ([#11306](https://github.com/payloadcms/payload/issues/11306)) ([48e613b](https://github.com/payloadcms/payload/commit/48e613b))
* **next:** incorrect active state for partial matches of collection names in sidebar ([#11511](https://github.com/payloadcms/payload/issues/11511)) ([7d2480a](https://github.com/payloadcms/payload/commit/7d2480a))
* **next:** active nav item not clickable in edit view ([#11457](https://github.com/payloadcms/payload/issues/11457)) ([83b4548](https://github.com/payloadcms/payload/commit/83b4548))
* **next:** properly instantiates req.url on localhost ([#11455](https://github.com/payloadcms/payload/issues/11455)) ([67c4a20](https://github.com/payloadcms/payload/commit/67c4a20))
* **next:** email verification not working due to incorrect token url parsing ([#11439](https://github.com/payloadcms/payload/issues/11439)) ([f3844ee](https://github.com/payloadcms/payload/commit/f3844ee))
* **next:** disables active nav item ([#11434](https://github.com/payloadcms/payload/issues/11434)) ([c4bc0ae](https://github.com/payloadcms/payload/commit/c4bc0ae))
* **plugin-multi-tenant:** scope access constraint to admin collection ([#11430](https://github.com/payloadcms/payload/issues/11430)) ([9c25e7b](https://github.com/payloadcms/payload/commit/9c25e7b))
* **richtext-lexical:** ensure nested forms do not use form element ([#11462](https://github.com/payloadcms/payload/issues/11462)) ([6d8aca5](https://github.com/payloadcms/payload/commit/6d8aca5))
* **storage-*:** ensure client handler is always added to the import map, even if the plugin is disabled ([#11438](https://github.com/payloadcms/payload/issues/11438)) ([dfddee2](https://github.com/payloadcms/payload/commit/dfddee2))
* **storage-s3, storage-azure, storage-gcs:** client uploads when a collection has `prefix` configured ([#11436](https://github.com/payloadcms/payload/issues/11436)) ([fc42c40](https://github.com/payloadcms/payload/commit/fc42c40))
* **storage-uploadthing:** files are duplicated to the storage via client uploads ([#11518](https://github.com/payloadcms/payload/issues/11518)) ([f143d25](https://github.com/payloadcms/payload/commit/f143d25))
* **templates:** handle enableLink condition safely ([#10728](https://github.com/payloadcms/payload/issues/10728)) ([f7f5651](https://github.com/payloadcms/payload/commit/f7f5651))
* **ui:** uses query provider as single source of truth for where builder ([#11476](https://github.com/payloadcms/payload/issues/11476)) ([927078c](https://github.com/payloadcms/payload/commit/927078c))
* **ui:** remove stale thumbnails in bulkUpload after partial success ([#10651](https://github.com/payloadcms/payload/issues/10651)) ([e75d38c](https://github.com/payloadcms/payload/commit/e75d38c))
* **ui:** bulk editing users throws client-side exception ([#11461](https://github.com/payloadcms/payload/issues/11461)) ([6cbda9e](https://github.com/payloadcms/payload/commit/6cbda9e))
* **ui:** scope rah-static and progress-bar styles to payload-default layer ([#11442](https://github.com/payloadcms/payload/issues/11442)) ([bef98c8](https://github.com/payloadcms/payload/commit/bef98c8))
* **ui:** use full image url for upload previews instead of thumbnail url ([#11435](https://github.com/payloadcms/payload/issues/11435)) ([96d1d90](https://github.com/payloadcms/payload/commit/96d1d90))
* **ui:** locale selector in versions view should remove filtered locales ([#11447](https://github.com/payloadcms/payload/issues/11447)) ([9e97319](https://github.com/payloadcms/payload/commit/9e97319))
* **ui:** copyToLocale should not pass id in data, throws error in postgres ([#11402](https://github.com/payloadcms/payload/issues/11402)) ([428c133](https://github.com/payloadcms/payload/commit/428c133))
* **ui:** duplicate basePath in Logout Button Link ([#11432](https://github.com/payloadcms/payload/issues/11432)) ([f7b1cd9](https://github.com/payloadcms/payload/commit/f7b1cd9))
* **ui:** disable publish button if form is autosaving ([#11343](https://github.com/payloadcms/payload/issues/11343)) ([7118b64](https://github.com/payloadcms/payload/commit/7118b64))

### ⚡ Performance

* automatically add index on a relationship field when used as target for a join field ([#11463](https://github.com/payloadcms/payload/issues/11463)) ([90d3c65](https://github.com/payloadcms/payload/commit/90d3c65))
* disable returning of db operations that don't need the return value ([#11437](https://github.com/payloadcms/payload/issues/11437)) ([6ce5e8b](https://github.com/payloadcms/payload/commit/6ce5e8b))
* **db-*:** add option to disable returning modified documents in db methods ([#11393](https://github.com/payloadcms/payload/issues/11393)) ([c21dac1](https://github.com/payloadcms/payload/commit/c21dac1))
* **db-mongodb:** faster join field aggregation by replacing `mongoose-aggregate-paginate-v2` with a custom implementation ([#10936](https://github.com/payloadcms/payload/issues/10936)) ([d4d2bf4](https://github.com/payloadcms/payload/commit/d4d2bf4))
* **next:** reduce initReq calls from 3 to 1 per page load ([#11312](https://github.com/payloadcms/payload/issues/11312)) ([c8c578f](https://github.com/payloadcms/payload/commit/c8c578f))

### 📚 Documentation

* clarify that image resizing/cropping require `sharp` to be specified in payload config ([#11470](https://github.com/payloadcms/payload/issues/11470)) ([d57a786](https://github.com/payloadcms/payload/commit/d57a786))
* fix documentation "CheckListFeature" ([#11480](https://github.com/payloadcms/payload/issues/11480)) ([b9108b4](https://github.com/payloadcms/payload/commit/b9108b4))
* add few notes about DocumentDB and Azure Cosmos DB ([#11336](https://github.com/payloadcms/payload/issues/11336)) ([25e8799](https://github.com/payloadcms/payload/commit/25e8799))
* fix method useAllFormFields on admin/hooks.mdx ([#10935](https://github.com/payloadcms/payload/issues/10935)) ([8b5bc3d](https://github.com/payloadcms/payload/commit/8b5bc3d))
* use local API to upload a local file ([#10839](https://github.com/payloadcms/payload/issues/10839)) ([19b4ec2](https://github.com/payloadcms/payload/commit/19b4ec2))
* adds info and example for headersWithCors ([#11141](https://github.com/payloadcms/payload/issues/11141)) ([77395b6](https://github.com/payloadcms/payload/commit/77395b6))
* custom auth strategy requires the collection slug in return value ([#11327](https://github.com/payloadcms/payload/issues/11327)) ([fcaf591](https://github.com/payloadcms/payload/commit/fcaf591))
* broken ' char entity instead of ' in plugins/build-your-own ([#11363](https://github.com/payloadcms/payload/issues/11363)) ([206b4b9](https://github.com/payloadcms/payload/commit/206b4b9))
* replace HTML entity ' with literal apostrophe ([#11321](https://github.com/payloadcms/payload/issues/11321)) ([8b55e7b](https://github.com/payloadcms/payload/commit/8b55e7b))

### 📝 Templates

* fix vercel website template importmap error caused by missing import ([#11500](https://github.com/payloadcms/payload/issues/11500)) ([562acb7](https://github.com/payloadcms/payload/commit/562acb7))
* bump payload versions, upgrade next.js to 15.2.0, fix eslint errors ([#11486](https://github.com/payloadcms/payload/issues/11486)) ([f03d450](https://github.com/payloadcms/payload/commit/f03d450))
* improve naming of richtext component import, add 'payload-richtext' classname ([#11485](https://github.com/payloadcms/payload/issues/11485)) ([398d48a](https://github.com/payloadcms/payload/commit/398d48a))

### ⚙️ CI

* change custom github actions target back to es5 ([fd1a4f6](https://github.com/payloadcms/payload/commit/fd1a4f6))
* clarify version reporting in issue templates ([#11498](https://github.com/payloadcms/payload/issues/11498)) ([a15c38f](https://github.com/payloadcms/payload/commit/a15c38f))
* repro guide to use `create-payload-app@latest` instead of `@beta` ([#11451](https://github.com/payloadcms/payload/issues/11451)) ([e055565](https://github.com/payloadcms/payload/commit/e055565))

### 🏡 Chores

* add docker volume directories to gitignore ([#10902](https://github.com/payloadcms/payload/issues/10902)) ([fa8a2f8](https://github.com/payloadcms/payload/commit/fa8a2f8))
* temporarily disables flaky "should execute a custom script" test ([#11487](https://github.com/payloadcms/payload/issues/11487)) ([1929644](https://github.com/payloadcms/payload/commit/1929644))
* **db-mongodb:** tsconfig uses `strict: true` and `noUncheckedIndexedAccess: true` ([#11444](https://github.com/payloadcms/payload/issues/11444)) ([79a7b4a](https://github.com/payloadcms/payload/commit/79a7b4a))
* **deps:** bumps payload-admin-bar to v1.0.7 to suppress react 19 warnings ([#11499](https://github.com/payloadcms/payload/issues/11499)) ([bf4fa59](https://github.com/payloadcms/payload/commit/bf4fa59))
* **eslint:** speed up no-imports-from-self rule by ensuring cache is used ([#11483](https://github.com/payloadcms/payload/issues/11483)) ([3774544](https://github.com/payloadcms/payload/commit/3774544))
* **examples:** update multi-tenant example ([#11459](https://github.com/payloadcms/payload/issues/11459)) ([81e8a9d](https://github.com/payloadcms/payload/commit/81e8a9d))
* **plugin-search:** enable TypeScript strict mode ([#11508](https://github.com/payloadcms/payload/issues/11508)) ([efce154](https://github.com/payloadcms/payload/commit/efce154))
* **richtext-lexical:** export LexicalFieldAdminProps ([#11464](https://github.com/payloadcms/payload/issues/11464)) ([dda17f0](https://github.com/payloadcms/payload/commit/dda17f0))
* **richtext-lexical:** improve UploadData jsdocs ([#11292](https://github.com/payloadcms/payload/issues/11292)) ([4a1b749](https://github.com/payloadcms/payload/commit/4a1b749))
* **translations:** enable TypeScript strict mode ([#11494](https://github.com/payloadcms/payload/issues/11494)) ([a3fe607](https://github.com/payloadcms/payload/commit/a3fe607))

### 🤝 Contributors

- Sasha (@r1tsuu)
- Patrik (@PatrikKozak)
- Germán Jabloñski (@GermanJablo)
- Ondřej Nývlt (@onvlt)
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Jacob Fletcher (@jacobsfletch)
- Elliot DeNolf (@denolfe)
- Vincent Vu (@rubixvi)
- Alessio Gravili (@AlessioGr)
- Dmitrii Kuzmin (@ApplY3D)
- Said Akhrarov (@akhrarovsaid)
- Michael Bykovski (@bykof)
- Mike Newberry (@MikeNewXYZ)
- nomad-dev (@n0mad-d3v)
- Liège Arthur (@Thisisjuke)
- Violet Rosenzweig (@6TELOIV)
- Adrian Maj (@AdrianMaj)
- Jessica Chowdhury (@JessChowdhury)
- Martijn Luyckx (@martijnckx)
- Roy Barber (@roybarber)
- Philipp Meyer (@Quppi)