Releases: payloadcms/payload
v3.29.0
v3.29.0 (2025-03-20)
Important
This release upgrades the lexical dependency from 0.27.1
to 0.28.0
.
If you installed lexical manually, update it to 0.28.0
. Installing lexical manually is not recommended, as it may break between updates, and our re-exported versions should be used. See the yellow banner box for details.
If you still encounter richtext-lexical errors, do the following, in this order:
- Delete
node_modules
- Delete your lockfile (e.g.
pnpm-lock.json
) - Reinstall your dependencies (e.g.
pnpm install
)
🚀 Features
- pass i18n through field label and description functions (#11802) (31211e9)
- sort support for payload.update operation (#11769) (20e975b)
- add find to payloadDataLoader to cache local API queries (#11685) (975bbb7)
- distinct error for unverified email login (#11647) (fd99a30)
- aligns user _strategy returned from API (#11701) (8a51fe1)
- form state select (#11689) (9ea8a7a)
- add
forceSelect
collection / global config property (#11627) (5e3d07b) - added support for conditional tabs (#8720) (878dc54)
- db-*: support sort in db.updateMany (#11768) (e96d3c8)
- db-*: allow to thread
id
to create operation data without custom IDs (#11709) (f442d22) - db-postgres: add vector raw column type (#10422) (11d7487)
- plugin-form-builder: radio field (#11716) (427a5f1)
- richtext-lexical: support escaping markdown characters (#11784) (43cdccd)
- richtext-lexical: upgrade lexical from 0.27.2 to 0.28.0 (#11764) (240730f)
- richtext-lexical: allow disabling TabNode (#11656) (013b515)
- richtext-lexical: upgrade lexical from 0.27.1 to 0.27.2 (#11706) (adb42cb)
- ui: don't trigger preventLeave when opening a new tab (#11683) (398607f)
🐛 Bug Fixes
- add locale support to relationship filter options in WhereBuilder (#11783) (90f2491)
- add locale support to relationship filter options in WhereBuilder (#11783) (39ad31a)
- save button styles in edit-many modal (#11780) (7bc75e2)
- wrap login redirect routes with encodeURIComponent (#11778) (a02e476)
- email format validation with hyphens (#11761) (afe4432)
- improves email validation format rules (#11757) (875afcc)
- field appending on duplicate should ignore non string values (#11621) (74996fd)
- passes id and data to read access func when accessing upload URLs (#11684) (4a712e1)
- bulk upload validation when files are missing (#11744) (ea66e21)
- ensures
select
&radio
field option labels accept JSX elements (#11658) (3c92fbd) - add classes for picture tag in media component (#11605) (d66cdbd)
- db-mongodb: spread version schema options correctly (#11793) (1d25b16)
- plugin-cloud-storage: s3Storage client uploads working with more than 2 instances of the plugin (#11732) (bb39c87)
- plugin-import-export: export with draft true (#11762) (67a7358)
- plugin-import-export: translated preview labels (#11758) (e83f452)
- plugin-multi-tenant: ensures redirect route is correctly formatted (#11753) (06aa940)
- plugin-multi-tenant: missing key console message (#11693) (3d129e8)
- richtext-lexical: error in admin panel when block collapsed preference is not an array (#11771) (b857273)
- richtext-lexical: error in admin panel when setting a richtext field in
useAsTitle
(#11707) (ef527fe) - richtext-lexical: make the toolbar indent button consider the disabledNodes property on IndentFeature (#11739) (dd80f52)
- richtext-lexical: unchecked list items were rendered as checked in html converter (#11747) (3f23160)
- richtext-lexical: remove undefined rel and target attributes in link HTML converter (#11754) (aa3737c)
- ui: adding guard check for populate docs in upload field (#11800) (7d9d067)
- ui: bulk edit subfields (#10035) (b5fc8c6)
- ui: excess error css coming from group fields (#11700) (0fe922e)
- ui: fallback localization data was appearing in document (#11743) (ebfb0eb)
- ui: scheduled publish not displaying the timezone's label and timezones being reset when scheduling a publish, brisbane is now a default timezone (#11699) (e0bf505)
- ui: processing and initializing form does not disable standalone fields (#11714) (0b1a1b5)
⚡ Performance
- use direct db calls in job-queue system (#11489) (032c424)
- download only images and optimize image selection for upload list view, prioritize best-fit size (#11696) (6270d73)
- ui: implements select in bulk edit (#11708) (d8bfb22)
🛠 Refactors
- richtext-lexical: new plaintext and ...
v2.32.2
v3.28.1
v3.28.1 (2025-03-12)
🐛 Bug Fixes
- exclude plugin-cloud-storage, plugin-sentry and plugin-stripe from bundling optimization (#11673) (0fc70e0)
- incorrect height rounding when resizing images with sharp (#11634) (9d6583d)
- incorrect types for field Label, Description and Error server components (#11642) (88eeeaa)
- storage-s3: ensure s3 sockets are cleaned up (#11626) (3f6699f)
- translations: improve Swedish translations (#11654) (7be0219)
- ui: form state infinite render (#11665) (b81358c)
- ui: add RowLabelProvider context for blocks row labels (#11664) (4defa33)
- ui: prevent fieldErrorsToast from showing empty errors list (#11643) (b44603b)
📚 Documentation
🧪 Tests
📝 Templates
🏡 Chores
- fix typo (rename mognoose to mongoose) (#11653) (885f580)
- infer React context providers and prefer use (#11669) (355bd12)
- deps: bump next.js from 15.2.1 to 15.2.2 in monorepo (#11636) (9c53a62)
- plugin-multi-tenant: remove SELECT_ALL constant (#11660) (39d783a)
- release: eslint/3.28.0 (bc79608)
- translations: polish Swedish (#11353) (1da50f5)
🤝 Contributors
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Jarrod Flesch (@JarrodMFlesch)
- Elliot DeNolf (@denolfe)
- Said Akhrarov (@akhrarovsaid)
- Patrik (@PatrikKozak)
- Marcus Forsberg (@marcusforsberg)
- Jesper We (@JesperWe)
v3.28.0
v3.28.0 (2025-03-11)
Important
Compilation Performance Improvements
We’ve introduced a new opt-in flag that can cut Payload’s compile times in half during development. To enable it, add the following to your next.config.js:
const nextConfig = {
// ...
}
-export default withPayload(nextConfig)
+export default withPayload(nextConfig, { devBundleServerPackages: false })
In some rare cases, you may see unexpected behavior if your project relies on server-only Payload dependencies being bundled during development. Because of this, we’ve made the feature opt-in for existing projects.
Lexical Version Bump
This release upgrades the lexical dependency from 0.21.0
to 0.27.1
. Alongside table improvements and bug fixes, this version bump lays the groundwork for frequently requested features like color pickers.
If you installed lexical manually, update it to 0.27.1
. Installing lexical manually is not recommended, as it may break between updates, and our re-exported versions should be used. See the yellow banner box for details.
If you still encounter richtext-lexical errors, do the following, in this order:
- Delete
node_modules
- Delete your lockfile (e.g.
pnpm-lock.json
) - Reinstall your dependencies (e.g.
pnpm install
)
🚀 Features
- defaults to noindex nofollow (#11623) (5285518)
- threads path through field validate function (#11591) (3ede7ab)
- allow specification of which JWT extraction methods are supported, and in which order (#10794) (8f6d2e7)
- db-mongodb: strip keys from the data that don't exist in the schema from read results (#11558) (2ad035f)
- next: fully expose Next.js metadata (#11593) (397c1f1)
- richtext-lexical: allow disabling indentation for specific nodes (#11631) (eb09ce9)
- richtext-lexical: upgrade lexical from 0.21.0 to 0.27.1 (#11564) (557ac99)
- richtext-lexical: adds ability to disable auto link creation (#11563) (1e708bd)
- richtext-lexical: new HTML converter (#11370) (36921bd)
- ui: form state queues (#11579) (ac1e3cf)
- ui: adds disable copy to locale option to collection config (#11546) (657ad20)
🐛 Bug Fixes
- ensure only authenticated users can access the
payload-locked-documents
collection (#11624) (8f3d1bd) - upload imageSizes forces original file uploads to be compressed (#11612) (6d0924e)
- add missing auth property to new defaults function (#11561) (3af0468)
- db-mongodb: properly sanitize
updateVersion
read result (#11589) (e9afb36) - graphql: sanitize graphql field names for schema generation (#11556) (029cac3)
- plugin-import-export: plugin breaks
i18n
configuration (#11590) (5d65cb0) - translations: update translation placeholders to not be translated for lithuanian (#11622) (85f88a0)
- ui: adds fallback locale when defaultLocale is unavailable (#11614) (9ac7a3e)
- ui: stale list thumbnails when navigating (#11609) (fc5876a)
- ui: logic for showing copyToLocale button and adds test (#11584) (a53876d)
- ui: upload.displayPreview should affect all previews in the admin panel (#11496) (6f90d62)
- ui: apply consistent styling to custom & default block thumbnails (#11555) (8378654)
- ui: incorrect error states (#11574) (4811531)
⚡ Performance
- 50% faster compilation speed by skipping bundling of server-only packages during dev (#11594) (c7bb694)
🛠 Refactors
📚 Documentation
- fix documentation about custom i18n types (#11386) (38f61e9)
- document
payload migrate:create
flags (#11592) (3de1636)
📝 Templates
- fix issue with populateAuthors hook breaking live-preview on website template (#11608) (72efc84)
- allow displaying dynamic error message on forms created via Form Builder plugin (#11275) (814ced4)
⚙️ CI
- adjust paths filter for workflows, only look at main.yml (#11572) (9f7e8f4)
- add canary nightly cron, adjust lock and stale crons (259ea6a)
- use GITHUB_OUTPUT instead of set-output [skip ci] (1ad1de7)
- canary and internal releases [skip ci] (#11565) (1797782)
🏡 Chores
- set all licenses for internal tooling (30af889)
- db-postgres: enable TypeScript strict (#11560) (c8f01e3)
- deps: bump all eslint packages (#11629) (f2da72b)
- deps: bump next.js from 15.2.0 to 15.2.1 in monorepo (#11576) (b0da85d)
- deps: bumps @payloadcms/admin-bar in templates and examples (#11566) (7cef890)
- ui: code/json field full height should include any padding added (#11607) (051c1fe)
- ui: removes margin when row is empty and passes style from props (#11504) (6699844)
🤝 Contributors
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Patrik (@PatrikKozak)
- Rokas Puzonas (@RokasPuzonas)
- Jessica Chowdhury (@JessChowdhury)
- Dan Ribbens (@DanRibbens)
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Sasha (@r1tsuu)
- Md. Tajmirul Islam Akhand (@Tajmirul)
- Elliot DeNolf (@denolfe)
- James Mikrut (@jmikrut)
v3.27.0
v3.27.0 (2025-03-05)
🚀 Features
- payload admin bar (#3684) (9724067)
- allow hiding the blockName field visible in blocks' headers via admin.disableBlockName (#11301) (143b6e3)
- threads path through field condition functions (#11528) (ba30d76)
- compound indexes (#11512) (bacc0f0)
- allows overriding import map location (#11532) (f01cfbc)
- plugin-import-export initial work (#10795) (4f822a4)
- ui: improves field error toast messages (#11521) (2163b0f)
🐛 Bug Fixes
- safe auth strategy execution (#11515) (312aa63)
- beforeValidate deleting value when access returns false (#11549) (6939a83)
- collection config deep merge during sanitization causing unpredictable behavior (#11524) (5adb764)
- format admin url inside forgot pw email (#11509) (56dec13)
- next: admin panel fails compiling when fullySpecified is set in next config (#11531) (cc05937)
- richtext-lexical: fix bug in $createAutoLinkNode when the link is preceded by a textnode (#11551) (4ebe673)
- storage-*: client uploads with
disablePayloadAccessControl: true
(#11530) (5cc0e74) - storage-gcs: client uploads are enabled even if
clientUploads
is not set (#11527) (e36ab6a) - ui: views rendered in drawers can update step nav (#11548) (04b0468)
- ui: execute client upload handler only when file exists (#11538) (31e2179)
📚 Documentation
🧪 Tests
⚙️ CI
🏡 Chores
- cleanup generated configs (#11536) (8f203bb)
- indexes are not iterable, corrects
indexes
default value sanitization (#11534) (f0ea918) - add plugin-import-export to publishList release tool (#11535) (672dace)
🤝 Contributors
- Sasha (@r1tsuu)
- Jarrod Flesch (@JarrodMFlesch)
- Jacob Fletcher (@jacobsfletch)
- Paul (@paulpopus)
- Germán Jabloñski (@GermanJablo)
- Said Akhrarov (@akhrarovsaid)
- Patrik (@PatrikKozak)
- Dan Ribbens (@DanRibbens)
- Alessio Gravili (@AlessioGr)
- Elliot DeNolf (@denolfe)
v3.26.0
v3.26.0 (2025-03-04)
🚀 Features
- ability to cancel jobs (#11409) (38131ed)
- maintains column state in url (#11387) (3709950)
- db-*: support limit in db.updateMany (#11488) (6a3d58b)
- db-*: add updateMany method to database adapter (#11441) (41c7413)
- richtext-lexical: add htmlToLexical helper (#11479) (cd29978)
- richtext-lexical: add editorConfigFactory helper to streamline getting the editor config (#11467) (e1b3084)
- ui: close the nav when the user navigates away on small screens (#10932) (9bb89b7)
🐛 Bug Fixes
- avif images not converting to
upload.formatOptions
set file types (#11505) (c417e3a) - excludes index files from migration files filtering (#10722) (c828e33)
- response headers from authstrategies are now merged together, even if no user was returned (#10883) (45a7c8b)
- ensures req.origin includes port on localhost (#11454) (a65289c)
- ensure errors returned from tasks are properly logged (#11443) (d53f166)
- incorrect value inside beforeValidate field hooks (#11433) (b3e7a9d)
- examples: ensure working multi-tenant example with pg (#11501) (4ddf965)
- examples: replace depreciated 'mergeHeaders' import in the MultiTenant example (#11306) (48e613b)
- next: incorrect active state for partial matches of collection names in sidebar (#11511) (7d2480a)
- next: active nav item not clickable in edit view (#11457) (83b4548)
- next: properly instantiates req.url on localhost (#11455) (67c4a20)
- next: email verification not working due to incorrect token url parsing (#11439) (f3844ee)
- next: disables active nav item (#11434) (c4bc0ae)
- plugin-multi-tenant: scope access constraint to admin collection (#11430) (9c25e7b)
- richtext-lexical: ensure nested forms do not use form element (#11462) (6d8aca5)
- storage-*: ensure client handler is always added to the import map, even if the plugin is disabled (#11438) (dfddee2)
- storage-s3, storage-azure, storage-gcs: client uploads when a collection has
prefix
configured (#11436) (fc42c40) - storage-uploadthing: files are duplicated to the storage via client uploads (#11518) (f143d25)
- templates: handle enableLink condition safely (#10728) (f7f5651)
- ui: uses query provider as single source of truth for where builder (#11476) (927078c)
- ui: remove stale thumbnails in bulkUpload after partial success (#10651) (e75d38c)
- ui: bulk editing users throws client-side exception (#11461) (6cbda9e)
- ui: scope rah-static and progress-bar styles to payload-default layer (#11442) (bef98c8)
- ui: use full image url for upload previews instead of thumbnail url (#11435) (96d1d90)
- ui: locale selector in versions view should remove filtered locales (#11447) (9e97319)
- ui: copyToLocale should not pass id in data, throws error in postgres (#11402) (428c133)
- ui: duplicate basePath in Logout Button Link (#11432) (f7b1cd9)
- ui: disable publish button if form is autosaving (#11343) (7118b64)
⚡ Performance
- automatically add index on a relationship field when used as target for a join field (#11463) (90d3c65)
- disable returning of db operations that don't need the return value (#11437) (6ce5e8b)
- db-*: add option to disable returning modified documents in db methods (#11393) (c21dac1)
- db-mongodb: faster join field aggregation by replacing
mongoose-aggregate-paginate-v2
with a custom implementation (#10936) (d4d2bf4) - next: reduce initReq calls from 3 to 1 per page load (#11312) (c8c578f)
📚 Documentation
- clarify that image resizing/cropping require
sharp
to be specified in payload config (#11470) (d57a786) - fix documentation "CheckListFeature" (#11480) (b9108b4)
- add few notes about DocumentDB and Azure Cosmos DB (#11336) (25e8799)
- fix method useAllFormFields on admin/hooks.mdx (#10935) (8b5bc3d)
- use local API to upload a local file (#10839) (19b4ec2)
- adds info and example for headersWithCors (#11141) (77395b6)
- custom auth strategy requires the collection slug in return value (#11327) (fcaf591)
- broken ' char entity instead of ' in plugins/build-your-own (#11363) (206b4b9)
- replace HTML entity ' with literal apostrophe (#11321) (8b55e7b)
📝 Templates
v3.25.0
v3.25.0 (2025-02-27)
🚀 Features
- storage-*: large file uploads on Vercel (#11382) (b540da5)
- allow to count related docs for join fields (#11395) (3436fb1)
- add support for not_like operation (#11326) (b014416)
- plugin-multi-tenant: allow customization of selector label (#11418) (958e195)
- plugin-multi-tenant: filter users list and tenants lists (#11417) (45cee23)
- plugin-multi-tenant: export useTenantSelection hook for public usage (#11364) (f477e0e)
- richtext-lexical: allows client features to access components added to the import map by the server feature (#11414) (7e713a4)
- richtext-lexical: support single-quoted jsx property values in mdx converter (#11290) (563c21b)
- ui: threads row data through list drawer onSelect callback (#11339) (d766b19)
- ui: adds support for block groups (#11239) (22f61ad)
🐛 Bug Fixes
- ensure custom IDs are returned to the result when
select
query exists (#11400) (526e535) - ensure generated types for config.blocks are not undefined if no blocks defined (#11377) (820a6ec)
- safely access config.blocks during type generation (#11320) (3ffc268)
- working
bin
configuration for custom scripts (#11294) (f779e48) - db transaction errors caused by checkDocumentLockStatus (#11287) (9728d80)
- db-mongodb:
hasNextPage
with polymorphic joins (#11394) (6b6c289) - deps: ensure Next.js 15.2.0 compatibility, upgrade nextjs and @types/react versions in monorepo (#11419) (2a3682f)
- next: nested relationship filter options (#11375) (0a1af45)
- next: use correct hmr url if assetPrefix is set in next config (#10859) (1725af5)
- next: uses assetPrefix from next config in webpack-hmr URL (#11229) (26163a7)
- plugin-multi-tenant: user access, thread field names through (#11365) (3778180)
- plugin-nested-docs: fallback to empty string if
useAsTitle
field is undefined (#11338) (09ca514) - plugin-nested-docs: corrects data shape of breadcrumbs returned in hooks (#10866) (d92c000)
- richtext-lexical: incorrect UploadData types (#11288) (2612756)
- ui: skip bulk upload thumbnail generation on non-image files (#11378) (81fd42e)
- ui: allow json fields to be updated externally (#11371) (36e152d)
- ui: bulk upload
DiscardWithoutSaving
modal styles (#11381) (7bb1c9d) - ui: object type field labels not displaying in search filter (#11366) (f1b005c)
- ui: custom block labels stale when reordering blocks (#11367) (2477fc6)
- ui: link element triggering clicks twice (#11362) (f9121c1)
- ui: only show bulk select all when count is less than total (#11329) (a8bec9a)
- ui: confirmation modal should build off of drawerDepth, instead … (#11305) (460d50b)
⚡ Performance
- remove deep copy of the entire sanitized entity config in
configToJSONSchema
(#11342) (a13d4fe) - add limit: 1 and pagination: false to various payload queries (#11319) (0058f82)
- ensure fetching and updating preferences doesn't cause transaction errors and is done correctly (#11311) (845c647)
- db-mongodb: remove
JSON.parse(JSON.stringify)
copying of results (#11293) (1dc748d) - drizzle: use faster, direct db query for getting id to update in updateOne (#11391) (e4712a8)
- next: reduce getNavPrefs calls from 3 to 1 per page load (#11318) (c7c5018)
- next: avoid unnecessary upsertPreferences call on page load (#11302) (76bd05c)
🛠 Refactors
- simplify collection, global and auth operations (#11374) (4410a49)
- simplify running field hooks (#11372) (dc9e8fa)
- ui: moves bulk edit controls (#11332) (f31568c)
📚 Documentation
- adds Reserved Field Names section to migration guide (#11308) (bcc6857)
- improve lexical code block documentation (#11416) (67b7a73)
- add lexical docs for configuring jsx converters for internal links and overriding them (#11415) (88a2841)
- add info about changes in localized fields to v2 -> v3 migration guide (#11244) (d326086)
- fix links to react hooks (#11344) (4224c68)
- update outdated docs/rich-text/overview feature names (#11324) (6ff380c)
- fix formatting in field hooks table (#11300) (af92c15)
- removes outdated
rateLimit
option (#11291) (c517e7e) - fix invalid jsx in banner block (#11289) (b1e9aa5)
🧪 ...
v3.24.0
v3.24.0 (2025-02-19)
🚀 Features
- add support for interfaceName on radio and select fields to create reusable top level types (#11277) (acead10)
- join field across many collections (#10919) (6d36a28)
- add
page
query parameter forjoins
(#10998) (847d8d8) - view component types (#11126) (b80010b)
- route transitions (#9275) (3f550bc)
- add siblingFields arg to field hooks (#11117) (155f9f8)
- richtext-lexical: export INSERT_BLOCK_COMMAND and INSERT_INLINE_BLOCK_COMMAND (#11193) (dc36572)
- translations: add support for lithuanian (#11243) (8bbe7bc)
- ui: enable specific css selectors on the localizer per locale (80b33ad)
- ui: confirmation modal (#11271) (bd8ced1)
- ui: adds admin.components.listMenuItems option (#11230) (8a2b712)
- ui: add
hideFileInputOnCreate
andhideRemoveFile
to collectionupload
config (#11217) (daaaa5f) - ui: refines progress bar animation curve (#11167) (16d75a7)
🐛 Bug Fixes
- versions not loading properly (#11256) (0651ae0)
- db transaction errors caused by checkDocumentLockStatus (#11273) (9b8f8d7)
- localized fields within block references were not handled properly if any parent is localized (#11207) (e6fea1d)
- upload and auth endpoints are mounted for all collections (#11231) (749962a)
- populate is ignored for nested relationships (#11227) (938472b)
- ensure leavesFirst option works correctly in traverseFields utility (#11219) (6b9d81a)
- join field does not show validation error (#11170) (dd28959)
- db-mongodb: properly handle document notfound cases for update and delete operations (#11267) (7922d66)
- db-mongodb: remove duplicative indexing of timestamps (#11028) (12f51ba)
- db-postgres: querying other collections via relationships inside blocks (#11255) (88548fc)
- db-postgres: ensure
countDistinct
works correctly and achieve better performance when the query has table joins (#11208) (513ba63) - next: imports toast from @payloadcms/ui (#11279) (cd48904)
- next: document header padding on tablet sized screens (#11192) (70db44f)
- next: pre-flight OPTIONS request errors from the graphql endpoint (#11103) (ececa65)
- plugin-multi-tenant: corrects default value for tenantsArrayTenantFieldName (#11189) (b65ae07)
- plugin-seo: add missing supported languages (#11254) (74ce889)
- richtext-lexical: add container div to table element to allow horizontal scroll in HTML and JSX converters (#11119) (9068bda)
- richtext-lexical: reliably install exact lexical version by removing it from peerDeps (#11122) (2056e9b)
- richtext-lexical: unindent button in toolbar is never active (#11089) (7a400a7)
- ui: minor issues with tabs and publish buttons when in RTL (#11282) (e83318b)
- ui: turbopack with the latest next.js canary [skip lint] (#11280) (009e908)
- ui: disabledLocalStrategy.enableFields missing email/username fields (#11232) (9fc1cd0)
- ui: unsaved changes allows for scheduled publish missing changes (#11001) (618624e)
- ui: timezone issue related to date only fields in Pacific timezones (#11203) (8b0ae90)
- ui: database errors when running autosave and ensure autosave doesn't run unnecessarily (#11270) (1328522)
- ui: do not pass req in handleFormStateLocking (#11269) (7f5aaad)
- ui: issues with prevent leave and autosave when the form is submitted but invalid (#11233) (06debf5)
- ui: allow selectinputs to reset to their initial values if theres no provided value (#11252) (1c4eba4)
- ui: selection status not updating after toggleAll in useSelection hook (#11218) (5817b81)
- ui: properly handle singular and plural bulk edit labels (#11198) (779f511)
- ui: hide edit button on deleted relationship options (#11005) (cba5c7b)
- ui: respect locale in buildTableState (#11147) (077fb3a)
- ui: hide array field "add" button if
admin.readOnly: true
is set (#11184) (b1734b0) - ui: unable to use browser back navigation after visiting list view (#11172) (0a3820a)
- ui: url encode imageCacheTag for media on dashboard (#11164) (d47c980)
- ui: json schema (#11123) (7f124cf)
- ui: prevent omitting fileSize from non-images (#11146) (6901b26)
- ui: adds delay to progress bar for fast networks (#11157) (de68ef4)
- ui: safe call within useEffect tea...
v3.23.0
v3.23.0 (2025-02-11)
🚀 Features
- adds new jobs.shouldAutoRun property (#11092) (5dadcce)
- add timezone support on date fields (#10896) (430ebd4)
- richtext-lexical: expose client config to client features (#11054) (d7a7fbf)
- ui: add timezone support to scheduled publish (#11090) (c18c58e)
🐛 Bug Fixes
- set initialValues alongside values during onSuccess (#10825) (fde526e)
- unhelpful "cannot overwrite model once compiled" errors swallowing actual error (#11057) (6a99677)
- error when passing functions to array or block fields labels property (#11056) (6d48cf9)
- db-mongodb: ensures same level operators are respected (#11087) (d2fe9b0)
- db-postgres: incorrect pagination results when querying hasMany relationships multiple times (#11096) (98fec35)
- next: allows relative live preview urls (#11083) (91a0f90)
- payload-cloud: handle socket closures (#11113) (da77f99)
- richtext-lexical: improve keyboard navigation on DecoratorNodes (#11022) (fa18923)
- richtext-lexical: toggling between internal and custom links does not update fields (#11074) (9fb7160)
- richtext-lexical: fixed the positioning of the button to add columns or rows in tables (#11050) (886bd94)
- storage-s3: sockets not closing (#11015) (95ec575)
- ui: relationship filter renders stale values when changing fields (#11080) (da6511e)
- ui: incorrectly incrementing version counts if maxPerDoc is set to 0 (#11097) (3616818)
📚 Documentation
- update custom endpoints docs,
handler
does not accept array of functions anymore (#11110) (1f3ccb8) - adds options table to payload-wide upload options (#10904) (d6a03ee)
- fixing 3 dead internal links (#11100) (3f80c59)
- adds
usePayloadAPI
hook to React Hooks documentation (#11079) (d56de79) - fix typo in
BlockquoteFeature
name (#11078) (87ba7f7) - typo in jobs queue workflows (#11063) (dc56acb)
- plugin-multi-tenant: update tenantsArrayField config options (#11045) (ac6f4e2)
📝 Templates
🏡 Chores
- updates CODEOWNERS (#11088) (3415ba8)
- ensure jest respects PAYLOAD_DATABASE env variable (#11065) (c6c65ac)
- richtext-lexical: add test converage for internal links (#11075) (b15a7e3)
- richtext-lexical: fix unchecked indexed access (part 4) (#11048) (5a53854)
🤝 Contributors
- Elliot DeNolf (@denolfe)
- Paul (@paulpopus)
- Jacob Fletcher (@jacobsfletch)
- Sasha (@r1tsuu)
- Said Akhrarov (@akhrarovsaid)
- Jonathan Bredo (@Bredo)
- Jarrod Flesch (@JarrodMFlesch)
- James Mikrut (@jmikrut)
- Markus (@Ma-Kas)
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Patrik (@PatrikKozak)
- Nathan Clevenger (@nathanclevenger)
- Boyan Bratvanov (@bratvanov)
v3.22.0
v3.22.0 (2025-02-07)
🚀 Features
- ui: adds filtering config option and implementation for filtering a… (#11007) (a63a3d0)
- ui: improve hasMany TextField UX (#10976) (d8cfdc7)
🐛 Bug Fixes
- db-postgres: ensure globals have
createdAt
,updatedAt
andglobalType
fields (#10938) (57143b3) - db-postgres: select
hasMany: true
with autosave doesn't work properly (#11012) (3ad56cd) - next: viewing modified-only diff view containing localized arrays throws error (#11006) (09721d4)
- plugin-multi-tenant: correctly set doc default value on load (#11018) (f25acb8)
- richtext-lexical: duplicative error paths in validation (#11025) (2b76a04)
- richtext-lexical: ensure sub-fields have access to full document data in form state (#9869) (ae32c55)
- ui: removing final condition closes where builder (#11032) (b820a75)
- ui: clearing value from relationship filter leaves stale query (#11023) (7a73265)
- ui: relationship filter clearing on blur (#11021) (8940726)
- ui: improve useIgnoredEffect hook (#10961) (8ed4104)
- ui: allow schedule publish to be accessed without changes (#10999) (bdbb999)
- ui: apply cacheTags upload config property to other admin panel image components (#10801) (e29ac52)
🛠 Refactors
🧪 Tests
🏡 Chores
pnpm dev
defaults to the _community test suite (#11044) (49d94d5)- find and use an available port in tests (#11043) (feea444)
- fix eslint wasn't running in test dir (#11036) (257cad7)
- fix flaky lexical test (#11035) (04dad9d)
- deflake joins e2e tests (#11034) (098fe10)
- fix lexical tests that are failing on main branch (#11024) (6631869)
- cpa: add ts strict mode (#10914) (824f9a7)
- plugin-multi-tenant: add better defaults for imported components (#11030) (ec593b4)
- richtext-lexical: fix unchecked indexed access (part 3) (#11014) (5f58daf)
- richtext-lexical: fix unchecked indexed acess in lexical blocks feature (#11013) (e413e1d)
🤝 Contributors
- Dan Ribbens (@DanRibbens)
- Jacob Fletcher (@jacobsfletch)
- Germán Jabloñski (@GermanJablo)
- Alessio Gravili (@AlessioGr)
- Jessica Chowdhury (@JessChowdhury)
- Jarrod Flesch (@JarrodMFlesch)
- Sasha (@r1tsuu)
- Simon Vreman (@SimonVreman)
- Tobias Odendahl (@tak-amboss)