Releases: payloadcms/payload
v3.0.0-beta.110
v3.0.0-beta.110 (2024-09-30)
🚀 Features
- join field on upload fields (#8379) (3f375cc)
- richtext-lexical: export $createInlineBlockNode, $isInlineBlockNode and InlineBlockNode (#8480) (163f3c0)
- translations: add danish translations (#7809) (22f120d)
- richtext-lexical: upgrade lexical from 0.17.0 to 0.18.0, make tables more reliable (#8444) (8b44676)
- templates: add search functionality to the website template (#8454) (fb60344)
- payload, ui: add admin.allowEdit relationship field (#8398) (17e0547)
🐛 Bug Fixes
- db-*: make db.begintransactions required (#8419) (3847428)
- db-mongodb: duplicate versions with parent string ids (#8487) (7b6a760)
- draft status access control checks (#8486) (0c10045)
- reset password link extra slash and thread admin.routes.reset property (#8448) (e765a5e)
- sorting by id incorrectly orders by version.id (#8442) (4241811)
- db-mongodb: properly filters out
number
field values with theexists
operator filter (#8416) (8110cb9) - ui: RTL not applying for localised textarea fields (#8474) (e5ca476)
- drizzle: hasMany / poly relationships nested to localized fields / nested blocks to localized fields (#8456) (613d3b0)
- richtext-lexical: match the indentation spacing of paragraphs and lists (#8437) (f50174f)
⚠️ BREAKING CHANGES
-
richtext-lexical: upgrade lexical from 0.17.0 to 0.18.0, make tables more reliable (#8444) (8b44676)
This upgrades lexical from 0.17.0 to 0.18.0. If you have
any lexical packages installed in your project, please update them
accordingly. Additionally, if you depend on the lexical APIs, please
consult their changelog, as lexical may introduce breaking changes:
https://github.com/facebook/lexical/releases/tag/v0.18.0
🤝 Contributors
- Dan Ribbens (@DanRibbens)
- Sasha (@r1tsuu)
- James Mikrut (@jmikrut)
- Ante (@azivkovi)
- Alessio Gravili (@AlessioGr)
- Patrik (@PatrikKozak)
- Paul (@paulpopus)
- Mike Bailey (@mykz)
- Germán Jabloñski (@GermanJablo)
v2.30.0
v3.0.0-beta.109
v3.0.0-beta.109 (2024-09-26)
🚀 Features
- preselected theme (#8354) (84d2026)
- drizzle: customize schema with before / after init hooks (#8196) (8acbda0)
- add upsert to database interface and adapters (#8397) (82ba193)
- improve afterError hook to accept array of functions, change to object args (#8389) (28ea0c5)
- templates update (#8391) (e72f12a)
🐛 Bug Fixes
- db-mongodb: docs duplicated in list view with drafts (#8435) (adc9bb5)
- richtext-lexical: add max-width to tables (temporary fix for overflow). (#8431) (a09811f)
- ui: autosave and preventLeaveWithoutSaving interfering with fetching form-state reliably (#8434) (c73f6c7)
- ui: number field not being able to clear out the field's value (#8425) (5c2e39e)
- ui: align to the top fields inside row field (#8421) (4b0351f)
- ui: versions in documentInfo and status component reverse latest true changes (#8417) (95231da)
- db-mongodb: add req to migration templates for transactions (#8407) (b10f61c)
- make field property of FieldLabel optional and partial (#8409) (87360f2)
- plugin-seo: titles being displayed twice (#8310) (8fadc33)
- drizzle: migrate args no longer partial payload request (#8375) (c6519ab)
- client function error on forgot password view (#8374) (06ea67a)
- drizzle: use alias for localized field sorting (#8396) (775e6e4)
- lock documents using the
live-preview
view (#8343) (57f93c9) - ui: published, draft and changed labels should now be correctly displayed (#8382) (a37abd1)
- db-vercel-postgres: include needed pg dependency (#8393) (6da4f06)
- templates: proper migration file import source for vercel-postgres (#8394) (50da212)
- safely access user in auth operations (#8381) (a80f5b6)
- db-mongodb: db.find default limit to 0 (#8376) (dc69e2c)
- richtext-lexical: regression in lexical blocks (#8378) (19e2f10)
- richtext-lexical: table dropdown menu dark mode color (#8368) (bd41b4d)
- optional sortOptions type for SingleRelationshipFieldClient (#8340) (fbc395b)
- next: set the user data after first user registration (#8360) (30eb1d5)
- drizzle: sanitize query value uuid / number id NaN (#8369) (dedcff0)
- drizzle: array/relationship/select hasMany in localized field (#8355) (338c93a)
- cannot use join on relationships in unnamed fields (#8359) (c696728)
- ui: inconsistent arrow dropdown on buttons, popover missing caret (#8341) (3583c45)
⚠️ BREAKING CHANGES
-
improve afterError hook to accept array of functions, change to object args (#8389) (28ea0c5)
Changes the
afterError
hook structure, adds tests / more docs.
Ensures that thereq.responseHeaders
property is respected in the
error handler.afterError
now accepts an array of functions instead of a single
function:- afterError: () => {...} + afterError: [() => {...}]
The args are changed to accept an object with the following properties:
Argument Description error
The error that occurred. context
Custom context passed between Hooks. More details. graphqlResult
The GraphQL result object, available if the hook is executed within a GraphQL context. req
The Request object containing the currently authenticated user
collection
The Collection in which this Hook is running against. This will be undefined
if the hook is executed from a non-collection endpoint or GraphQL.result
The formatted error result object, available if the hook is executed from a REST context.
🤝 Contributors
- Dan Ribbens (@DanRibbens)
- Germán Jabloñski (@GermanJablo)
- Paul (@paulpopus)
- Riley Pearce (@rilrom)
- Jessica Chowdhury (@JessChowdhury)
- Sasha (@r1tsuu)
- Patrik (@PatrikKozak)
- Elliot DeNolf (@denolfe)
- Alessio Gravili (@AlessioGr)
- Tylan Davis (@tylandavis)
v2.29.0
2.29.0 (2024-09-25)
Features
Bug Fixes
- treat empty strings as null / undefined for
exists
queries (#8336) (31d0b30), closes #7714 - db-postgres: localized items in arrays with versions (#8334) (c86526b)
- db-postgres: querying on array within a relationship field (#8153) (170ea5b)
- db-postgres: sanitize tab/group path for table name (#8010) (ba7a043)
v3.0.0-beta.108
v3.0.0-beta.108 (2024-09-20)
🚀 Features
- richtext-lexical: dropdown menu disabled status (#8177) (7d2022f)
- upgrade next, react and react-dom, move react/next dependency checker from payload to next package (#8323) (1afcaa3)
- join field (#7518) (6ef2bde)
- adds
overrideLock
flag toupdate
&delete
operations (#8294) (9c3f863) - ui: hides lock icon when locked by current user (#8309) (879f690)
- ui: threads collectionSlugs through useListDrawer (#8292) (405a6c3)
- storage-vercel-blob: threads cacheControlMaxAge through static handler (#8065) (a94e40f)
- ui: useTableColumns add abillity to reset columns state (#8296) (72995fc)
- plugin-form-builder: new wildcards {{}} and {{:table}} are now supported in email bodies and emails fall back to a global configuration value in addition to base email configuration (#8271) (9821aeb)
- lock documents while being edited (#7970) (f98d032)
- plugin-seo: add vietnamese translation (#8179) (89601f1)
- add virtual property to the fields config (#7621) (bf48af4)
- add publish specific locale (#7669) (b7a0b15)
⚡ Performance
- disable router cache refresh that occurs after every page transition or page load (#8318) (0cdd5b6)
- optimizes admin ui loading by using react cache to memoize req / auth (#8315) (c6a7ad2)
🐛 Bug Fixes
- ui: hide dot menu in read-only mode for locked documents (#8342) (493b121)
- db-mongodb: treat empty strings as null / undefined for exists queries (#8337) (e916512)
- ui: client side error when passing labels as functions for custom view tabs (#8339) (1f7d47a)
- add logger to serverOnlyConfigProperties (#8325) (afb8805)
- plugin-form-builder: emails array field has read access by authenticated users only by default now (#8338) (0789f4d)
- drizzle: equals polymorphic querying with object notation (#8316) (265d7fa)
- drizzle: nested arrays with localized items and versions (#8331) (2596b85)
- ui: adjust list view table alignment (#8330) (b51d2bc)
- only add snapshot to versions query when localization is enabled (#8293) (2d29b7e)
- findByID adjust type to null if disableErrors: true is passed (#8282) (37e1adf)
- richtext-slate: fix issue with richText field cell not being a link when used as a useAsTitle (#8272) (dd96f9a)
- templates: optional chaining bug (#8268) (4d54cc6)
- ui: code field adjusts its height to its content dynamically. Scrolling over the container is not prevented. (#8209) (f011e4f)
- strongly types field validation args (#8263) (c0aad3c)
- ui: mobile menu button sizing (#8264) (110fda7)
- drizzle: in query on polymorphic relations across ID types (#8240) (31ffc57)
- ui: filter collection crashes when navigating away (#8260) (9035467)
- properly infers field validation args (#8243) (029eba5)
- richtext-lexical: dropdown item disabled status (#8159) (67cd3b3)
- ui: pass label as prop through to the textarea input (#8248) (a06458d)
- ui: field alignment when labels overflow inside rows (#8246) (149b7cb)
- ui: draft docs are now correctly provided in preview URL (#8245) (ccd0b1e)
- error on forgot-password route (#8244) (d2eafdf)
- ui: nav button height being stretched and navWrapper border on RTL (#8242) (a68f0ce)
- drizzle: optimize count querying when no joins (#7749) (8520fd9)
- plugin-seo: threads entity slug and document config through generation fn args (#8238) (aee76cb)
- drizzle: localized fields uniqueness per locale (#8230) (b7db53c)
⚠️ BREAKING CHANGES
-
richtext-lexical: dropdown menu disabled status (#8177) (7d2022f)
ToolbarDropdown no longer receives
groupKey={group.key}
anditems={group.items}
as props, but instead
group={group}
-
plugin-form-builder: emails array field has read access by authenticated users only by default now (#8338) (0789f4d)
-
upgrade next, react and react-dom, move react/next dependency checker from payload to next package (#8323) (1afcaa3)
- Upgrades minimum supported @types/react version from
npm:[email protected] to npm:[email protected] - Upgrades minimum supported @types/react-dom version from
npm:[email protected] to npm:[email protected] - Upgrades minimum supported react and react-dom version from
19.0.0-rc-06d0b89e-20240801 to 19.0.0-rc-5dcb0097-20240918 - Upgrades minimum supported Next.js version from 15.0.0-canary.104 to
15.0.0-canary.160
- Upgrades minimum supported @types/react version from
-
- Adds a new "join" field type to Payload and is supported by all database adapters
- The UI uses a table view for the new field
db-mongodb
changes relationships to be stored as ObjectIDs instead of strings (for now querying works using both types internally to the DB so no data migration should be necessary unless you're querying directly, see breaking changes for details- Adds a reusable traverseFields utility to Payload...
v3.0.0-beta.107
v3.0.0-beta.107 (2024-09-16)
🚀 Features
- add new option for admin.components.header (#7647) (3b59416)
- cpa: add node engines (#8234) (7c8272b)
⚡ Performance
🐛 Bug Fixes
- duplication with localized arrays in unnamed tabs (#8236) (c460868)
- drizzle: polymorphic querying of different ID types (#8191) (a0a1e20)
🤝 Contributors
- James Mikrut (@jmikrut)
- Sasha (@r1tsuu)
- Jessica Chowdhury (@JessChowdhury)
- Elliot DeNolf (@denolfe)
- Jacob Fletcher (@jacobsfletch)
- Alessio Gravili (@AlessioGr)
v3.0.0-beta.106
v3.0.0-beta.105
v3.0.0-beta.105 (2024-09-15)
⚡ Performance
- upgrade ajv, and upgrade typescript to 5.6.2 in monorepo (#8204) (fbc28b0)
- upgrade jsonwebtoken from 9.0.1 to 9.0.2 (#8202) (ec624bd)
🐛 Bug Fixes
- plugin-seo: removes duplicative json translations (#8206) (64f2395)
- error when viewing versions if plural label is set as a function (#8213) (ff1c1e0)
- richtext-lexical: default Cell not being a link when used as the primary column in lists (#8212) (d0bb1c9)
- ui: field type being overridden when providing a Cell component (#8211) (1608150)
- db-postgres: preserve parent createdAt when creating a new version (#8160) (43a9109)
- richtext-lexical: unnecessary
isEnabled
computations on toolbar items (#8176) (334f940) - graphql: id field non null (#8169) (db29e1e)
- ui: bulk selection and useSelection hook losing types of the IDs its returning (#8194) (d28d40c)
- ui: properly extracts label from field in FieldLabel component (#8190) (a6f13f7)
- requires client field prop in server field components (#8188) (c28618b)
⚠️ BREAKING CHANGES
This PR changes the type of selected
returned from the useSelection
hook from the SelectionProvider
from an object to a Map.
This fixes a bug where in some situations we lose the type of the ID
which can break data entry when using postgres, due to keys being cast
to strings inside of objects which doesn't happen when using a Map.
This PR also fixes a CSS bug with the checkbox when it should be
partially selected.
// before
selected: Record<number | string, boolean>
// after
selected: Map<number | string, boolean>
This means you now need to read the data differently than before.
// before
Object.entries(selected).forEach(([key, value]) => {
// do something
})
// after
for (const [key, value] of selected) {
// do something
}
🤝 Contributors
- Jacob Fletcher (@jacobsfletch)
- Paul (@paulpopus)
- Alessio Gravili (@AlessioGr)
- Sasha (@r1tsuu)
- Germán Jabloñski (@GermanJablo)
- Jarrod Flesch (@JarrodMFlesch)
- Elliot DeNolf (@denolfe)
- Victor Winberg (@VictorWinberg)
- Florian Quiblier (@fofoy)
- Christoffer Hasselberg (@stofolus)
v3.0.0-beta.104
v3.0.0-beta.104 (2024-09-12)
🚀 Features
- passes client field config to server components (#8166) (8b30701)
- document drawer controls (#7679) (51bc8b4)
- drizzle: add support for in and not_in operators on json field (#8148) (ec37307)
🐛 Bug Fixes
- ui: properly retrieves singular labels for array field rows (#8171) (6e94884)
- templates: website media staticDir to public folder (#8175) (9561aa3)
- properly names BlocksField and related types (#8174) (465e47a)
- cpa: match vercel postgres db type with package name (#8141) (043bf95)
- ui: fix row width bug (#7940) (cd734b0)
- ui: set max-width for row (efe17ff)
⚠️ BREAKING CHANGES
-
properly names
BlocksField
and related types (#8174) (465e47a)The
BlockField
type is not representative of the underlying "blocks"
field type, which is plural, i.e.BlocksField
. This is a semantic
change that will better align the type with the field.Breaking Changes
Types related to the
blocks
field have change names. If you were using
theBlockField
or related types in your own applications, simply
change the import name to be plural and instead of singular.Old (singular):
import type { BlockField, BlockFieldClient, BlockFieldValidation, BlockFieldDescriptionClientComponent, BlockFieldDescriptionServerComponent, BlockFieldErrorClientComponent, BlocksFieldErrorServerComponent, BlockFieldLabelClientComponent, BlockFieldLabelServerComponent, } from 'payload'
New (plural):
import type { BlocksField, BlocksFieldClient, BlocksFieldValidation, BlocksFieldDescriptionClientComponent, BlocksFieldDescriptionServerComponent, BlocksFieldErrorClientComponent, BlocksFieldErrorServerComponent, BlocksFieldLabelClientComponent, BlocksFieldLabelServerComponent, } from 'payload'
🤝 Contributors
- Dan Ribbens (@DanRibbens)
- Patrik (@PatrikKozak)
- Jacob Fletcher (@jacobsfletch)
- Paul (@paulpopus)
- Hampus Wallentin Olsen (@hampusolsen)
- Germán Jabloñski (@GermanJablo)
- Bruno Crosier (@brunocrosier)
v3.0.0-beta.103
v3.0.0-beta.103 (2024-09-11)
🚀 Features
🐛 Bug Fixes
- useAsTitle validation now accounts for default and base fields (#8165) (663e511)
- next: set the user data before redirect after login (#8135) (0118bce)
- upload.defParamCharset: utf8 by default (#8157) (a234092)
- richtext-lexical: hover style of the button to remove blocks (#8154) (281c80d)
- extends server props onto field component types (#8155) (12a30a0)
- db-postgres: querying on array wtihin a relationship field (#8152) (0c563eb)
🤝 Contributors
- Paul (@paulpopus)
- Jacob Fletcher (@jacobsfletch)
- Sasha (@r1tsuu)
- Jarrod Flesch (@JarrodMFlesch)
- Germán Jabloñski (@GermanJablo)