Releases: payloadcms/payload
v3.0.0-beta.39
v3.0.0-beta.39 (2024-05-30)
Features
Bug Fixes
BREAKING CHANGES 💥
Moves upload
field and relationship
fields with hasMany: false
& relationTo: string
from the many-to-many _rels
join table to simple columns. This only affects Postgres database users.
TL;DR
We have dramatically simplified the storage of simple relationships in relational databases to boost performance and align with more expected relational paradigms. If you are using the beta Postgres adapter, and you need to keep simple relationship data, you'll need to run a migration script that we provide you.
Background
For example, prior to this update, a collection of "posts" with a simple hasMany: false
and relationTo: 'categories'
field would have a posts_rels
table where the category relations would be stored.
This was somewhat unnecessary as simple relations like this can be expressed with a category_id
column which is configured as a foreign key. This also introduced added complexity for dealing directly with the database if all you have are simple relations.
Who needs to migrate
You need to migrate if you are using the beta Postgres database adapter and any of the following applies to you.
- If you have versions enabled on any collection / global
- If you use the
upload
field - If you have relationship fields that are
hasMany: false
(default) andrelationTo
to a single category (has one) relations
We have a migration for you
Even though the Postgres adapter is in beta, we've prepared a predefined migration that will work out of the box for you to migrate from an earlier version of the adapter to the most recent version easily.
It makes the schema changes in step with actually moving the data from the old locations to the new before adding any null constraints and dropping the old columns and tables.
How to migrate
The steps to preserve your data while making this update are as follows. These steps are the same whether you are moving from Payload v2 to v3 or a previous version of v3 beta to the most recent v3 beta.
Important: during these steps, don't start the dev server unless you have push: false
set on your Postgres adapter.
⚠️ Step 1 - backup
Always back up your database before performing big changes, especially in production cases.
⚠️ Step 2 - create a pre-update migration
Before updating to new Payload and Postgres adapter versions, run payload migrate:create
without any other config changes to have a prior snapshot of the schema from the previous adapter version
⚠️ Step 3 - if you're migrating a dev DB, delete the dev push
row from your payload_migrations
table
If you're migrating a dev database where you have the default setting to push database changes directly to your DB, and you need to preserve data in your development database, then you need to delete a dev
migration record from your database.
Connect directly to your database in any tool you'd like and delete the dev push record from the payload_migrations
table using the following SQL statement:
DELETE FROM payload_migrations where batch = -1
⚠️ Step 4 - update Payload and Postgres versions to most recent
Update packages, making sure you have matching versions across all @payloadcms/*
and payload
packages (including @payloadcms/db-postgres
)
⚠️ Step 5 - create the predefined migration
Run the following command to create the predefined migration we've provided:
payload migrate:create --file @payloadcms/db-postgres/relationships-v2-v3
⚠️ Step 6 - migrate!
Run migrations with the following command:
payload migrate
Assuming the migration worked, you can proceed to commit this change and distribute it to be run on all other environments.
Note that if two servers connect to the same database, only one should be running migrations to avoid transaction conflicts.
Related discussion:
#4163
Contributors
- Elliot DeNolf (@denolfe)
- Dan Ribbens (@DanRibbens)
- Jacob Fletcher (@jacobsfletch)
v3.0.0-beta.38
v3.0.0-beta.38 (2024-05-30)
Features
- next,ui: improves loading states (#6434) (92f458d)
- extracts buildFormState logic from endpoint for reuse (#6501) (321e97f)
Bug Fixes
- cpa: safer command exists check (#6569) (4884f0d)
- ui: adjusts sizing of remove/add buttons to be same size (#6529) (f1db24e)
- ui field validation error with admin.disableListColumn property (#6531) (7f15147)
- translations: adds new
userEmailAlreadyRegistered
translations (#6550) (e0a6db7) - cpa: more package manager detection improvements (#6566) (0d7d3e5)
- duplicate options appearing in relationship where builder (#6557) (3474642)
- plugin-search: Render error on custom UI component (#6562) (aa02801)
- ensure relationship field pills respect isSortable property (#6561) (425576b)
- ability to query relationships not equal to ID (#6555) (043a91d)
Contributors
- Elliot DeNolf (@denolfe)
- Patrik (@PatrikKozak)
- Jarrod Flesch (@JarrodMFlesch)
- Paul (@paulpopus)
- Jessica Chowdhury (@JessChowdhury)
- Jacob Fletcher (@jacobsfletch)
v3.0.0-beta.37
v3.0.0-beta.37 (2024-05-29)
Features
- richtext-lexical: link markdown transformers (#6543) (33d5312)
- richtext-lexical: i18n (#6542) (a8000f6)
- plugin-form-builder: update form builder plugin field overrides to use a function instead (#6497) (7d0e909)
- cpa: update existing payload installation (#6193) (10c94b3)
- richtext-lexical: i18n support (#6524) (c383f39)
- richtext-lexical: update validation of custom URLs to include relative and anchor links (#6525) (8a91a7a)
Bug Fixes
- cpa: improve package manager detection (#6546) (8506385)
- multi value draggable/sortable pills (#6500) (e749529)
- richtext-lexical: various html converter fixes (#6544) (4a51f4d)
- richtext-lexical: user-defined html converters not taking precedence, and shared default html converters doubling in size after every field initialization (2c283bc)
- richtext-lexical: list converters and nodes being added duplicatively (a2e9bcd)
- richtext-lexical: link html converter: serialize newTab to target="_blank" (#6350) (e0b201c)
- deps: proper location for scheduler peer dep (#6537) (2ddd50e)
- Add missing He lang export in payload/i18n (#6484) (6f5d86e)
- next: unable to pass custom view client components (#6513) (eff5129)
- separate collection docs with same ids were excluded in selectable (#6499) (18bc4b7)
- richtext-lexical: localized sub-fields were omitted from the API output (#6489) (7a76814)
- ui: where builder issues (#6478) (42222cd)
BREAKING CHANGES
- plugin-form-builder: update form builder plugin field overrides to use a function instead (#6497) (7d0e909)
Changes the
fields
override for form builder plugin to use a function
instead so that we can actually override existing fields which currently
will not work.//before fields: [ { name: 'custom', type: 'text', } ] // current fields: ({ defaultFields }) => { return [ ...defaultFields, { name: 'custom', type: 'text', }, ] }
Contributors
- Elliot DeNolf (@denolfe)
- Jarrod Flesch (@JarrodMFlesch)
- Alessio Gravili (@AlessioGr)
- Leo Hilsheimer (@linobino1)
- Paul (@paulpopus)
- zvizvi (@zvizvi)
- Dan Ribbens (@DanRibbens)
- Patrik (@PatrikKozak)
v3.0.0-beta.36
v3.0.0-beta.36 (2024-05-23)
Features
- next.js 15, react 19, react compiler support (#6429) (35f961f)
- add website template (#6470) (85bfca7)
- ui: split up Select component into Select and SelectInput (#6471) (661a4a0)
- richtext-lexical: various UX and performance improvements (#6467) (78579ed)
- richtext-lexical: improve block dragging UX (6b45cf3)
- next: server-side theme detection (#6452) (1fe9790)
- translations: add Hebrew translation (#6428) (3c0853a)
- richtext-lexical: various gutter, error states & add/drag handle improvements (#6448) (6c95287)
Bug Fixes
- adds host to initPage req creation (#6476) (72c0534)
- isHotkey webpack error (#6466) (73d0b20)
- richtext-lexical: order of add/drag handles was inconsistent between gutter and no-gutter mode (c93752b)
- ui: field errors aren't red in light mode (7a4dd58)
- next,ui: fixes global doc permissions and optimizes publish access data loading (#6451) (2b941b7)
- richtext-lexical: link drawer sending too many form state requests for actions unrelated to links (0bfbf9c)
- ui:
disableListColumn
fields not hidden in table columns (#6445) (bcc506b)
BREAKING CHANGES
BREAKING:
- bumps minimum required next.js version from
14.3.0-canary.68
to
15.0.0-rc.0
- bumps minimum required react and react-dom versions to
19.0.0
(19.0.0-rc-f994737d14-20240522
should be used)@types/react
and@types/react-dom
have to be bumped to
npm:types-react@19.0.0-beta.2
using overrides and pnpm overrides, if
you want correct types. You can find an example of this here:
https://github.com/payloadcms/payload/pull/6429/files#diff-10cb9e57a77733f174ee2888587281e94c31f79e434aa3f932a8ec72fa7a5121L32Issues
- Bunch of todos for our react-select package which is having type
issues. Works fine, just type issues. Their type defs are importing JSX
in a weird way, we likely just have to wait until they fix them in a
future update.
Description
Renames the
Save
toSaveButton
, etc. to match the already
established convention of thePreviewButton
, etc. This matches the
imports with their respective component and type names, and also gives
these components more context to the developer whenever they're
rendered, i.e. its clearly just a button and not an entire block or
complex component.BREAKING:
Import paths for these components have changed, if you were previously
importing these components into your own projects to customize, change
the import paths accordingly:Old:
import { PublishButton } from '@payloadcms/ui/elements/Publish' import { SaveButton } from '@payloadcms/ui/elements/Save' import { SaveDraftButton } from '@payloadcms/ui/elements/SaveDraft'New:
import { PublishButton } from '@payloadcms/ui/elements/PublishButton' import { SaveButton } from '@payloadcms/ui/elements/SaveButton' import { SaveDraftButton } from '@payloadcms/ui/elements/SaveDraftButton'
- I have read and understand the
CONTRIBUTING.md
document in this repository.
Contributors
- Alessio Gravili (@AlessioGr)
- Paul (@paulpopus)
- Jarrod Flesch (@JarrodMFlesch)
- Elliot DeNolf (@denolfe)
- Jacob Fletcher (@jacobsfletch)
- zvizvi (@zvizvi)
- Patrik (@PatrikKozak)
v3.0.0-beta.35
v3.0.0-beta.35 (2024-05-21)
Features
Bug Fixes
- user verification email broken (#6442) (23f9a32)
- ui: blocks browser save dialog from opening when hotkey used with no changes (#6366) (0190eb8)
- separate sort and search fields when looking up relationship. (#6440) (f482fdc)
- ui: tooltip positioning issues (#6439) (ed47661)
- ui: update relationship cell formatted value when when search changes (#6208) (e682cb1)
- richtext-lexical: field required validation not working if content was removed manually (#6435) (fa7cc37)
- attributes graphql packages, adds esm import path (#6431) (1d81eef)
- plugin-seo: white screen of death on choosing an existing media for meta image (#6424) (8fcfac6)
BREAKING CHANGES
Change the exports of DefaultListView and DefaultEditView to be renamed
without "Default" as ListView// before import { DefaultEditView } from '@payloadcms/next/views' import { DefaultListView } from '@payloadcms/next/views' // after import { EditView } from '@payloadcms/next/views' import { ListView } from '@payloadcms/next/views'
Contributors
- Paul (@paulpopus)
- Alessio Gravili (@AlessioGr)
- Jessica Chowdhury (@JessChowdhury)
- Anders Semb Hermansen (@andershermansen)
- Ritsu (@r1tsuu)
- Elliot DeNolf (@denolfe)
- Jarrod Flesch (@JarrodMFlesch)
v3.0.0-beta.34
v3.0.0-beta.33
v3.0.0-beta.33 (2024-05-17)
Features
- richtext-lexical: new aboveContainer and belowContainer plugin positioning options, fix incorrect placeholder positioning (#6410) (bf106db)
- upgrade minimum next version to 14.3.0-canary.68 & upgrade react packages, react-toastify (#6387) (9d5c0d3)
- allow client components and extra rsc props for custom edit and list views (#6395) (2762131)
- replaces admin.meta.ogImage with admin.meta.openGraph.images (#6227) (9556d1b)
- richtext-lexical: upgrade lexical from 0.14.5 to 0.15.0 (#6371) (fbea524)
- richtext-lexical: upgrade lexical from 0.14.5 to 0.15.0 and ensure peerDependencies force correct lexical version (22480a7)
Bug Fixes
- db-postgres: uuid custom db name (#6408) (c2571cf)
- db-postgres: query with like on id columns (#6414) (12c812d)
- ui: properly sets hasSavePermission on nested documents (#6394) (1800934)
- component is undefined error within isReactServerComponentOrFunction (#6411) (89b6055)
- turbopack RSC detection (#6405) (4dedd6e)
- next: removes initPage export from barrel file (#6403) (553bb4b)
- loader support for server-only (#6383) (5083525)
- react-select menu is hidden behind lexical fixed toolbar (#6396) (5323d76)
- richtext-lexical: upload, relationship and block node insertion fails sometimes (6083870)
- next: incorrect stepnav breadcrumbs after selecting existing upload (#6372) (a4deaf0)
- next: does not wrap custom views with template by default (#6379) (4adf01a)
- translations: type StripCountVariants not working in TS strict mode (#6374) (1abcdf9)
- safely access cookie header for uploads (#6373) (fbad39a)
- db-postgres: filter with ID not_in AND queries (#6359) (e8d1d36)
- loader throwing errors for client files imported using TS paths (#6369) (cb9a20f)
- richtext-lexical: autoLink node styles not inherited from original text node on creation (8db9664)
- multiselect relationship bug and improve accessibility (#6286) (5a4074e)
BREAKING CHANGES
- upgrade minimum next version to 14.3.0-canary.68 & upgrade react packages, react-toastify (#6387) (9d5c0d3)
BREAKING:
- The minimum required next version is now 14.3.0-canary.68. This is
because we are migrating away from the deprecated
experimental.serverComponentsExternalPackages next config key to
experimental.serverExternalPackages, which is not available in older
next canaries- The minimum
react
andreact-dom
versions have been bumped to
^18.2.0 or ^19.0.0. This matches the minimum react version recommended
by next
-
next: removes initPage export from barrel file (#6403) (553bb4b)
-
replaces admin.meta.ogImage with admin.meta.openGraph.images (#6227) (9556d1b)
-
remove unused staticOptions config on uploads (#6378) (a6bf058)
Removes the unused
staticOptions
on upload config, it was previously
typed to express configuration and is unused anywhere in the codebase
BREAKING: This upgrades all lexical packages from 0.14.5 to 0.15.0.
If there are any breaking changes within lexical, this could break your
project if you use lexical APIs directly (e.g. in custom features). We
have not noticed any breaking changes within core. Please consult their
changelog: https://github.com/facebook/lexical/releases/tag/v0.15.0"
- richtext-lexical: upgrade lexical from 0.14.5 to 0.15.0 and ensure peerDependencies force correct lexical version (22480a7)
Contributors
- James Mikrut (@jmikrut)
- Dan Ribbens (@DanRibbens)
- Alessio Gravili (@AlessioGr)
- Jacob Fletcher (@jacobsfletch)
- Francis Turmel (@fturmel)
- Elliot DeNolf (@denolfe)
- Paul (@paulpopus)
- Patrik (@PatrikKozak)
- Jarrod Flesch (@JarrodMFlesch)
- Jessica Chowdhury (@JessChowdhury)