12593 Commits

Author SHA1 Message Date
Elliot DeNolf
a865a902d5 chore(release): v3.17.1 [skip ci] v3.17.1 2025-01-13 19:57:13 -05:00
Alessio Gravili
878763b36d fix(richtext-lexical): incorrect lexical version in dependency checker (#10559) 2025-01-13 19:56:30 -05:00
Elliot DeNolf
3c29015887 chore(release): v3.17.0 [skip ci] v3.17.0 2025-01-13 16:24:41 -05:00
Alessio Gravili
9631060383 fix(richtext-lexical): error when deleting links (#10557)
When pressing the delete button in the floating link popup, the link was
not deleted and a console error was thrown
2025-01-13 21:11:18 +00:00
Elliot DeNolf
5cfb1daaae fix: respect res header immutability (#10554)
Properly respect and merge res headers.
2025-01-13 15:41:46 -05:00
Elliot DeNolf
9278eec2b6 fix: better messaging when no arg passed to payload cli (#10550)
Better error message when no argument is passed to `pnpm payload`.

Before:
```
Unknown script: "".
```

After:
```
Please provide a command to run
Available commands:
  - command-1
  - command-2
  - etc.
```
2025-01-13 20:13:54 +00:00
Germán Jabloñski
a3ef5eee7b fix(ui): reset pagination when typing in WhereBuilder select menu (#10551)
After working on this I found a more accurate way to reproduce the bug:

- in the issue repro, type a letter in the select menu.
- delete the letter and wait for the debounce (300ms)
- type another letter.
- in devtools, you should see that the query increases the pagination by
+1. With this change, the pagination is reset when the input changes.

Fixes #10496

I'd like to do integration testing. But since there is no isolated `/ui`
test yet, this requires some planning. I have it pending.
2025-01-13 16:43:04 -03:00
Dan Ribbens
f95d6ba94a feat: delete scheduled published events (#10504)
### What?

Allows a user to delete a scheduled publish event after it has been
added:

![image](https://github.com/user-attachments/assets/79b1a206-c8a7-4ffa-a9bf-d0f84f86b8f9)

### Why?

Previously a user had no control over making changes once scheduled.

### How?

Extends the `scheduledPublishHandler` server action to accept a
`deleteID` for the event that should be removed and exposes this to the
user via the admin UI in a new column in the Upcoming Events table.
2025-01-13 19:41:38 +00:00
Alessio Gravili
6ada450531 fix(richtext-lexical): insert paragraph at end button overlaps floating link toolbar (#10552) 2025-01-13 19:41:14 +00:00
Elliot DeNolf
9004205b84 fix(cpa): proper debug logging (#10549)
Debug logs were improperly running without debug flag being passed.
2025-01-13 14:14:46 -05:00
Alessio Gravili
6757f7d459 feat(richtext-lexical): add new paragraph button below the editor (#10530)
Fixes https://github.com/payloadcms/payload/issues/10448


https://github.com/user-attachments/assets/dfcd4ab6-8e41-4a1b-b642-876a0737d9ae
2025-01-13 19:08:00 +00:00
Anthony Mifsud
2ae26d33e3 chore(cpa): fixes typo in messages.ts (#10342) 2025-01-13 19:07:11 +00:00
Ben Löffel
5043a8a43f docs: improves grammar in vercel postgres usage note (#10365)
Refined the grammar and structure of the usage note for
`vercelPostgresAdapter`. Replaced the ambiguous phrase "If when using"
with "If you are using" for better readability and clarity.
2025-01-13 13:36:39 -05:00
Jacob Fletcher
6848cf43ed fix(ui): passes serverProps to custom label components within table columns (#10547)
Continuation of #10540. Passes server props to custom label components
rendered within table columns, such as the list view. This way custom
server components can have access to `payload`, `i18n`, etc. as
expected.
2025-01-13 18:23:52 +00:00
Tristan
2e0595b170 fix(translations): update etTranslations type to DefaultTranslationsObject (#10358)
After merging this PR: https://github.com/payloadcms/payload/pull/10169
the estonian language pack has been published, but since the translation
type was not correct, it meant en wasn't used as a fallback lanugage,
which resulted the whole app to crash:
In the Browser the following error is shown, if Estonian language is
picked.
```
Error: Cannot read properties of undefined (reading 'default')
    at resolveErrorDev (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.1.3_react-dom@19.0.0_react@19.0.0__react@19.0.0_sass@1.77.4/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js:1792:63)
    at processFullStringRow (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.1.3_react-dom@19.0.0_react@19.0.0__react@19.0.0_sass@1.77.4/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js:2071:17)
    at processFullBinaryRow (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.1.3_react-dom@19.0.0_react@19.0.0__react@19.0.0_sass@1.77.4/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js:2059:7)
    at progress (webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.1.3_react-dom@19.0.0_react@19.0.0__react@19.0.0_sass@1.77.4/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js:2262:17)
```

Fixes #

This is now fixed by adding the correct type to the translation object.
2025-01-13 13:10:11 -05:00
Jarrod Flesch
43b40f0b00 docs: updates docs to reflect correct array hook usage (#10546)
### What?
The documentation for `addFieldRow` and `replaceFieldRow` was not
updated during the v2 -> v3 update.

### How?
Updates the documentation for `addFieldRow` and `replaceFieldRow`.

Fixes #9244
2025-01-13 13:00:40 -05:00
Paul
c9584a932a fix(ui): scheduled publish not showing related events in postgres (#10481)
Since postgres uses number IDs by default, when we were storing the
relationship field value with postgres we weren't able to query it

This fixes that problem by casting the ID to always a string making it
safe for querying inside the JSON field
2025-01-13 12:35:27 -05:00
Simon Vreman
69fac593ca fix(richtext-lexical): remove alteration of lexical text format constant (#10415)
In PR https://github.com/payloadcms/payload/pull/9507, which aims to
enable only used formats to be enabled in lexical, the
`TEXT_TYPE_TO_FORMAT` constant in the lexical library was altered. This
means it becomes impossible to create a feature relying on the
`highlight` format. I am of the opinion that this should not be the
case; and have used this for a lexical feature in one of my projects.
The type of `enabledFormats` of the `createClientFeature` function
should also be updated to reflect the availability of the format.

This PR aims to:
- Remove the alteration to the library constant
- Update type of `enabledFormats`
2025-01-13 14:14:03 -03:00
Amelia
415fbf1341 fix(ui): table custom label missing client field props (#10540)
Fixes #9663. The `field` prop was not passed to custom label components
within the list view table.

<img width="1366" alt="Screenshot 2025-01-13 at 16 05 34"
src="https://github.com/user-attachments/assets/efae9f92-ffad-46dd-aec8-e1f968f9f278"
/>

---------

Co-authored-by: Jacob Fletcher <jacobsfletch@gmail.com>
2025-01-13 16:58:46 +00:00
Jarrod Flesch
cc13ae77fb fix: aligns first render for hydration of dates in list view (#10541)
### What?
The list view was throwing a hydration error for date fields.

### Why?
The issue really stems from the fact that cells are client rendered. We
dynamically load the dateFNS Locale object at runtime to keep the bundle
size small — which makes sense. But on the first render that means we do
not have the Locale object from the known locale so the server/client
determines what to render it as. This causes a mismatch when hydrating.

In the future I think cells could be server rendered and that would
solve the need for this fix which adds "Loading..." while the dateFNS
Locale is loaded.

I think server rendering the cells would allow us to import the dateFNS
Locale inline (blocking) and then pass the rendered string down to the
list view. This should work because we **know** the locale on the
server.

### How?
In this PR, it adds a "Loading..." fallback for the date cell if the
dateFNS Locale has not loaded yet.

Fixes #10044
2025-01-13 11:45:05 -05:00
Jacob Fletcher
afcc970e36 fix(next): ensures req.locale is populated before running access control (#10533)
Fixes #10529. The `req.locale` property within collection and global
access control functions does not reflect the current locale. This was
because we were attaching the locale to the req only _after_ running
`payload.auth`, which attempts to get access control without a
fully-formed req. The fix is to first authenticate the user using the
`executeAuthStrategies` operation directly, then determine the request
locale with that user, and finally get access results with the proper
locale.
2025-01-13 10:33:27 -05:00
Paul
6b051bd59e feat: add ability to disable cache tags for admin thumbnails (#10319)
This PR adds `cacheTags: boolean` (default `true`) to allow users to
disable the appended document updatedAt value in the case of hosting
with third party CDNs which may not allow additional search params and
throw an error.

It also fixes how we append this value to consider the case where the
URL already contains parameters and appends it with `&` instead.

In the future `cacheTags` can be made an object to allow granularity for
disabling `eTag` headers used for caching as well.

The cache tag control should help with these two issues:
- Fixes https://github.com/payloadcms/payload/issues/9880
- Fixes https://github.com/payloadcms/payload/issues/9993

The appending of the value correctly addresses this:
- Fixes https://github.com/payloadcms/payload/issues/10139
2025-01-13 15:26:47 +00:00
Paul
082c4f0d71 fix(ui): fixed issue with updatedAt timestamps not updating in the UI when drafts are updated (#10503)
Fixes https://github.com/payloadcms/payload/issues/10436

Fixes an issue where drafts' updatedAt timestamp is not being updated.
We weren't updating the `versionData` to have the right timestamp in the
saveVersion operation when drafts were being updated.

Added e2e tests to make sure 'Last Modified' is always different in both
autosave and non-autosave drafts.
2025-01-13 09:01:34 -06:00
Germán Jabloñski
0252681313 fix(richtext-lexical): combine 2 normalizeMarkdown implementations and fix code block regex (#10470)
This should fix it https://github.com/payloadcms/payload/issues/10387

I don't know why we had 2 different copies of normalizeMarkdown.

Also, the most up-to-date one still had a bug where lines were
considered as if they were inside codeblocks when they weren't.

How I tested that it works:

1. I copied the `normalizeMarkdown` implementation from this PR into the
website repo, and made sure it is called before the conversion to
editorState.
2. In the admin panel, sync docs.
3. In the admin panel, refresh mdx to lexical (new button, below sync
docs).
4. Look for the examples from bug #10387 and verify that they have been
resolved.

An extra pair of eyes would be nice to make sure I'm not getting
confused with the imports.
2025-01-13 14:51:26 +00:00
Jarrod Flesch
690e99f2f9 feat: consolidates logic in update and updateByID operations (#9998)
### What?
Consolidates logic in update and updateByID. These two operations used a
lot of the same core functionality. This is a QOL improvement for future
features/fixes on each operation. You will not need to make changes to
both operations now.

### Why?
Recently we released a feature for `publishSpecificLocale` and that was
only implemented on the updateByID operation. I think future
enhancements and fixes may suffer the same treatment.

### How?
Moves shared logic into a new file with a function called
`updateDocument`.
2025-01-13 09:28:25 -05:00
Sasha
04a8083658 fix: rest api with Next.js basePath option (#10535)
Fixes https://github.com/payloadcms/payload/issues/10534
2025-01-13 09:37:50 +00:00
Alessio Gravili
ab564d3731 feat(richtext-lexical): respect imageURL for blocks and inline blocks (#10532)
Block and inline block icons in the slash menu / toolbars can now be
customized:

![CleanShot 2025-01-12 at 19 41
09@2x](https://github.com/user-attachments/assets/80f8bbac-0ad8-43fc-8a6c-eae055a8ebbc)
2025-01-13 03:49:10 +00:00
Alessio Gravili
26711a7a55 fix(richtext-lexical): editor placeholder had incorrect padding set for small viewports (#10531)
Before:
![CleanShot 2025-01-12 at 19 01
56@2x](https://github.com/user-attachments/assets/7f35bb0f-0dad-4976-8205-feef3a073914)

After: 
![CleanShot 2025-01-12 at 18 59
36@2x](https://github.com/user-attachments/assets/0b34caea-f7bf-4312-a4bb-de508d2c056c)
2025-01-13 02:15:44 +00:00
Alessio Gravili
142c504a46 refactor: improve error logging during onInit and website template seed (#10528)
This PR ensures that onInit and website template seed errors are logged
properly
2025-01-13 01:14:13 +00:00
Alessio Gravili
9b6cdd0cd1 ci: fix e2e test suite retries not working (#10525)
We were deleting the test/packed folder without resetting the
test/package.json.
2025-01-12 21:39:31 +00:00
Said Akhrarov
dc6d79e76e fix(richtext-lexical): adds support for localized placeholder (#10523)
### What?
This PR fixes a minor issue in `richtext-lexical` where editor
placeholders were not localized.

### Why?
To allow users to localize placeholders accordingly with their language
preferences in config.

### How?
By evaluating the placeholder in the editor RSC, if any is provided. The
`ContentEditable` component falls back to a default in the event that no
placeholder was provided as this was the existing behavior.

Fixes #10518
2025-01-12 21:28:10 +00:00
Jacob Fletcher
c850bd4b28 chore(next): cleans up initPage through initReq overrides and consolidated return types (#10449)
The `req` object returned from `initReq` does not include the `user`
property, and instead returned `user` and `i18n` _alongside_ the req
(and in the case of `i18n`, duplicately, as it was _also_ on the req).
Now, these properties exist directly on the req itself as expected. The
`initPage` function was also unnecessary instantiating a new local req
object just to override the `headers`, `url`, and `query` properties.
Instead of doing this, we now support overriding properties upon
instantiating a new req, bypassing the need to create an entirely new
object.
2025-01-11 00:00:31 -05:00
Paul
d20dc5806b templates: fix issue with shadcn utilities alias across website template and localization example (#10507)
Fixes the utilities alias used by shadcn to a specific file renamed to
`ui.ts` from `cn.ts` since there may be other utilities installed by
shadcn depending on the components the user installs.

Co-Authored-By: Q.Tran <quan.tran@metro.digital>
2025-01-10 17:44:13 -06:00
Alessio Gravili
fd96a9afe3 fix(richtext-lexical): lexical editor behind a drawer was incorrectly registered as parent editor of lexical editor within drawer (#10502)
Fixes https://github.com/payloadcms/payload/issues/10462

This behavior caused the fixed toolbar of the lexical editor within the
drawer to trigger overlap behavior of the fixed toolbar belonging to the
lexical editor behind the drawer.

Editors within drawers should be treated as separate, instead of being
able to form parent-child relationships between editors behind or in
nested drawers
2025-01-10 22:48:05 +00:00
Sasha
1af7d8745c fix: localized tabs with empty data and an array field inside lead to crash in afterChange (#10410)
Previously, this config:
```ts
import type { CollectionConfig } from 'payload'

export const tabSlug = 'tabs'

export const Tab: CollectionConfig = {
  slug: tabSlug,
  fields: [
    {
      type: 'tabs',
      tabs: [
        {
          name: 'tabLocalized',
          localized: true,
          fields: [
            {
              name: 'title',
              type: 'text',
            },
            {
              name: 'array',
              type: 'array',
              fields: [
                {
                  name: 'title',
                  type: 'text',
                },
              ],
            },
          ],
        },
      ],
    },
  ],
}

```
This call
```ts
const result = await payload.create({
  collection: tabSlug,
  locale: englishLocale,
  data: {
    tabLocalized: {},
  },
})
```

Led to the following crash with the MongoDB adapter
<img width="741" alt="image"
src="https://github.com/user-attachments/assets/8d1d37de-a685-4a30-bd37-58af164108a2"
/>

This is due to how Mongoose, apparently just ignores the `minimize:
false` configuration
a83a430a3a/packages/db-mongodb/src/models/buildSchema.ts (L571)
and we, instead of `tabLocalized: { en: { } }` receive just
`tabLocalized: {}`.

This isn't an issue with group fields because we have fallback for them

a83a430a3a/packages/payload/src/fields/hooks/afterChange/promise.ts (L203)

This PR adds the same for tabs.
2025-01-11 00:37:23 +02:00
Alessio Gravili
04733f0db1 feat(richtext-lexical): upgrade lexical from 0.20.0 to 0.21.0. Fixes table selection & scrollable table bugs (#10501)
Fixes https://github.com/payloadcms/payload/issues/8036

This PR upgrades lexical from 0.20.0 to 0.21.0. As stated in the docs,
please ensure you're using our re-exported lexical packages instead of
installing lexical directly. E.g., import from
`@payloadcms/richtext-lexical/lexical` instead of `lexical`. Direct
lexical imports are not supported and may break.

This PR ports over all relevant PRs from the lexical playground that
have been pushed between 0.20.0 and 0.21.0. This includes a lot of bug
fixes related to tables, specifically scrollable tables and table
selection.
2025-01-10 14:13:06 -07:00
Elliot DeNolf
a49f7824ad templates: bump for v3.16.0 (#10499)
🤖 Automated bump of templates for v3.16.0

Triggered by user: @denolfe

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-01-10 14:30:38 -05:00
Elliot DeNolf
d265c26049 chore(release): v3.16.0 [skip ci] v3.16.0 2025-01-10 14:12:06 -05:00
Sasha
e46ad67c3b chore: update year in licenses (#10463)
Happy New Year!
2025-01-10 14:05:37 -05:00
Jacob Fletcher
f4596fc82b fix(ui): disables form during locale change (#8705)
Editing fields during a locale change on slow networks can lead to
changes being reset when the new form state is returned. This is because
the fields receive new values from context when the new locale loads in,
which may have occurred _after_ changes were made to the fields. The fix
is to subscribe to a new `localeIsLoading` context which is set
immediately after changing locales, and then reset once the new locale
loads in. This also removes the misleading `@deprecated` flag from the
`useLocale` hook itself.
2025-01-10 14:03:36 -05:00
Alessio Gravili
4fc6956617 fix(richtext-lexical): respect defaultValue config of link feature url and linkType fields (#10498)
Fixes https://github.com/payloadcms/payload/issues/10444
2025-01-10 18:08:28 +00:00
Alessio Gravili
e0df0d67ca fix(richtext-lexical): properly handle error if blocks or inline blocks are not found (#10497)
Fixes https://github.com/payloadcms/payload/issues/10445

Previously, if a block or inline block was part of the editor data that
did not exist in the config, an error would be thrown that rendered the
entire editor unusable.

Now, the error is handled gracefully and displayed within the block,
allowing users to remove the block in order to fix the issue.

![CleanShot 2025-01-10 at 10 17
14@2x](https://github.com/user-attachments/assets/7d1c97bc-8c7b-451d-a6dc-e46d39dfb0f5)
2025-01-10 17:46:19 +00:00
Sepiolina
8d5d2d1d37 fix(richtext-lexical): update Thai translations for blockquote and horizontal rule (#10469)
**Description:**

- [x] Replaces the [SKIPPED] entry with the correct translation for
"Blockquote".
- [x] I have read and understand the CONTRIBUTING.md document in this
repository.

**Type of Change:**

- [x] Bug fix (non-breaking change which fixes an issue).


**Fixes:**  

1. fix the translation issue by replacing the [SKIPPED] entry with the
correct Thai translation for "Blockquote". Which I choose
"ข้อความอ้างอิง" However one might prefer other form of translation like
"คำอ้างอิง" or "กล่องข้อความอ้างอิง" which represent the 'block' with in
the 'Blockquote'
2. corrects the Thai translation for "Horizontal Rule." The translation
has been changed from "กฎแนวนอน," which was a mistranslation, to
"เส้นขอบแนวนอน" to better reflect the meaning of "Horizontal Rule" as a
visual divider or border.
2025-01-10 08:21:51 +00:00
Steve Kuznetsov
21eec876c4 docs: update beforeValidate documentation (#10367)
docs: update beforeValidate documentation

These hooks operate similarly across the different contexts they can be
registered in, but were not sufficiently documented as such.

Signed-off-by: Steve Kuznetsov <stekuznetsov@microsoft.com>
2025-01-10 08:15:44 +00:00
Steve Kuznetsov
a8d6f3f543 docs: update draft doc for formatting (#10393)
I think some automatic formatter added the `{' '}` styling, it doesn't
render correctly. Update the formatting for this banner to remove it and
correctly refer to the `_status` field.

---------

Signed-off-by: Steve Kuznetsov <stekuznetsov@microsoft.com>
2025-01-10 08:14:29 +00:00
Adrian Maj
83bd0e2e4c docs: removed unnecessary visible <br/> tag in fields/blocks (#10456)
There was a `<br/>` tag, which was visible on the docs page. Also, I
removed spacing from the second tip box, to keep in consistent with tips
in other places in docs.
2025-01-10 08:10:31 +00:00
Alessio Gravili
4c96028e87 fix(richtext-lexical): allow external state mutation of block node from outside the form (#10486)
Previously, updates of the node fields from outside the form using
setFields did not trigger re-fetching the initial state, and thus
providing updated values to the form. This is to avoid unnecessary
re-renders of the form and unnecessary requests when setFields is
triggered from within the form.

This PR resets the initial state, thus triggering a re-render and
re-fetch of the initial state, if node.setFields is called from outside
the form. This preserves the performance optimization
2025-01-10 01:03:51 -07:00
Sasha
225c24da99 fix: collection access endpoint optional ID and use 404 for not found response (#10487)
The collection access endpoint, apparently, can be used without an ID as
well and the correct status code in `notFoundResponse` was missing.
Huge thanks to @akhrarovsaid
2025-01-10 07:35:24 +00:00
Alessio Gravili
d8f4f06b58 fix: do not autorun jobs during next build process (#10483)
This PR auto-runs jobs only when an admin route is visited. This
solution is only temporary, as it will not work for deployments without
the admin panel that should run jobs
2025-01-09 17:38:30 -07:00
Germán Jabloñski
bdb96ddbcc fix(richtext-lexical): inline Block drawers opened when document mounts (#10480)
Fixes #10439
2025-01-09 20:54:09 +00:00