Compare commits

..

642 Commits

Author SHA1 Message Date
Dan Ribbens
d0ffe85abb chore(release): v3.0.0-alpha.16 [skip ci] 2024-03-05 16:28:45 -05:00
James
f9f7dcfc58 chore: attempts to build to es6 instead of commonjs for next / ui 2024-03-05 16:27:48 -05:00
Dan Ribbens
f06257e7ff chore(release): v3.0.0-alpha.15 [skip ci] 2024-03-05 16:13:34 -05:00
James
e490f0bce6 chore: attempts to abstract sharp to optional dependency 2024-03-05 16:12:17 -05:00
Dan Ribbens
770c7173ec chore(release): v3.0.0-alpha.14 [skip ci] 2024-03-05 15:57:54 -05:00
Dan Ribbens
661ab4867b chore(release): v3.0.0-alpha.13 [skip ci] 2024-03-05 15:55:14 -05:00
James
9ee3b5aae6 chore: rolls back simplificaiton to root layout 2024-03-05 15:45:30 -05:00
Jarrod Flesch
d202256c30 chore: fix locale setter 2024-03-05 15:39:26 -05:00
James
b8856d4ef7 Merge branch 'feat/server-hmr' into feat/next-poc 2024-03-05 15:35:32 -05:00
James
e1294ac210 chore: removes console log 2024-03-05 15:19:16 -05:00
James
b0edd2d137 chore: finishes pattern for server hmr 2024-03-05 15:18:36 -05:00
Jarrod Flesch
0d0e9bc953 chore: thread missing Link components to Button 2024-03-05 15:17:36 -05:00
James
2576291d9f chore: refactors layout / root page 2024-03-05 14:37:40 -05:00
James
d2aab87faa chore: server hmr 2024-03-05 14:24:05 -05:00
Jacob Fletcher
c2509b462c chore(next): wires create first user 2024-03-05 11:42:20 -05:00
Jarrod Flesch
0e378be769 chore: opt out of caching getGraphql and getFieldSchemaMap 2024-03-05 09:25:42 -05:00
James
2785eaab21 chore: adds @payloadcms/db-mongodb to serverComponentsExternalPackages 2024-03-04 22:39:17 -05:00
James
8a10fd1547 chore: rolls back payload sharp version 2024-03-04 20:29:28 -05:00
James
8f8ed817fb chore: attempts turbopack-safe Schema access from mongoose 2024-03-04 17:42:04 -05:00
Alessio Gravili
7a150254fe chore: remove console log 2024-03-04 17:14:43 -05:00
Alessio Gravili
9612a4a781 chore: fix conflicting UI export (Upload => UploadField) 2024-03-04 17:07:45 -05:00
Alessio Gravili
249b233dc2 chore: revert to working next.js version 2024-03-04 17:05:51 -05:00
Jarrod Flesch
c4d4a9b47b chore: bump next, simplify i18n types 2024-03-04 17:04:05 -05:00
Dan Ribbens
a55e991bfa chore: fix read migration require regression 2024-03-04 17:02:22 -05:00
Alessio Gravili
610276f66b Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-04 16:56:22 -05:00
Alessio Gravili
de99aabf7f feat: separate Input from Upload, Text & TextArea fields, get plugin-seo to load without errors 2024-03-04 16:56:14 -05:00
Elliot DeNolf
40a0a0083f chore(create-payload-app): init-next now create payload config and modifies tsconfig.json (#5242) 2024-03-04 16:55:43 -05:00
James
56ecd2ac14 chore: fix next config 2024-03-04 16:51:14 -05:00
James
4617d58b6a chore: exports withPayload in a more versatile way 2024-03-04 16:46:31 -05:00
James
98aeff2f3e chore: rolls back next config testing 2024-03-04 16:46:31 -05:00
James
f2239decca chore: abstracts next get route 2024-03-04 16:46:31 -05:00
Jacob Fletcher
36bd25a9cc chore(next): exports view base classes 2024-03-04 16:38:06 -05:00
Jarrod Flesch
933ae663f0 chore: e2e improvements 2024-03-04 16:22:15 -05:00
Dan Ribbens
a08674f708 test: database int 2024-03-04 15:58:56 -05:00
Jacob Fletcher
7fe0855932 chore(next): wires document events provider 2024-03-04 15:48:37 -05:00
Elliot DeNolf
d7594c4a1c chore(release): v3.0.0-alpha.12 [skip ci] 2024-03-04 15:43:40 -05:00
Elliot DeNolf
d9c8fa6043 chore: fix lexical formstate types 2024-03-04 15:43:23 -05:00
Alessio Gravili
4140d3084e chore: update pnpm lock 2024-03-04 15:36:39 -05:00
Alessio Gravili
93d3c9c657 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-04 15:21:35 -05:00
Alessio Gravili
3433f1224a chore(plugin-cloud-storage): fix build command 2024-03-04 15:21:29 -05:00
Jacob Fletcher
95ac686f04 chore: flattens meta into single function 2024-03-04 15:11:23 -05:00
James
ae8d11825a chore: installs sass as dependency in next package 2024-03-04 14:59:32 -05:00
Alessio Gravili
ece796432a chore(plugin-seo): prettier, lint, adjust package.json 2024-03-04 14:40:45 -05:00
Alessio Gravili
995ae21075 chore: remove useless mock file 2024-03-04 14:37:55 -05:00
Alessio Gravili
4a2d52717c feat: maybe-working plugin-cloud 2024-03-04 14:36:00 -05:00
Dan Ribbens
c0a07a6144 chore: validate schema moved from loadConfig to init 2024-03-04 14:30:38 -05:00
Jarrod Flesch
b14560c07d chore: more e2e linting 2024-03-04 14:24:28 -05:00
Jarrod Flesch
5de7d7f882 chore: test improvements and fixes 2024-03-04 14:24:28 -05:00
Alessio Gravili
a4ae3b223c chore: add @payloadcms/plugin-cloud to tsconfig 2024-03-04 14:22:24 -05:00
Alessio Gravili
383571ef05 chore(plugin-cloud-storage): upgrade azure emulator azurite to latest supported version 2024-03-04 14:17:12 -05:00
Alessio Gravili
7e5459cc62 chore: fix plugin-cloud-storage int tests 2024-03-04 14:11:09 -05:00
Alessio Gravili
caa8d9c0ed feat: working @payloadcms/plugin-cloud-storage 2024-03-04 14:08:43 -05:00
Jarrod Flesch
df887dc0e9 chore: fix autologin and redirect 2024-03-04 13:46:16 -05:00
James
262e3bbee2 chore: types update 2024-03-04 12:25:44 -05:00
Jacob Fletcher
87463c7e70 fix: admin view props 2024-03-04 12:15:30 -05:00
Dan Ribbens
2dc3e9af5e test: fix hooks int 2024-03-04 12:12:29 -05:00
Jarrod Flesch
d1de99d48d chore: fix EditViewProps import path in e2e 2024-03-04 12:08:12 -05:00
Jarrod Flesch
db87a06cfd fix: updates incorrect e2e import paths 2024-03-04 12:05:21 -05:00
Dan Ribbens
fab38c1f4e test: startMemoryDB with replica set 2024-03-04 12:03:29 -05:00
James
298dbfb0e0 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-04 12:02:29 -05:00
James
b978517945 chore: fixes dynamic meta import paths 2024-03-04 12:02:23 -05:00
Alessio Gravili
5c55449a87 chore: add @payloadcms/plugin-cloud-storage to tsconfig path 2024-03-04 12:00:29 -05:00
Alessio Gravili
78425d1947 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-04 11:58:29 -05:00
Alessio Gravili
55529eb493 chore: add back admin redirect, thanks Jarrod 2024-03-04 11:58:23 -05:00
Elliot DeNolf
06b2d907b6 chore(release): v3.0.0-alpha.11 [skip ci] 2024-03-04 11:53:26 -05:00
Jacob Fletcher
f54d96d916 chore: moves view related types to payload core 2024-03-04 11:51:58 -05:00
Jacob Fletcher
2c3da88b44 chore: consolidates server-side edit view props 2024-03-04 11:51:58 -05:00
Alessio Gravili
a90b7a65de Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-04 11:44:01 -05:00
Alessio Gravili
7ef0a5a550 chore: disable annoying deprecation warnings in other scripts 2024-03-04 11:43:56 -05:00
Elliot DeNolf
5433ea0762 chore(release): v3.0.0-alpha.10 [skip ci] 2024-03-04 11:42:20 -05:00
Jarrod Flesch
7162fd61fc chore: add exports for ui package, needed for e2e playwright 2024-03-04 11:38:34 -05:00
Jarrod Flesch
d4271cf618 chore: adjust lexical import paths to use @payloadcms/ui package import 2024-03-04 11:38:34 -05:00
James
cc7dbb19a5 chore: removes ts extensions from imports 2024-03-04 11:30:31 -05:00
Alessio Gravili
5381a23140 chore: silence very annoying node punycode deprecation warningd 2024-03-04 11:19:19 -05:00
Alessio Gravili
7bcffb9424 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-04 11:13:49 -05:00
Alessio Gravili
2fde4767a0 fix: file upload error due to undefined value in busboy.write() 2024-03-04 11:13:36 -05:00
Elliot DeNolf
2f6b0861d9 ci: split out plugins from core-build step 2024-03-04 11:12:54 -05:00
Dan Ribbens
c83eeefeb2 chore: release script tag and commit as default 2024-03-04 11:01:42 -05:00
Dan Ribbens
807227911a chore(release): v3.0.0-alpha.8 2024-03-04 11:01:22 -05:00
Dan Ribbens
db71c89e35 chore: turbo disable cache clean 2024-03-04 10:52:13 -05:00
Jacob Fletcher
8b29723317 chore: renames pages to views 2024-03-04 10:07:44 -05:00
Alessio Gravili
bef3ebf9cc Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-04 10:04:12 -05:00
Alessio Gravili
061e021cd4 chore(plugin-cloud-storage): remove outdated dev folder, lint & prettier, 2024-03-04 10:04:06 -05:00
Elliot DeNolf
55728fe332 chore: pin to workspace version of payload for peer deps 2024-03-04 10:02:27 -05:00
Alessio Gravili
b1b04c7e35 chore: add missing 'use client' in fields test suite 2024-03-04 09:55:19 -05:00
Elliot DeNolf
5b86a8d7c9 ci: adjust whitelist of release script 2024-03-04 09:51:22 -05:00
Alessio Gravili
44a7a5e692 chore(richtext-lexical): fix failing int test due to usage of old GraphQL client 2024-03-04 09:44:13 -05:00
Alessio Gravili
da33c80735 fix(richtext-lexical): handle payload objects for html converters properly 2024-03-04 09:39:57 -05:00
James
25935abf3a chore: redirect unauthenticated users 2024-03-04 09:36:42 -05:00
James
93e7914a86 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-04 09:33:23 -05:00
James
36231b88db chore: adds custom scss import 2024-03-04 09:33:18 -05:00
Jarrod Flesch
14c1ecd515 chore: adjust classnames 2024-03-04 08:51:45 -05:00
Jarrod Flesch
dd38e11a5d chore: fix verify route routing 2024-03-04 08:34:13 -05:00
Jarrod Flesch
9572bdcbf9 chore: cleans up root routing 2024-03-04 08:33:12 -05:00
James
9ad0efd85b chore: fixes bad imports 2024-03-03 13:08:16 -05:00
Elliot DeNolf
399b799002 ci: update release script 2024-03-03 13:01:59 -05:00
Elliot DeNolf
48fbedd8ee chore: remove incorrect package.json 2024-03-03 12:59:49 -05:00
Elliot DeNolf
a85dba8b49 chore: bump versions 2024-03-03 12:58:51 -05:00
Elliot DeNolf
64240bf70a chore: add release:alpha npm script 2024-03-02 15:45:35 -05:00
James
cd06011b5e Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-02 14:17:35 -05:00
James
4d29b74c29 chore: removes old unused files 2024-03-02 14:17:23 -05:00
Jarrod Flesch
e5a12ade90 chore: dynamically render all views with segment route 2024-03-02 01:55:19 -05:00
James
981fb7f330 chore: working poc for single admin view 2024-03-01 19:29:34 -05:00
James
7851cb81bb chore: renders Account within DefaultTemplate 2024-03-01 16:37:16 -05:00
James
4e586bf31f chore: poc for flattening routes 2024-03-01 16:34:48 -05:00
Elliot DeNolf
9860f1eb68 chore: update clean and clean:cache scripts 2024-03-01 16:33:54 -05:00
Alessio Gravili
9397f38929 fix(richtext-lexical): pass through correct lexical config in adapter 2024-03-01 16:18:25 -05:00
Alessio Gravili
540943109b chore: get fields test suite to run 2024-03-01 16:12:33 -05:00
James
73dee79a4c Merge branch 'feat/flatten-ui-routes' of github.com:payloadcms/payload into feat/flatten-ui-routes 2024-03-01 16:06:14 -05:00
James
894f8b8c77 chore: progress 2024-03-01 16:06:07 -05:00
Jarrod Flesch
056e24a653 chore: stub out required routes 2024-03-01 16:05:34 -05:00
Elliot DeNolf
4045bbb1bc ci: add feat/next-poc to build on push 2024-03-01 16:01:35 -05:00
Jarrod Flesch
2634557def chore: redirect user after login 2024-03-01 15:58:10 -05:00
Alessio Gravili
2af3d5b8b1 chore: add missing devDependencies 2024-03-01 15:58:10 -05:00
Elliot DeNolf
a9ea1b84cc chore(plugin-seo): fix import 2024-03-01 15:58:10 -05:00
Alessio Gravili
10fc2495cd chore(plugin-seo): include translations and ui 2024-03-01 15:58:10 -05:00
Alessio Gravili
e9f5e593ce chore: actually fix validations int test suite 2024-03-01 15:58:10 -05:00
Alessio Gravili
eec98c9674 chore: fix validations int test suite 2024-03-01 15:58:10 -05:00
Alessio Gravili
0fddeebbc6 chore: remove duplicate import from auth test suite 2024-03-01 15:58:10 -05:00
Alessio Gravili
125e9312c1 chore: correctly import lexical stuff in test suite 2024-03-01 15:58:10 -05:00
Jarrod Flesch
e6a305026d chore: redirect user after login 2024-03-01 15:56:53 -05:00
James
f5cf7c0ca7 chore: begins flattening admin ui pages 2024-03-01 15:54:47 -05:00
Alessio Gravili
4a903371ac chore: add missing devDependencies 2024-03-01 15:52:11 -05:00
Elliot DeNolf
13777c8773 chore(plugin-seo): fix import 2024-03-01 15:50:43 -05:00
Alessio Gravili
b38b749438 chore(plugin-seo): include translations and ui 2024-03-01 15:44:58 -05:00
Alessio Gravili
ff68a9f508 chore: actually fix validations int test suite 2024-03-01 15:38:45 -05:00
Alessio Gravili
4767ba6b9c chore: fix validations int test suite 2024-03-01 15:30:38 -05:00
Alessio Gravili
d7467d9b8e chore: remove duplicate import from auth test suite 2024-03-01 15:21:46 -05:00
Alessio Gravili
ab11081276 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-01 15:18:54 -05:00
Alessio Gravili
1e280928d8 chore: correctly import lexical stuff in test suite 2024-03-01 15:18:48 -05:00
James
e245689b85 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-01 15:16:52 -05:00
James
bd31694850 chore: updates app folder types / etc 2024-03-01 15:16:41 -05:00
Jacob Fletcher
97437838f8 chore(next): wires view actions (#5226) 2024-03-01 15:14:43 -05:00
Alessio Gravili
2c226a9c83 chore: _community test suite: remove rate limit config property 2024-03-01 15:11:58 -05:00
Alessio Gravili
7a06721e16 fix(richtext-lexical): Type issues 2024-03-01 15:09:23 -05:00
Alessio Gravili
ae0dd7b9c0 feat(richtext-lexical): working Cell 2024-03-01 15:03:18 -05:00
James
28d83c1e11 chore: merge 2024-03-01 14:47:48 -05:00
James
589d49af30 chore: attempts pre-building next 2024-03-01 14:47:21 -05:00
Alessio Gravili
9283e367b1 feat(richtext-lexical): uploads 2024-03-01 14:46:57 -05:00
Alessio Gravili
37fa2f8431 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-01 14:07:21 -05:00
Alessio Gravili
a3ffb80344 feat(richtext-lexical): relationships 2024-03-01 14:07:12 -05:00
Elliot DeNolf
5c0ffae67a chore(scripts): enable eslint for scripts/ 2024-03-01 14:06:24 -05:00
James
a216af40dc Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-01 13:46:55 -05:00
James
51e2fffe7e chore: moves sharp to peer dependencies of payload 2024-03-01 13:46:46 -05:00
Alessio Gravili
b6af5dcb3a feat(richtext-lexical): paragraph feature 2024-03-01 13:44:57 -05:00
Jarrod Flesch
2aa943bef2 chore: staticaly import edit tab views 2024-03-01 13:39:54 -05:00
Alessio Gravili
27ea4f76f0 feat(richtext-lexical): slateToLexicalFeature 2024-03-01 13:38:39 -05:00
Jarrod Flesch
1a4b6a66ae chore: imports react into buildColumns 2024-03-01 13:12:50 -05:00
Alessio Gravili
cf14b32355 feat(richtext-lexical): lexicalPluginToLexical 2024-03-01 13:04:58 -05:00
Jarrod Flesch
707c5cba41 chore: fix hiddenInput export 2024-03-01 13:01:00 -05:00
Jarrod Flesch
c803f92104 chore: fix imports from exports 2024-03-01 12:57:22 -05:00
Jarrod Flesch
96d5d025dc feat: wire in preview sizes (#5223) 2024-03-01 12:53:05 -05:00
James
91061235d8 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-01 12:40:56 -05:00
James
105ce757d0 chore: corrects exports for slate package 2024-03-01 12:40:47 -05:00
Jacob Fletcher
031b3a9f51 fix(ui): auto theme 2024-03-01 12:35:51 -05:00
James
1fa9ea7a0e chore: corrects useTranslation import 2024-03-01 12:33:57 -05:00
James
641ede20f3 chore: adds withPayload export 2024-03-01 12:27:43 -05:00
James
b5051008e3 chore: corrects exports for payload, react toastify import 2024-03-01 12:19:35 -05:00
James
4eabb97821 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-01 12:08:12 -05:00
James
76bf1bde87 chore: corrects relative imports 2024-03-01 12:08:05 -05:00
Jarrod Flesch
dfe5591822 chore: moves toastify scss file to layout file 2024-03-01 11:50:44 -05:00
Jacob Fletcher
b27d86c1a5 chore(ui): removes all instances of react-router-dom 2024-03-01 11:27:00 -05:00
Jarrod Flesch
c7b064c751 chore: fix list cell components without values 2024-03-01 11:22:28 -05:00
James
06a3d0e500 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-01 11:14:14 -05:00
James
1ffe3c4813 chore: corrects payload import to validations 2024-03-01 11:14:09 -05:00
Elliot DeNolf
a8c99d7594 chore: fix ui package build, richtext-slate reference 2024-03-01 10:40:23 -05:00
Elliot DeNolf
144e13245a chore: fix graphql package 2024-03-01 10:40:23 -05:00
Alessio Gravili
4ea0c7e875 feat(richtext-lexical): slateToLexical 2024-03-01 10:02:01 -05:00
Alessio Gravili
d38bbd9603 feat(richtext-lexical): lists 2024-03-01 09:54:02 -05:00
Jarrod Flesch
881a502cbc chore: remove outdated config properties (#5221) 2024-03-01 09:36:38 -05:00
James
cbecd918fc Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-03-01 09:30:49 -05:00
James
ff0044229a chore: merge 2024-03-01 09:30:37 -05:00
Alessio Gravili
175924d705 feat(richtext-lexical): indents 2024-03-01 09:29:52 -05:00
James
26c138908a chore: makes copy of scss for each package that needs it 2024-03-01 09:29:46 -05:00
Alessio Gravili
fd93a10376 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-03-01 09:24:11 -05:00
Alessio Gravili
486b3a1f44 feat(richtext-lexical): headings 2024-03-01 09:24:03 -05:00
Jacob Fletcher
cd63722e5e fix(ui): infinite rendering in document drawer 2024-03-01 09:17:24 -05:00
Jacob Fletcher
e75917a4d3 chore: sanitizes admin.preview from client config 2024-03-01 08:16:02 -05:00
Jacob Fletcher
b288bcbc18 chore(next): leave without saving (#5217) 2024-03-01 01:40:00 -05:00
Jarrod Flesch
5b2b104e37 feat: upload images rendering properly in admin panel (#5215) 2024-03-01 00:44:42 -05:00
Alessio Gravili
e9f2216f84 chore: update @faceless-ui/modal in all packages 2024-02-29 22:39:37 -05:00
Alessio Gravili
7d7d098efa feat(richtext-lexical): format features 2024-02-29 22:31:14 -05:00
Alessio Gravili
59494833b7 feat(richtext-lexical): treeview 2024-02-29 21:50:41 -05:00
Alessio Gravili
ddc059713d feat(richtext-lexical): testrecorder 2024-02-29 21:48:10 -05:00
Alessio Gravili
009703fabe feat(richtext-lexical): html converter 2024-02-29 21:44:21 -05:00
Alessio Gravili
b3b5f1b584 chore(richtext-lexical): make migrations feature folders lower-case 2024-02-29 21:37:21 -05:00
Alessio Gravili
7771f30270 chore(richtext-lexical): make feature folders lower-case 2024-02-29 21:36:27 -05:00
Alessio Gravili
8a26dddd08 chore: rename folders to make git recognize case changes 2024-02-29 21:31:26 -05:00
Alessio Gravili
98b4c1388e fix(richtext-lexical): Working Blocks 2024-02-29 21:26:18 -05:00
Elliot DeNolf
6d89f2160d ci: proper dependency graph for turbo to build in right order 2024-02-29 16:55:30 -05:00
James
3e8859b8dd Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-29 16:29:08 -05:00
James
27babe6677 chore: adds next build script 2024-02-29 16:28:59 -05:00
Jacob Fletcher
2a6a3e624d chore(next): resolves type errors 2024-02-29 16:25:14 -05:00
Elliot DeNolf
6ff42d1627 ci: fixed versioning (#5214)
* chore(deps): add lerna-lite

* feat: update-1

* feat(db-mongodb): update 2

* chore: lerna init

* chore: add version option to lerna config

* chore(ci): add gh usernames to changelog and user root package.json for version

* chore(ci): whitelist poc branches

* chore(ci): add contributors section

* chore(ci): use turbo for prepublishOnly scripts, enable caching

* chore(deps): update turborepo, add execa

* feat(plugin-stripe): adjust type import

* chore: remove lerna-lite

* chore(ci): new and improved release script for fixed versioning

* chore: remove unused lerna-lite packages

* chore: sync root package.json version

* chore: remove remnants of bundler packages

* chore(plugin-seo): update packagea.json from main, disable build

* chore: disable turbo caching

* chore(ci): update release script

* chore: sync pnpm-lock.yaml

* chore: ci cleanup
2024-02-29 16:01:51 -05:00
Alessio Gravili
7188cfe85a feat(richtext-lexical): initial working BlocksFeature 2024-02-29 15:46:10 -05:00
Dan Ribbens
cccdba57fe chore: add hasMany text field feature to ui (#5213)
* chore: add hasMany text field feature to ui

* chore: remove bson dependency
2024-02-29 14:52:38 -05:00
James
b3bd502028 chore: slate types 2024-02-29 14:46:04 -05:00
Jacob Fletcher
423b33e088 chore: bumps faceless dependencies to latest and removes from next 2024-02-29 14:42:38 -05:00
Alessio Gravili
edb63380ed Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-02-29 14:41:48 -05:00
Alessio Gravili
7175bb7b47 fix: @payloadcms/ui alias 2024-02-29 14:41:42 -05:00
Elliot DeNolf
c817916e0f chore(ui): package.json adjustments 2024-02-29 14:40:38 -05:00
James
426b48bd13 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-29 14:31:19 -05:00
Jarrod Flesch
88ba714b59 chore: adjusts ui package.json 2024-02-29 14:30:57 -05:00
James
795fdd477c chore: buildable slate 2024-02-29 14:30:47 -05:00
Jarrod Flesch
6f021049ab chore: fix upload test suite dirname referencing 2024-02-29 14:15:44 -05:00
Jacob Fletcher
bbdc137f64 chore(ui): properly types client-side field validations 2024-02-29 13:48:15 -05:00
James
843974d810 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-29 13:39:58 -05:00
James
b97f025ea7 chore: exports 2024-02-29 13:39:54 -05:00
Jacob Fletcher
670a32271a chore(ui): exports Modal and useModal hook 2024-02-29 13:22:54 -05:00
Jacob Fletcher
71a33f2f02 chore(ui): exports useWindowInfo hook 2024-02-29 13:20:57 -05:00
Jacob Fletcher
f477a215cf fix(next): metadata base url 2024-02-29 12:47:13 -05:00
Jacob Fletcher
12b09cf963 fix: beforeChange field validation args 2024-02-29 12:47:07 -05:00
Alessio Gravili
bedd7b6f41 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc 2024-02-29 12:37:54 -05:00
Alessio Gravili
ee5ae22779 fix: validation issues for Relationship and Upload fields 2024-02-29 12:37:44 -05:00
Jacob Fletcher
316f0722d8 chore(next): removes app dir 2024-02-29 12:31:17 -05:00
Elliot DeNolf
34cb30bb39 Merge pull request #5209 from payloadcms/feat/next-poc-ci
ci: next-poc updates
2024-02-29 12:27:26 -05:00
Alessio Gravili
84ec05a257 fix: validations 2024-02-29 12:26:25 -05:00
Jarrod Flesch
78bdfefc66 chore: use client i18n inside initPage 2024-02-29 12:24:56 -05:00
Elliot DeNolf
33899405ba chore(plugin-cloud-storage): disable build temporarily 2024-02-29 12:24:32 -05:00
Elliot DeNolf
b3fd720668 chore(plugin-cloud-storage): more req stuff 2024-02-29 12:24:07 -05:00
James
dc7a447baf chore: merge 2024-02-29 12:16:34 -05:00
James
138b56a429 chore: fixes doc preferences fetching 2024-02-29 12:15:51 -05:00
Elliot DeNolf
4699a37b4b chore(plugin-cloud): remove req refs, UNTESTED 2024-02-29 12:14:41 -05:00
Dan Ribbens
940e21e74f chore: reverts mongodb dependency update (#5211) 2024-02-29 12:08:05 -05:00
Alessio Gravili
b6f330cc91 fix: add back user to iterateFields condition 2024-02-29 12:04:34 -05:00
Alessio Gravili
f388a46484 fix: buildStateFromSchema call from buildFormState.ts 2024-02-29 12:00:58 -05:00
Elliot DeNolf
a66d023f84 chore: more reference and export fixes 2024-02-29 11:52:19 -05:00
James
188cad3a67 chore: returns req from initPage 2024-02-29 11:44:36 -05:00
Elliot DeNolf
4d5bdf6b6f chore(plugin-form-builder): fix some imports 2024-02-29 11:27:17 -05:00
Elliot DeNolf
96810788fc chore(ui): export TextFieldProps 2024-02-29 11:26:55 -05:00
Jarrod Flesch
2f356fe26d feat: 3.0 parity with array hook functions (#5210) 2024-02-29 10:59:38 -05:00
Alessio Gravili
ab9e2729cd fix: weakly typed ValidateOptions if no field config type is passed in 2024-02-29 10:58:52 -05:00
Jarrod Flesch
203f105974 feat: 3.0 bulk edit parity (#5208) 2024-02-29 10:51:02 -05:00
Elliot DeNolf
972b8e110f chore: proper lexical reference from test 2024-02-29 10:50:41 -05:00
Elliot DeNolf
31d0b8acbf ci: use turbo for build 2024-02-29 10:41:27 -05:00
Jacob Fletcher
0152560fd8 chore(ui): builds package 2024-02-29 10:12:43 -05:00
Elliot DeNolf
e78214c38d chore(plugin-sentry): disable build temporarily 2024-02-29 10:00:16 -05:00
James
79ca759774 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-29 09:56:13 -05:00
James
5d1e5ca2ff chore: builds graphql 2024-02-29 09:56:03 -05:00
Alessio Gravili
8d13ae9e1e feat(richtext-lexical): BlockQuotes 2024-02-29 09:54:07 -05:00
Alessio Gravili
b763df5730 fix(richtext-lexical): Link drawer: form state error on initial load 2024-02-28 21:17:53 -05:00
Alessio Gravili
a237388bd4 fix(richtext-*): Link Drawer conditions - missing updates from server 2024-02-28 20:59:52 -05:00
Alessio Gravili
610f3525a2 chore: remove deprecation tracing from dev script 2024-02-28 20:31:49 -05:00
Alessio Gravili
fff692bd0c feat(db-postgres): upgrade drizzle-orm and @libsql/client 2024-02-28 18:00:50 -05:00
Alessio Gravili
a2fff64bd8 feat: remove isomorphic-fetch 2024-02-28 17:47:29 -05:00
Alessio Gravili
c00074e40b chore: upgrade release-it and @release-it/conventional-changelog 2024-02-28 17:44:44 -05:00
Alessio Gravili
93319402cb feat: upgrade @google-cloud/storage 2024-02-28 17:41:13 -05:00
Alessio Gravili
4d2d359b06 feat: remove node-fetch 2024-02-28 17:36:48 -05:00
Elliot DeNolf
0cc4a7d238 chore: make packages public 2024-02-28 17:26:41 -05:00
Alessio Gravili
026c6fac2e feat!: upgrade sharp, bump minimum node version to 18.17.0 2024-02-28 17:11:58 -05:00
Alessio Gravili
d56ac18585 feat!: require node v18 as minimum version 2024-02-28 17:02:33 -05:00
Alessio Gravili
e90d8dcdb5 feat: initial lexical support (#5206)
* chore: explores pattern for rscs in lexical

* WORKING!!!!!!

* fix(richtext-slate): field map path

* Working Link Drawer

* fix issues after merge

* AlignFeature

* Fix AlignFeature

---------

Co-authored-by: James <james@trbl.design>
2024-02-28 16:55:37 -05:00
Jarrod Flesch
1a1c207a97 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-28 16:46:56 -05:00
Jarrod Flesch
9b1203185d chore: adjust richtext field editor type 2024-02-28 16:46:50 -05:00
Jacob Fletcher
3214af53b7 chore: fixes bad merge 2024-02-28 16:32:11 -05:00
James
ec6b58d7d4 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-28 16:27:42 -05:00
James
0d888c9eeb chore: debounces form state from server 2024-02-28 16:27:33 -05:00
Elliot DeNolf
f957f1d2bb chore: logging for init-next 2024-02-28 16:18:02 -05:00
Jacob Fletcher
730344a201 chore(next): ssr live preview (#5205) 2024-02-28 15:39:01 -05:00
James
c5e74ca5e0 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-28 15:30:06 -05:00
James
3216c29766 chore: simplifies form state revalidation 2024-02-28 15:29:57 -05:00
Elliot DeNolf
db5babf012 chore: package.json duplicate keys 2024-02-28 14:51:24 -05:00
James
da147aacd4 chore: improper searchParams.get 2024-02-28 14:46:33 -05:00
James
8c80c1d077 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-28 14:40:57 -05:00
James
7ff646d044 chore: cleans up a few merges 2024-02-28 14:40:44 -05:00
Elliot DeNolf
cdc1e024f1 chore: --init-next improvements and tests 2024-02-28 14:16:05 -05:00
Dan Ribbens
b9dec2f714 Chore/next poc merge main (#5204)
* wip moves payload, user and data into partial req

* chore: adjust req type

* chore(next): installs sass and resolves type errors

* feat: working login route/view

* fix: me route

* chore(next): scaffolds access routes (#4562)

* chore(next): scaffolds admin layout and dashboard view (#4566)

* chore(next): builds initPage utility (#4589)

* feat(3.0): next route handlers (#4590)

* chore: removes old files

* chore(next): ssr list view (#4594)

* chore: removes old files

* chore: adjusts graphql file imports to align with new operation exports

* chore: allows for custom endpoints

* chore: cleanup

* chore(next): ssr edit view (#4614)

* chore(ui): ssr main nav (#4619)

* chore(next): ssr account view (#4620)

* chore(next): ssr auth views and document create (#4631)

* chore(next): ssr globals view (#4640)

* chore(next): scaffolds document layout (#4644)

* chore(next): ssr versions view (#4645)

* chore(next): ssr field conditions (#4675)

* chore(next): ssr field validations (#4700)

* chore(next): moves dashboard view into next dir

* chore(next): moves account view into next dir

* chore(next): moves global edit view into next dir

* chore(next): returns isolated configs and locale from initPage

* chore(next): ssr api view (#4721)

* feat: adds i18n functionality within Rest API, Local and Client contexts (#4749)

* chore: separate client translation groups with empty line

* chore: add missing translation used in db adapters

* chore: simplify next/routes export and import paths

* chore: renames PayloadT to Payload

* chore(next): custom views (#4748)

* chore: fix translation tsconfig

* chore: adjust other package ts-configs that rely on translations

* chore(next): installs @payloadcms/ui as direct dependency

* chore(next): progress to build

* chore(next): migrates types (#4792)

* fixes acccept-language detection

* chore(next): moves remaining components out from payload core (#4794)

* chore(deps): removes all unused dependencies from payload core (#4797)

* chore(next): achieves buildable state (#4803)

* adds Translation component and removes more react-i18next

* fixes up remaining translation strings

* fixes a few i18n TODO's

* chore: remaining translation strings without colons

* chore: adds missing ja translations

* chore(next): ssr group field (#4830)

* chore: removes placeholder t function

* chore: removes old file

* chore(bundler-webpack): removes webpack bundler

* chore(bundler-vite): removes vite bundler

* chore(next): ssr tabs field (#4863)

* chore(next): ssr row field

* chore(next): ssr textarea field

* chore(next): wires server action into document edit view (#4873)

* chore(next): conditional logic (#4880)

* chore(next): ssr radio, point, code, json, ui, and hidden fields (#4891)

* chore(next): ssr collapsible field (#4894)

* chore: remove findByID from req

* chore: adjusts file property on request type

* comment clarification

* chore: wires up busboy with Requst readstream

* chore: ports over express-fileupload into a NextJS compatible format

* chore: adjust upload file structure

* chore: adds try/catch around routes, corrects a few route responses

* chore: renames file/function

* chore: improve req type safety in local operations, misc req.files replacements

* chore: misc type and fn export changes

* chore: ensures root routes take pass unmodified request to root routes

* chore: improve types

* chore: consolidates locale api req initialization (#4922)

* chore(next): overhauls field rendering strategy (#4924)

* chore(next): ssr array field (#4937)

* chore(next): ssr blocks field (#4942)

* chore(next): ssr upload field and document drawer (#4957)

* chore(next): wires form submissions (#4982)

* chore: api handler adjustments

* feat: adds graphql playground handler

* adds credentials include setting to playground

* remove old playground init, stub graphql handler location

* fix: allow for null fallbackLocale

* fix: correctly prioritize locales passed as null

* chore: move all graphql code into next package

* graphql changes

* chore: semi working version of graphql http layer

* gql fix attempts

* rm console log

* chore: partial gql changes

* chore: adds gql and gql-http back into payload

* chore: removes collection from req

* chore: separates graphql package out for schema generation

* chore: dep cleanup

* chore: move graphql handlers

* chore: removes unused deps

* chore(next): ssr list view (#5032)

* chore: refactor response handler order for custom endpoints

* chore: add back in condition for collection GET path with 2 slugs

* chore: rm optional chain

* chore: import sort route file

* chore: allows custom endpoints to attempt before erroring

* feat: adds memoization to translation functions (#5036)

* chore: fix APIError import

* chore: return attemptCustomEndpointBeforeError responses

* chore(next): properly instantiates table columns

* fix(next): attaches params to req and properly assigns prefs key (#5042)

* chore: reorganize next route order

* chore(next): adds RouteError handler to next routes

* chore: builds payload successfully

* chore: misc file omissions

* fix(ui): maintains proper column order

* fix(ui): ensures first cell is a link

* fix(next): properly copies url object in createPayloadRequest (#5064)

* fix(ui): bumps react-toastify to v10.0.4 to fix hydration warnings

* feat: add route for static file GET requests (#5065)

* chore(next): allows resolved config promise to be thread through initPage (#5071)

* chore(ui): conditionally renders field label from props

* feat(next): next install script

* chore: pass config to route handlers

* feat: initial test suite framework (#4929)

* chore(next): renderable account, api, and create first user views (#5084)

* fix(next): properly parses search params in find, update, and delete handlers (#5088)

* chore(next): ssr versions view (#5085)

* chore: adds homepage for scss testing

* chore: moves dev folder to top, establishes new test pattern

* chore: working turbopack

* chore: sets up working dynamic payload-config imports

* remove unused code

* chore: rm console log

* misc

* feat: correctly subs out ability to boot REST API within same process

* chore: WIP dev suites

* chore: removes need for REST_API folder in test dir

* removes duplicate bootAdminPanel fn

* misc

* specify default export

* chore: sets up jest to work with next/jest

* chore: progress to mongodb and sharp builds

* chore: passing community tests

* chore: sorta workin

* chore: adjust payload-config import

* chore: adds rest client for Next handlers

* chore: removes test garb

* chore: restores payload-config tsconfig path temporarily

* chore: establishes pattern for memory db during tests

* chore: bumps mongoose to 7

* chore(next): 404s on nested create urls

* chore: functional _community e2e

* chore: increases e2e expect timeout

* fix(next): sanitizes locale toString from client config

* chore: type fixes

* chore: pulls mongodb from main

* chore: uses graphql to log user in

* feat: passing auth test suite

* chore(ui): threads params through context and conditionally renders document tabs (#5094)

* feat(ui): adds params context (#5095)

* chore: removes unecessary memory allocation for urlPropertiesObject object

* chore: passing graphql test suite

* chore: removes references to bson

* chore: re-enables mongodb memory server for auth test suite

* chore: replace bson with bson-objectid

* feat: passing collections-rest int suite

* chore: fixes bad imports

* chore: more passing int suites

* feat: passing globals int tests

* feat: passing hooks int test suite

* chore: remove last express file

* chore: start live-preview int test migration

* chore: passing localization int tests

* passing relationships int tests

* chore: partial passing upload int tests

* chore: fixes scss imports

* chore(ui): renders document info provider at root (#5106)

* chore: adds schema path to useFieldPath provider, more passing tests

* chore: begins work to optimize translation imports

* chore: add translations to ui ts-config references

* chore: add exports folder to package json exports

* chore: adds readme how-to-use instructions

* chore: attempts refactor of translation imports

* chore: adds authentication:account translation key to server keys

* chore: finishes translation optimization

* chore: ignores warnings from mongodb

* chore(ui): renders live document title (#5115)

* chore(ui): ssr document tabs (#5116)

* chore: handles redirecting from login

* chore: handle redirect with no searchParams

* chore: handle missing segments

* chore(next): migrates server action into standalone api endpoint (#5122)

* chore: adjust dashboard colection segments

* test: update e2e suites

* fix(ui): prevents unnecessary calls to form state

* chore: fix finding global config fields from schema path

* fix(next): executes root POST endpoints

* chore(ui): ignores values returned by form state polling

* chore: scaffolds ssr rte

* chore: renders client leaves

* chore: server-side rendered rich text elements

* chore: defines ClientFunction pattern

* chore(ui): migrates relationship field

* chore: adds translations, cleans up slate

* chore: functional slate link

* chore: slate upload ssr

* chore: relationship slate ssr

* chore: remaining slate ssr

* chore: fixes circular workspace dep

* chore: correct broken int test import paths

* chore: remove media files from root

* chore: server renders custom edit view

* fix(ui): resolves infinite loading in versions view

* fix(next): resolves global edit view lookup

* chore: payload builds

* chore: delete unused files

* chore: removes local property from payload

* chore: adds mongodb as dev dep in db-mongodb package

* chore: hide deprecation warnings for tempfile and jest-environment-jsdom

* chore: remove all translations from translations dist

* chore: clean ts-config files

* chore: simple type fixes

* chore(ui): server renders custom list view

* chore: fix next config payload-config alias

* chore: adds turbo alias paths

* chore: adjusts translation generation

* chore: improve auth function

* chore: eslint config for packages/ui

* chore(ui): exports FormState

* chore(next): migrates account view to latest patterns

* chore: disable barbie mode

* chore(ui): lints

* chore(next): lints

* chore: for alexical

* chore: custom handler type signature adjustment

* fix: non-boolean condition result causes infinite looping (#4579)

* chore(richtext-lexical): upgrade lexical from v0.12.5 to v0.12.6 (#4732)

* chore(richtext-lexical): upgrade all lexical packages from 0.12.5 to 0.12.6

* fix(richtext-lexical): fix TypeScript errors

* fix indenting

* feat(richtext-lexical): Blocks: generate type definitions for blocks fields (#4529)

* feat(richtext-lexical)!: Update lexical from 0.12.6 to 0.13.1, port over all useful changes from playground (#5066)

* feat(richtext-lexical): Update lexical from 0.12.6 to 0.13.1, port over all useful changes from playground

* chore: upgrade lexical version used in monorepo

* chore: remove the 3

* chore: upgrade nodemon versions (#5059)

* feat: add more options to addFieldStatePromise so that it can be used for field flattening (#4799)

* feat(plugin-seo)!: remove support for payload <2.7.0 (#4765)

* chore(plugin-seo): remove test script from package.json (#4762)

* chore: upgrade @types/nodemailer from v6.4.8 to v6.4.14 (#4733)

* chore: revert auth and initPage changes

* chore(next): moves edit and list views (#5170)

* fix: "The punycode module is deprecated" warning by updating nodemailer

* chore: adjust translations tsconfig paths in root

* chore: fix merge build

---------

Co-authored-by: Jarrod Flesch <jarrodmflesch@gmail.com>
Co-authored-by: Jacob Fletcher <jacobsfletch@gmail.com>
Co-authored-by: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com>
Co-authored-by: Elliot DeNolf <denolfe@gmail.com>
Co-authored-by: James <james@trbl.design>
Co-authored-by: Alessio Gravili <alessio@gravili.de>
Co-authored-by: Alessio Gravili <70709113+AlessioGr@users.noreply.github.com>
2024-02-28 13:44:17 -05:00
Elliot DeNolf
0b296cb271 chore: new dev script 2024-02-28 12:17:25 -05:00
Elliot DeNolf
e62cca40ac chore: fix up withPayload and devnew 2024-02-28 12:06:58 -05:00
Jarrod Flesch
170ae3602b feat: extends useSearchParams hook (#5203) 2024-02-28 09:33:59 -05:00
Jacob Fletcher
96349be350 chore(next): wires admin.hidden property (#5200) 2024-02-27 16:59:11 -05:00
Elliot DeNolf
62e4828b0d chore: swap @payload-config dynamically in devnew script 2024-02-27 16:45:07 -05:00
Elliot DeNolf
0d58a20d70 chore: change payload-config to @payload-config 2024-02-27 16:45:07 -05:00
Jacob Fletcher
448288834a chore: sanitizes admin.hidden from client config 2024-02-27 16:21:39 -05:00
Alessio Gravili
c0fc258848 lexical stuff 2024-02-27 16:13:09 -05:00
Elliot DeNolf
6f1da7ad1f chore: remove duplicative copyfiles 2024-02-27 15:00:51 -05:00
Elliot DeNolf
c0e2b6ac4d chore(create-payload-app): add --init-next 2024-02-27 14:59:40 -05:00
Elliot DeNolf
99ebce0462 chore: update next install script 2024-02-27 13:29:36 -05:00
Jacob Fletcher
9831629430 chore: consolidates createClientConfig 2024-02-27 13:23:20 -05:00
Jarrod Flesch
e0ce5b7d12 chore: organizes translations 2024-02-27 13:11:03 -05:00
Jarrod Flesch
e757bbc1b2 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-27 12:33:10 -05:00
Jarrod Flesch
f2d90fac26 chore: fixes find for fieldSchema globals 2024-02-27 12:33:03 -05:00
Alessio Gravili
a33e150312 feat(richtext-lexical): Lexical progress 2024-02-27 12:26:12 -05:00
Jarrod Flesch
e5e9a14de4 chore: make editor prop optional 2024-02-27 10:29:58 -05:00
Jarrod Flesch
07311579af Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-27 09:04:04 -05:00
Jacob Fletcher
a517b7fb00 chore(next): generates metadata (#5178) 2024-02-26 23:47:36 -05:00
Jacob Fletcher
7474e7e7bb chore(i18n): adds missing version translation 2024-02-26 16:57:25 -05:00
Jacob Fletcher
7a8ecf7377 chore(next): migrates getNextT to getNextI18n (#5177) 2024-02-26 16:04:34 -05:00
Jarrod Flesch
def97afd9b chore: fix translations tsconfig alias 2024-02-26 16:02:42 -05:00
Elliot DeNolf
6ba41af6dc chore(scripts): devnew script 2024-02-26 15:54:47 -05:00
Alessio Gravili
a88b35f919 chore(richtext-*): lint & prettier 2024-02-26 15:45:28 -05:00
Alessio Gravili
a0cf2ea56b fix(richtext-*): RichText Cell components (#5174)
* fix(richtext-*): RichText Cell components

* better code
2024-02-26 15:37:50 -05:00
Alessio Gravili
75c4b4f234 fix: i18nInit doesn't have to be async, richtext i18n types (#5176) 2024-02-26 15:25:28 -05:00
Jarrod Flesch
37177f1226 chore: adds withPayload to next package 2024-02-26 14:55:47 -05:00
Jarrod Flesch
18fb27d2f7 chore: adjust translations tsconfig paths in root 2024-02-26 14:09:57 -05:00
Alessio Gravili
ee054c3181 chore: update lockfile 2024-02-26 13:48:45 -05:00
Alessio Gravili
594a3a1321 fix: "The punycode module is deprecated" warning by updating nodemailer 2024-02-26 13:44:17 -05:00
Alessio Gravili
fca72c2b95 chore(eslint-config-payload): improve perfectionist object sort order (#4678) 2024-02-26 13:41:58 -05:00
Alessio Gravili
4048f466c2 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next-poc-more-merges 2024-02-26 13:39:59 -05:00
Alessio Gravili
5a28bbbc9b chore: upgrade @types/nodemailer from v6.4.8 to v6.4.14 (#4733) 2024-02-26 11:53:49 -05:00
Alessio Gravili
55294701f0 chore: eslint improvements (#4739)
* chore: add @typescript-eslint/prefer-ts-expect-error rule

* chore: fix @typescript-eslint/prefer-ts-expect-error rule

* chore: disable useless class-methods-use-this eslint rule

* chore: only warn for no-unused-vars rule

* remove unused ts-expect-error

* undo admin changes
2024-02-26 11:53:37 -05:00
Alessio Gravili
b36ddfb3c3 chore(plugin-seo): add to CI, minor package.json improvements (#4761)
* chore: add plugin-seo to CI

* chore(plugin-seo): minor package.json improvements
2024-02-26 11:53:26 -05:00
Alessio Gravili
faef85b78f chore(plugin-seo): remove test script from package.json (#4762) 2024-02-26 11:52:23 -05:00
Alessio Gravili
06c8f5de32 feat(plugin-seo)!: remove support for payload <2.7.0 (#4765) 2024-02-26 11:51:01 -05:00
Jarrod Flesch
eb6af97b42 chore: properly type headers in auth fn 2024-02-26 11:44:21 -05:00
Jarrod Flesch
601e94d370 chore: return cookies from auth fn 2024-02-26 11:43:55 -05:00
Alessio Gravili
640ff152cc feat: add more options to addFieldStatePromise so that it can be used for field flattening (#4799) 2024-02-26 11:41:34 -05:00
Jarrod Flesch
de19cc8afe Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-26 11:38:42 -05:00
Jarrod Flesch
214f852a98 chore: revert auth and initPage changes 2024-02-26 11:38:32 -05:00
Jacob Fletcher
c6b684df89 chore(next): moves edit and list views (#5170) 2024-02-26 11:20:30 -05:00
Alessio Gravili
cb3efb157f chore: upgrade nodemon versions (#5059) 2024-02-26 11:11:39 -05:00
Alessio Gravili
17df48f9fa chore: remove the 3 2024-02-26 10:42:06 -05:00
Alessio Gravili
728d87028b chore: commit intellij run configurations (#4653)
* chore: update .gitignore

* chore: update .gitignore

* chore: commit IntelliJ run configurations
2024-02-26 10:17:26 -05:00
Jarrod Flesch
131feabafe Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-26 09:41:31 -05:00
Jarrod Flesch
a6cf73b6d1 chore: custom handler type signature adjustment 2024-02-26 09:41:19 -05:00
Alessio Gravili
1d7fb0e43c Merge pull request #5168 from payloadcms/feat/next-poc-merger
feat: merge lexical changes from main to next-poc
2024-02-26 09:30:48 -05:00
Jarrod Flesch
bf11eacf5a chore: for alexical 2024-02-26 08:50:24 -05:00
Jarrod Flesch
513c29d349 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-26 08:41:15 -05:00
Jarrod Flesch
b68f9f157c chore: improve auth function 2024-02-26 08:36:02 -05:00
Jacob Fletcher
6b9b98ffdd chore(next): lints 2024-02-25 22:44:35 -05:00
Jacob Fletcher
5f7b4a9434 chore(ui): lints 2024-02-25 22:43:33 -05:00
Elliot DeNolf
8e7d110a7a chore(release): richtext-lexical/0.7.0 [skip ci] 2024-02-25 16:55:32 -05:00
Alessio Gravili
782053a6ec feat(richtext-lexical)!: Update lexical from 0.12.6 to 0.13.1, port over all useful changes from playground (#5066)
* feat(richtext-lexical): Update lexical from 0.12.6 to 0.13.1, port over all useful changes from playground

* chore: upgrade lexical version used in monorepo
2024-02-25 16:55:10 -05:00
Alessio Gravili
fdc72c27b6 feat(richtext-lexical): AddBlock handle for all nodes, even if they aren't empty paragraphs (#5063) 2024-02-25 16:49:11 -05:00
Alessio Gravili
8d502d2cb7 fix(richtext-lexical): do not remove adjacent paragraph node when inserting certain nodes in empty editor (#5061) 2024-02-25 16:48:54 -05:00
Máté Tallósi
1df3065884 feat(richtext-lexical): add justify aligment to AlignFeature (#4035) (#4868) 2024-02-25 16:48:46 -05:00
Elliot DeNolf
cc2ff8e3cb chore(release): richtext-lexical/0.6.1 [skip ci] 2024-02-25 16:48:33 -05:00
Alessio Gravili
bce821dee9 fix(richtext-lexical): make editor reactive to initialValue changes (#5010) 2024-02-25 16:48:20 -05:00
Elliot DeNolf
9e67efbd1b chore(release): richtext-lexical/0.6.0 [skip ci] 2024-02-25 16:48:01 -05:00
Alessio Gravili
5f081d038e feat(richtext-lexical): Blocks: generate type definitions for blocks fields (#4529) 2024-02-25 16:47:50 -05:00
Elliot DeNolf
d434925f0b chore(release): richtext-lexical/0.5.2 [skip ci] 2024-02-25 16:42:43 -05:00
Alessio Gravili
1b62a57e7c chore(richtext-lexical): upgrade lexical from v0.12.5 to v0.12.6 (#4732)
* chore(richtext-lexical): upgrade all lexical packages from 0.12.5 to 0.12.6

* fix(richtext-lexical): fix TypeScript errors

* fix indenting
2024-02-25 16:42:40 -05:00
Alessio Gravili
13447f0b4f fix: non-boolean condition result causes infinite looping (#4579) 2024-02-25 16:41:01 -05:00
Elliot DeNolf
327810390e chore(release): richtext-lexical/0.5.1 [skip ci] 2024-02-25 16:22:28 -05:00
Alessio Gravili
f8071ce942 fix(richtext-lexical): z-index issues (#4570) 2024-02-25 16:22:16 -05:00
Elliot DeNolf
2f858e29cb chore(release): richtext-lexical/0.5.0 [skip ci] 2024-02-25 16:21:57 -05:00
Alessio Gravili
1eaecf7568 chore: disable barbie mode 2024-02-25 16:09:06 -05:00
Jacob Fletcher
e83747e7ed chore(next): migrates account view to latest patterns 2024-02-23 17:18:11 -05:00
Jacob Fletcher
3260d9376e chore(ui): exports FormState 2024-02-23 16:53:13 -05:00
Alessio Gravili
827e825e53 chore: eslint config for packages/ui 2024-02-23 15:48:21 -06:00
Jarrod Flesch
0521ae4c75 chore: adjusts translation generation 2024-02-23 14:34:54 -05:00
Jarrod Flesch
3deb5dbb9b Merge remote-tracking branch 'refs/remotes/origin/feat/next-poc' into feat/next-poc 2024-02-23 13:20:55 -05:00
Jarrod Flesch
d58c3bd3d1 chore: adds turbo alias paths 2024-02-23 13:19:26 -05:00
Jacob Fletcher
298bfa81b6 chore: fixes jarrods negligence 2024-02-23 13:17:57 -05:00
Jarrod Flesch
a9d1d1a63a chore: fix next config payload-config alias 2024-02-23 13:16:45 -05:00
Jarrod Flesch
e5c2a7f176 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-23 13:05:08 -05:00
Jarrod Flesch
da05003a5c chore: simple type fixes 2024-02-23 13:04:50 -05:00
Jacob Fletcher
b9dfa1aafe chore(ui): server renders custom list view 2024-02-23 12:58:48 -05:00
Jarrod Flesch
a57410133a chore: clean ts-config files 2024-02-23 12:23:07 -05:00
Jarrod Flesch
f26e646cfc chore: remove all translations from translations dist 2024-02-23 11:04:33 -05:00
Jarrod Flesch
2a755b0e65 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-23 10:39:05 -05:00
Jarrod Flesch
5fdcb322c8 chore: adds mongodb as dev dep in db-mongodb package 2024-02-23 10:38:38 -05:00
Elliot DeNolf
76afc2b3ff chore: hide deprecation warnings for tempfile and jest-environment-jsdom 2024-02-23 10:17:55 -05:00
Jarrod Flesch
6eb4f7e4a1 chore: removes local property from payload 2024-02-23 10:02:59 -05:00
James
80412a7c2b chore: delete unused files 2024-02-23 09:59:07 -05:00
James
478b2cb7a2 chore: payload builds 2024-02-23 09:57:59 -05:00
James
bdc00a152c Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-23 09:55:23 -05:00
James
c7cec1b2f1 chore: fixes circular workspace dep 2024-02-23 09:55:12 -05:00
Jacob Fletcher
178f3cd4a3 fix(next): resolves global edit view lookup 2024-02-22 17:12:56 -05:00
Jacob Fletcher
3340d39f67 fix(ui): resolves infinite loading in versions view 2024-02-22 17:10:48 -05:00
Jacob Fletcher
5e7c39e42c chore: server renders custom edit view 2024-02-22 16:45:08 -05:00
Jarrod Flesch
ab479ab885 chore: remove media files from root 2024-02-22 16:23:35 -05:00
Jarrod Flesch
65081d995e chore: correct broken int test import paths 2024-02-22 16:19:40 -05:00
James
05b2692eb5 chore: remaining slate ssr 2024-02-22 14:48:09 -05:00
James
ca7b8e589e chore: relationship slate ssr 2024-02-22 14:37:59 -05:00
James
56c325b526 chore: slate upload ssr 2024-02-22 14:20:13 -05:00
James
732402159c chore: functional slate link 2024-02-22 12:13:19 -05:00
James
1ef3b9ed13 chore: adds translations, cleans up slate 2024-02-22 11:51:07 -05:00
James
ef43a76b0b Merge branch 'feat/next-poc' of github.com:payloadcms/payload into chore/next-rte 2024-02-22 11:18:38 -05:00
James
4003a8023c chore: defines ClientFunction pattern 2024-02-22 10:55:51 -05:00
Jacob Fletcher
102205ff71 chore(ui): migrates relationship field 2024-02-22 09:31:18 -05:00
Jarrod Flesch
b736e5d971 chore: partity change from main 2024-02-22 08:24:15 -05:00
James
5720009e29 chore: server-side rendered rich text elements 2024-02-21 17:34:53 -05:00
Jacob Fletcher
04e2d1a89a chore: renders client leaves 2024-02-21 14:24:59 -05:00
Jacob Fletcher
bc0525589c chore: scaffolds ssr rte 2024-02-21 13:56:04 -05:00
Jacob Fletcher
122e8ac9d6 chore(ui): ignores values returned by form state polling 2024-02-21 10:35:34 -05:00
Jacob Fletcher
dc7b110da2 fix(next): executes root POST endpoints 2024-02-21 09:51:19 -05:00
Jarrod Flesch
37259baf08 chore: fix finding global config fields from schema path 2024-02-21 09:27:07 -05:00
Jarrod Flesch
d87d095fe9 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-21 09:22:11 -05:00
Jacob Fletcher
44a1baa41f fix(ui): prevents unnecessary calls to form state 2024-02-21 09:11:19 -05:00
Jarrod Flesch
a1bc60145c chore: adjusts endpoint for buildFormState 2024-02-20 23:13:48 -05:00
Elliot DeNolf
802919e6ea test: update e2e suites 2024-02-20 16:26:09 -05:00
Elliot DeNolf
1f674b5b86 chore: adjust dashboard colection segments 2024-02-20 16:25:51 -05:00
Jarrod Flesch
53b15f4507 Merge remote-tracking branch 'origin/feat/next-poc' into feat/next/test-suite 2024-02-20 15:56:26 -05:00
Jarrod Flesch
a5e2fa80e8 chore: adds schema path to useFieldPath provider, more passing tests 2024-02-20 15:56:11 -05:00
Jacob Fletcher
f10f62cebd chore(next): migrates server action into standalone api endpoint (#5122) 2024-02-20 15:14:42 -05:00
Elliot DeNolf
37ac4d30e5 chore: handle missing segments 2024-02-20 10:47:35 -05:00
Elliot DeNolf
0ac43cefa2 chore: handle redirect with no searchParams 2024-02-20 10:46:23 -05:00
James
4c60173b02 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-20 10:06:15 -05:00
James
dbcdc22b26 chore: handles redirecting from login 2024-02-20 10:06:05 -05:00
Jarrod Flesch
726596d568 Merge branch 'feat/next-poc' into feat/next/test-suite 2024-02-19 14:37:38 -05:00
Jacob Fletcher
3e3f223bb2 chore(ui): ssr document tabs (#5116) 2024-02-19 14:27:37 -05:00
James
17eb760928 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-19 13:20:26 -05:00
James
4cbfbdd621 chore: ignores warnings from mongodb 2024-02-19 13:19:43 -05:00
James
aeb8e89b69 chore: finishes translation optimization 2024-02-19 13:09:21 -05:00
Jarrod Flesch
0759e1ece2 chore: adds authentication:account translation key to server keys 2024-02-19 12:09:15 -05:00
Jacob Fletcher
fd7b2b7c4b chore(ui): renders live document title (#5115) 2024-02-19 11:39:15 -05:00
James
7ef8f9ac13 chore: attempts refactor of translation imports 2024-02-19 11:03:25 -05:00
Jarrod Flesch
dbb6c2bd9f chore: adds readme how-to-use instructions 2024-02-19 10:31:48 -05:00
Jarrod Flesch
b18bd735c9 chore: add exports folder to package json exports 2024-02-19 10:08:32 -05:00
Jarrod Flesch
b7752cc8a2 chore: add translations to ui ts-config references 2024-02-19 10:05:58 -05:00
Jarrod Flesch
e8bc88eace Merge branch 'feat/optimize-translations' of https://github.com/payloadcms/payload into feat/optimize-translations 2024-02-19 10:04:21 -05:00
Jarrod Flesch
19a4a99e76 chore: partial passing upload int tests 2024-02-19 10:03:35 -05:00
James
bc213888e8 chore: begins work to optimize translation imports 2024-02-19 10:02:09 -05:00
Jacob Fletcher
c784b46a5e chore(ui): renders document info provider at root (#5106) 2024-02-17 13:23:22 -05:00
Jarrod Flesch
1c9ba5b512 passing relationships int tests 2024-02-17 01:00:48 -05:00
Jarrod Flesch
3d99ea5cbf chore: passing localization int tests 2024-02-16 23:22:01 -05:00
Jarrod Flesch
28dc5a5b8c chore: start live-preview int test migration 2024-02-16 22:49:08 -05:00
Jarrod Flesch
dcf23d0952 chore: remove last express file 2024-02-16 22:48:46 -05:00
Jarrod Flesch
e597ecfe78 feat: passing hooks int test suite 2024-02-16 22:27:43 -05:00
Jarrod Flesch
1c75ac12e8 feat: passing globals int tests 2024-02-16 21:45:04 -05:00
Jarrod Flesch
28c4046300 chore: more passing int suites 2024-02-16 15:09:51 -05:00
James
762b5444f5 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-16 13:59:01 -05:00
James
a0e34c3a21 chore: fixes scss imports 2024-02-16 13:58:33 -05:00
Jarrod Flesch
504892ddb9 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-16 13:47:08 -05:00
Jarrod Flesch
5927bf8149 feat: passing collections-rest int suite 2024-02-16 13:41:48 -05:00
James
45069604e1 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-16 12:02:17 -05:00
James
b7f42f47a1 chore: fixes bad imports 2024-02-16 12:02:02 -05:00
Jarrod Flesch
2175562b9a chore: replace bson with bson-objectid 2024-02-16 11:46:57 -05:00
James
311ae5c4c5 chore: re-enables mongodb memory server for auth test suite 2024-02-16 11:32:41 -05:00
James
8f29df541f chore: removes references to bson 2024-02-16 11:31:05 -05:00
James
80e61206fd chore: merge 2024-02-16 11:29:00 -05:00
James
354d15cbf1 chore: uses graphql to log user in 2024-02-16 11:27:52 -05:00
James
12c5100bc8 chore: pulls mongodb from main 2024-02-16 11:27:23 -05:00
Jarrod Flesch
366db1623b chore: passing graphql test suite 2024-02-16 09:08:37 -05:00
Jarrod Flesch
88457d726b chore: removes unecessary memory allocation for urlPropertiesObject object 2024-02-15 21:44:37 -05:00
Jacob Fletcher
ac754f86f3 feat(ui): adds params context (#5095) 2024-02-15 15:52:04 -05:00
Jacob Fletcher
4bb1024041 chore(ui): threads params through context and conditionally renders document tabs (#5094) 2024-02-15 15:14:29 -05:00
Jarrod Flesch
a0d97ff7ed Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-15 14:57:59 -05:00
Jarrod Flesch
6a1a83cc2b feat: passing auth test suite 2024-02-15 14:57:53 -05:00
James
abf0f7111d chore: type fixes 2024-02-15 14:12:59 -05:00
James
ef82489040 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-15 13:41:20 -05:00
James
49474c6fc8 chore: increases e2e expect timeout 2024-02-15 13:41:12 -05:00
Jacob Fletcher
7ee0dc48a7 fix(next): sanitizes locale toString from client config 2024-02-15 13:40:14 -05:00
James
ca531f0c13 chore: functional _community e2e 2024-02-15 13:39:18 -05:00
James
e1ef1efdb5 Merge branch 'feat/next-poc' of github.com:payloadcms/payload into feat/next-poc 2024-02-15 13:28:19 -05:00
James
c8c393eff9 chore: bumps mongoose to 7 2024-02-15 13:28:07 -05:00
James
6fd80cd16f chore: establishes pattern for memory db during tests 2024-02-15 11:48:00 -05:00
James
6f7a3ed031 chore: restores payload-config tsconfig path temporarily 2024-02-15 11:34:50 -05:00
James
be597ed467 chore: merge 2024-02-15 11:04:52 -05:00
James
a5267bcb5b Merge branch 'feat/next-scss' into feat/next-poc 2024-02-15 11:02:05 -05:00
Jacob Fletcher
c512693b9d chore(next): ssr versions view (#5085) 2024-02-15 10:42:55 -05:00
Jarrod Flesch
95b19864d3 chore: removes test garb 2024-02-15 10:02:38 -05:00
Jarrod Flesch
db6758f7f7 chore: adds rest client for Next handlers 2024-02-15 10:01:13 -05:00
Jacob Fletcher
f11f3fdee1 fix(next): properly parses search params in find, update, and delete handlers (#5088) 2024-02-15 08:46:54 -05:00
Jacob Fletcher
497d055b63 chore(next): 404s on nested create urls 2024-02-14 17:25:14 -05:00
James
8f9ecdcfb5 Merge branch 'feat/next-scss' of github.com:payloadcms/payload into feat/next-scss 2024-02-14 16:53:08 -05:00
James
fb47b28318 chore: working turbopack 2024-02-14 16:52:55 -05:00
Jarrod Flesch
6fa72cf912 Merge branch 'feat/next-scss' of https://github.com/payloadcms/payload into feat/next-scss 2024-02-14 16:05:49 -05:00
James
df6fa0be24 chore: moves dev folder to top, establishes new test pattern 2024-02-14 15:58:03 -05:00
Jacob Fletcher
edb7cfc08d chore(next): renderable account, api, and create first user views (#5084) 2024-02-14 12:20:46 -05:00
James
559c132d17 chore: adds homepage for scss testing 2024-02-14 11:40:23 -05:00
Jarrod Flesch
4e006e9481 Merge branch 'feat/next-poc' into feat/next/test-suite 2024-02-14 09:46:48 -05:00
Jarrod Flesch
717a6b6d07 feat: initial test suite framework (#4929) 2024-02-14 09:46:11 -05:00
Jarrod Flesch
04c101018a chore: adjust payload-config import 2024-02-14 09:44:13 -05:00
Jarrod Flesch
d6a298cffd Merge branch 'feat/next-poc' into feat/next/test-suite 2024-02-13 23:32:46 -05:00
Jarrod Flesch
018755516b chore: pass config to route handlers 2024-02-13 23:30:02 -05:00
Jarrod Flesch
31e17daa34 chore: sorta workin 2024-02-13 16:22:30 -05:00
James
0748743fe0 chore: passing community tests 2024-02-13 12:58:02 -05:00
James
0a7ff53fc7 chore: progress to mongodb and sharp builds 2024-02-13 10:59:19 -05:00
Elliot DeNolf
da9ca18fe3 feat(next): next install script 2024-02-13 10:28:41 -05:00
Jacob Fletcher
d292ab72d2 chore(ui): conditionally renders field label from props 2024-02-13 00:24:22 -05:00
Jacob Fletcher
9c77af0d67 chore(next): allows resolved config promise to be thread through initPage (#5071) 2024-02-12 18:09:01 -05:00
Jarrod Flesch
03f3d295c9 chore: sets up jest to work with next/jest 2024-02-12 16:53:27 -05:00
Jarrod Flesch
9aa5ca022d Merge branch 'feat/next-poc' into feat/next/test-suite 2024-02-12 16:52:49 -05:00
Jarrod Flesch
35e2e1848a feat: add route for static file GET requests (#5065) 2024-02-12 16:52:20 -05:00
Jacob Fletcher
087ee35ece fix(ui): bumps react-toastify to v10.0.4 to fix hydration warnings 2024-02-12 12:18:04 -05:00
Jarrod Flesch
399809ee6b chore: merge 2024-02-12 12:09:13 -05:00
Jacob Fletcher
cf6b12842f fix(next): properly copies url object in createPayloadRequest (#5064) 2024-02-12 10:58:30 -05:00
Jacob Fletcher
702c138f44 fix(ui): ensures first cell is a link 2024-02-12 10:49:10 -05:00
Jacob Fletcher
b0f0066f28 fix(ui): maintains proper column order 2024-02-10 13:32:03 -05:00
Jarrod Flesch
47c9a1d80f chore: misc file omissions 2024-02-09 14:14:38 -05:00
Jarrod Flesch
239f65d04d chore: builds payload successfully 2024-02-09 14:08:09 -05:00
Jarrod Flesch
2cd534526f chore(next): adds RouteError handler to next routes 2024-02-09 14:06:56 -05:00
Jarrod Flesch
604ecbbf95 chore: reorganize next route order 2024-02-09 13:37:00 -05:00
Jarrod Flesch
5e6191f235 merge with next-poc 2024-02-09 10:58:57 -05:00
Jacob Fletcher
026f269bdf fix(next): attaches params to req and properly assigns prefs key (#5042) 2024-02-09 10:50:16 -05:00
Jacob Fletcher
7970955c00 chore(next): properly instantiates table columns 2024-02-09 09:17:13 -05:00
Jarrod Flesch
3a0ea03a9c chore: return attemptCustomEndpointBeforeError responses 2024-02-09 09:00:45 -05:00
Jarrod Flesch
4ea07940f8 chore: fix APIError import 2024-02-08 16:23:11 -05:00
Jarrod Flesch
a8ac42037b feat: adds memoization to translation functions (#5036) 2024-02-08 15:23:50 -05:00
Jarrod Flesch
78a45fc92d chore: allows custom endpoints to attempt before erroring 2024-02-08 15:21:59 -05:00
Jarrod Flesch
a6a12335f1 chore: import sort route file 2024-02-08 12:29:31 -05:00
Jarrod Flesch
d82c1427f7 chore: rm optional chain 2024-02-08 12:28:19 -05:00
Jarrod Flesch
f2c766ddaf chore: add back in condition for collection GET path with 2 slugs 2024-02-08 12:27:20 -05:00
Jarrod Flesch
33aefb69f4 chore: refactor response handler order for custom endpoints 2024-02-08 12:18:39 -05:00
Jarrod Flesch
2751624b2b Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-02-08 10:54:19 -05:00
Jarrod Flesch
fc55267dc3 chore: removes unused deps 2024-02-08 10:06:54 -05:00
Jacob Fletcher
9ea1bb492f chore(next): ssr list view (#5032) 2024-02-08 10:05:28 -05:00
Jarrod Flesch
42c4b95df1 chore: move graphql handlers 2024-02-07 17:10:42 -05:00
Jarrod Flesch
55325a0812 chore: dep cleanup 2024-02-07 17:04:42 -05:00
Jarrod Flesch
86bfc0a7f9 chore: separates graphql package out for schema generation 2024-02-07 16:38:01 -05:00
Jarrod Flesch
166fce793f chore: merge conflict resolutions 2024-02-07 14:04:26 -05:00
Jarrod Flesch
df53489498 chore: removes collection from req 2024-02-07 14:03:24 -05:00
Jarrod Flesch
d050f48d4f chore: adds gql and gql-http back into payload 2024-02-07 14:02:12 -05:00
Jarrod Flesch
d204418530 chore: partial gql changes 2024-02-07 14:01:46 -05:00
Jarrod Flesch
a4d21586d0 rm console log 2024-02-07 08:42:23 -05:00
Jarrod Flesch
bf5c7a41d6 merge resolution 2024-02-07 08:38:39 -05:00
Jarrod Flesch
73cae2e726 chore: semi working version of graphql http layer 2024-02-07 08:37:23 -05:00
Jarrod Flesch
019a83bd83 gql fix attempts 2024-02-06 13:42:52 -05:00
Jarrod Flesch
826b14b54f graphql changes 2024-02-06 12:08:52 -05:00
Jarrod Flesch
8a81d59240 chore: move all graphql code into next package 2024-02-05 17:08:58 -05:00
Jarrod Flesch
4581e1daf9 specify default export 2024-02-05 15:08:13 -05:00
Jarrod Flesch
1d619b0954 Merge branch 'feat/next-poc' into feat/next/graphql 2024-02-05 11:01:22 -05:00
Jarrod Flesch
6b666bf304 fix: correctly prioritize locales passed as null 2024-02-05 10:52:33 -05:00
Jarrod Flesch
cbb784637a Merge branch 'feat/next-poc' into feat/next/graphql 2024-02-05 10:35:17 -05:00
Jarrod Flesch
175dc33b01 fix: allow for null fallbackLocale 2024-02-05 10:34:47 -05:00
Jarrod Flesch
aa1b98aef8 remove old playground init, stub graphql handler location 2024-02-05 10:34:19 -05:00
Jarrod Flesch
c842a1e8d4 adds credentials include setting to playground 2024-02-02 17:02:38 -05:00
Jarrod Flesch
7e8be87da2 feat: adds graphql playground handler 2024-02-02 17:01:45 -05:00
Jarrod Flesch
97b9bd0593 misc 2024-02-02 15:35:59 -05:00
Jarrod Flesch
389865ba13 removes duplicate bootAdminPanel fn 2024-02-02 15:35:35 -05:00
Jarrod Flesch
bdaceedc91 chore: removes need for REST_API folder in test dir 2024-02-02 15:34:30 -05:00
Jarrod Flesch
2c910b0778 chore: WIP dev suites 2024-02-02 15:26:14 -05:00
Jarrod Flesch
f01721ce64 merge with next-poc 2024-02-02 15:24:42 -05:00
Jarrod Flesch
35b16d421e chore: api handler adjustments 2024-02-02 15:23:21 -05:00
Jacob Fletcher
147def5059 chore(next): wires form submissions (#4982) 2024-02-02 15:04:15 -05:00
Jarrod Flesch
bf16dd2cf8 Merge branch 'feat/next-poc' into feat/next/test-suite 2024-02-01 14:21:42 -05:00
Jarrod Flesch
24feace60b feat: correctly subs out ability to boot REST API within same process 2024-02-01 14:07:13 -05:00
Jacob Fletcher
3ab8a8e25f chore(next): ssr upload field and document drawer (#4957) 2024-02-01 11:23:12 -05:00
Jarrod Flesch
e96c7bf987 chore: files for running tests 2024-01-30 14:54:47 -05:00
Jacob Fletcher
e7c39cb53f chore(next): ssr blocks field (#4942) 2024-01-29 15:41:50 -05:00
Jacob Fletcher
a8aca3ad0f chore(next): ssr array field (#4937) 2024-01-28 15:51:11 -05:00
Jarrod Flesch
b531f6ab8b misc 2024-01-26 15:36:06 -05:00
Jarrod Flesch
bd83d995fa chore: rm console log 2024-01-26 15:34:50 -05:00
Jarrod Flesch
7962303c72 remove unused code 2024-01-26 15:34:13 -05:00
Jarrod Flesch
991056a861 chore: sets up working dynamic payload-config imports 2024-01-26 15:33:04 -05:00
Jacob Fletcher
369a1a8ad9 chore(next): overhauls field rendering strategy (#4924) 2024-01-26 14:12:41 -05:00
Jarrod Flesch
b8e7b9c8b3 chore: align fallbackLocale determination with new fallbackLocale property on Locale 2024-01-25 12:00:50 -05:00
Jarrod Flesch
df40bafcfe chore: consolidates locale api req initialization (#4922) 2024-01-25 10:18:23 -05:00
Jarrod Flesch
0cd8ac6754 chore: improve types 2024-01-25 09:25:35 -05:00
Jarrod Flesch
ad416ca14f chore: ensures root routes take pass unmodified request to root routes 2024-01-24 17:26:02 -05:00
Jarrod Flesch
70784517e4 chore: misc type and fn export changes 2024-01-24 10:26:29 -05:00
Jarrod Flesch
2c3dc6ceef chore: improve req type safety in local operations, misc req.files replacements 2024-01-24 09:47:28 -05:00
Jarrod Flesch
db935b20a7 chore: renames file/function 2024-01-24 09:07:01 -05:00
Jarrod Flesch
a1fd0318f1 chore: adds try/catch around routes, corrects a few route responses 2024-01-23 17:04:43 -05:00
Jarrod Flesch
c2151c1b59 merge with next-poc 2024-01-23 16:21:16 -05:00
Jarrod Flesch
8f729bba41 chore: remove findByID from req 2024-01-23 16:19:45 -05:00
Jarrod Flesch
08bf0b6d4d chore: adjust upload file structure 2024-01-23 15:50:39 -05:00
Jarrod Flesch
1ff30c5e54 chore: ports over express-fileupload into a NextJS compatible format 2024-01-23 14:23:44 -05:00
Jacob Fletcher
80e7fb9020 chore(next): ssr collapsible field (#4894) 2024-01-22 17:52:24 -05:00
Jarrod Flesch
1bd0106c2b chore: wires up busboy with Requst readstream 2024-01-22 17:22:24 -05:00
Jacob Fletcher
6c59192340 chore(next): ssr radio, point, code, json, ui, and hidden fields (#4891) 2024-01-22 13:55:26 -05:00
Jacob Fletcher
29c1498842 chore(next): conditional logic (#4880) 2024-01-19 16:43:18 -05:00
Jacob Fletcher
75c12e8966 chore(next): wires server action into document edit view (#4873) 2024-01-19 14:51:56 -05:00
Jarrod Flesch
23291d4627 comment clarification 2024-01-19 12:54:20 -05:00
Jarrod Flesch
8b89767907 chore: adjusts file property on request type 2024-01-19 12:51:39 -05:00
Jacob Fletcher
7bc43b4fe8 chore(next): ssr textarea field 2024-01-17 18:07:44 -05:00
Jacob Fletcher
0aaf4c1f32 chore(next): ssr row field 2024-01-17 17:41:11 -05:00
Jacob Fletcher
16394e6dbd chore(next): ssr tabs field (#4863) 2024-01-17 17:17:03 -05:00
Jacob Fletcher
3b531f863d chore(bundler-vite): removes vite bundler 2024-01-17 10:48:41 -05:00
Jacob Fletcher
0bc1a6a22a chore(bundler-webpack): removes webpack bundler 2024-01-17 10:48:13 -05:00
Jarrod Flesch
6dac9f769a chore: removes old file 2024-01-17 10:36:33 -05:00
Jarrod Flesch
5871ae1a59 chore: removes placeholder t function 2024-01-17 08:37:20 -05:00
Jacob Fletcher
0a9329ec56 chore(next): ssr group field (#4830) 2024-01-16 14:12:29 -05:00
Jarrod Flesch
00e34bb6fe chore: adds missing ja translations 2024-01-16 12:52:53 -05:00
Jarrod Flesch
75777dafc6 chore: remaining translation strings without colons 2024-01-16 12:44:20 -05:00
Jarrod Flesch
85ca07c521 fixes a few i18n TODO's 2024-01-16 12:20:25 -05:00
Jarrod Flesch
b781e5cc88 fixes up remaining translation strings 2024-01-16 12:15:09 -05:00
Jarrod Flesch
13313028b5 adds Translation component and removes more react-i18next 2024-01-16 09:36:35 -05:00
Jacob Fletcher
0bc7c452c3 chore(next): achieves buildable state (#4803) 2024-01-13 22:49:04 -05:00
Jacob Fletcher
b549003054 chore(db-postgres): removes vite and webpack config extensions 2024-01-12 15:32:37 -05:00
Jacob Fletcher
2ee425bdf1 chore(db-mongodb): removes vite and webpack config extensions 2024-01-12 15:31:57 -05:00
Jacob Fletcher
fe6160663a chore(deps): removes all unused dependencies from payload core (#4797) 2024-01-12 14:46:07 -05:00
Jacob Fletcher
6549e6136c chore(next): moves remaining components out from payload core (#4794) 2024-01-12 11:38:33 -05:00
Jarrod Flesch
9b1668cbcd fixes acccept-language detection 2024-01-12 10:25:28 -05:00
Jacob Fletcher
1c615b7fbf chore(next): migrates types (#4792) 2024-01-12 09:14:38 -05:00
Jarrod Flesch
7c54012caa chore: remoeve old import 2024-01-12 08:58:01 -05:00
Jacob Fletcher
abee872931 chore(next): progress to build 2024-01-10 14:49:07 -05:00
Jacob Fletcher
1cbcec87d8 chore(next): installs @payloadcms/ui as direct dependency 2024-01-10 14:49:07 -05:00
Jarrod Flesch
0f1960f22a chore: adjust other package ts-configs that rely on translations 2024-01-10 14:48:05 -05:00
Jarrod Flesch
fb0c000b54 chore: fix translation tsconfig 2024-01-10 14:45:04 -05:00
Jarrod Flesch
87bb6e9995 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-01-10 14:31:03 -05:00
Jarrod Flesch
45ceabf49e chore: renames PayloadT to Payload 2024-01-10 14:30:56 -05:00
Jacob Fletcher
8202629f62 chore(next): custom views (#4748) 2024-01-10 11:55:21 -05:00
Jarrod Flesch
d3d15301f7 chore: simplify next/routes export and import paths 2024-01-10 11:03:20 -05:00
Jarrod Flesch
8817ade510 chore: add missing translation used in db adapters 2024-01-09 16:26:47 -05:00
Jarrod Flesch
4423bfdaa1 chore: separate client translation groups with empty line 2024-01-09 16:23:31 -05:00
Jarrod Flesch
56c766c7b8 feat: adds i18n functionality within Rest API, Local and Client contexts (#4749) 2024-01-09 14:37:17 -05:00
Jacob Fletcher
f8d2f44f82 chore(next): ssr api view (#4721) 2024-01-08 10:21:55 -05:00
Jacob Fletcher
d86e736b33 chore(next): returns isolated configs and locale from initPage 2024-01-08 10:20:13 -05:00
Jacob Fletcher
e2db15ed4d Merge pull request #4708 from payloadcms/chore/next-views
chore(next): moves various views into next dir
2024-01-05 16:58:26 -05:00
Jacob Fletcher
d5af131144 chore(next): moves global edit view into next dir 2024-01-05 16:51:54 -05:00
Jacob Fletcher
1401e0ab5a chore(next): moves account view into next dir 2024-01-05 14:19:53 -05:00
Jacob Fletcher
49817ee0fa chore(next): moves dashboard view into next dir 2024-01-05 14:19:43 -05:00
Jacob Fletcher
e4e5cab60f chore(next): ssr field validations (#4700) 2024-01-05 12:15:14 -05:00
Jacob Fletcher
bd6a3a633d chore(next): ssr field conditions (#4675) 2024-01-03 17:08:46 -05:00
Jacob Fletcher
3d5500e69b chore(next): ssr versions view (#4645) 2024-01-03 10:08:34 -05:00
Jarrod Flesch
b5fc236d43 Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2024-01-02 10:51:38 -05:00
Jarrod Flesch
9915e560b2 chore: cleanup 2024-01-02 10:51:31 -05:00
Jacob Fletcher
4cf07f143c chore(next): scaffolds document layout (#4644) 2023-12-31 13:57:57 -05:00
Jacob Fletcher
9c0994219e chore(next): ssr globals view (#4640) 2023-12-30 10:03:28 -05:00
Jacob Fletcher
1287412383 chore(next): ssr auth views and document create (#4631) 2023-12-29 09:14:02 -05:00
Jacob Fletcher
0712207ff2 chore(next): ssr account view (#4620) 2023-12-27 22:21:12 -05:00
Jacob Fletcher
3e11a5200e chore(ui): ssr main nav (#4619) 2023-12-27 22:17:24 -05:00
Jacob Fletcher
723b470284 chore(next): ssr edit view (#4614) 2023-12-27 08:09:10 -05:00
Jarrod Flesch
a267aad709 chore: allows for custom endpoints 2023-12-22 13:18:45 -05:00
Jarrod Flesch
b1b318e282 chore: adjusts graphql file imports to align with new operation exports 2023-12-22 08:08:18 -05:00
Jarrod Flesch
31a8d35bb9 Merge branch 'feat/next-poc' into feat/next-custom-endpoints 2023-12-22 08:01:20 -05:00
Jarrod Flesch
f5a63998ce chore: removes old files 2023-12-22 08:00:58 -05:00
Jacob Fletcher
921f568d2d chore(next): ssr list view (#4594) 2023-12-21 23:04:25 -05:00
Jarrod Flesch
f43ac8554c chore: removes old files 2023-12-21 16:58:25 -05:00
Jarrod Flesch
988a21e94d feat(3.0): next route handlers (#4590) 2023-12-21 16:54:20 -05:00
Jacob Fletcher
a7172d8782 chore(next): builds initPage utility (#4589) 2023-12-21 16:07:45 -05:00
Jacob Fletcher
cc8c23db85 chore(next): scaffolds admin layout and dashboard view (#4566) 2023-12-20 10:13:28 -05:00
Jacob Fletcher
a6d7852903 chore(next): scaffolds access routes (#4562) 2023-12-20 01:14:19 -05:00
Jarrod Flesch
af88fb8af4 fix: me route 2023-12-19 15:33:09 -05:00
Jarrod Flesch
d16c710caa feat: working login route/view 2023-12-19 15:21:18 -05:00
Jarrod Flesch
23d362757c Merge branch 'feat/next-poc' of https://github.com/payloadcms/payload into feat/next-poc 2023-12-19 12:11:15 -05:00
Jacob Fletcher
ef7bea6d2d chore(next): installs sass and resolves type errors 2023-12-19 12:10:00 -05:00
Jarrod Flesch
4d0fa60a7a Merge branch 'feat/access-slim' into feat/next-poc 2023-12-19 12:00:52 -05:00
Jarrod Flesch
e25fc2da88 chore: adjust req type 2023-12-19 11:57:38 -05:00
Jacob Fletcher
5558e0c62f Merge branch 'main' into feat/next-poc 2023-12-19 10:34:34 -05:00
Jacob Fletcher
10315ed240 chore: splits login form from page and moves to next 2023-12-19 10:09:37 -05:00
Jarrod Flesch
754fb2397e wip moves payload, user and data into partial req 2023-12-18 16:58:57 -05:00
Jarrod Flesch
df2d144590 tie it into the next package 2023-12-14 16:52:07 -05:00
Jarrod Flesch
432e47032e chore: passes payload and user through to access control functions instead of the full req 2023-12-14 16:43:40 -05:00
Jarrod Flesch
507d40b6f5 chore: adds base for access crossoads 2023-12-14 16:18:07 -05:00
Jarrod Flesch
97eb814f21 chore: remove passing of cookies, we will handle this internally 2023-12-08 10:15:01 -05:00
Jarrod Flesch
0ef80e6d3e chore: integrates getAuthenticatedUser function into the next repo 2023-12-08 09:39:27 -05:00
Jarrod Flesch
b651b5cb48 chore: start to remove reliance on express specific functionality 2023-12-08 08:51:23 -05:00
Jacob Fletcher
02d95e90b4 chore: scaffolds auth utility 2023-12-07 16:13:23 -05:00
Jacob Fletcher
99e160686a chore: scaffolds metadata 2023-12-07 16:13:16 -05:00
Jacob Fletcher
fc9ada5f18 chore(next): scaffolds auth layout 2023-12-06 16:28:12 -05:00
Jacob Fletcher
ce3c084ea1 chore(ui): migrates theme provider 2023-12-06 14:37:08 -05:00
Jacob Fletcher
ab24796316 chore(next): exports root page and adds admin redirect 2023-12-06 12:03:06 -05:00
Jacob Fletcher
aa2ee060f1 chore(next): exports root layout from layouts dir 2023-12-06 12:02:42 -05:00
Jacob Fletcher
66e47990ac Merge branch 'main' into feat/next-poc 2023-12-06 10:41:29 -05:00
Jacob Fletcher
bd9f7bda29 chore: successfully renders login view 2023-12-05 16:38:11 -05:00
Jacob Fletcher
b002cf3031 chore: moves forms and related components 2023-12-02 03:44:52 -05:00
Jacob Fletcher
77407f0879 Merge branch 'main' into feat/next-poc 2023-12-01 22:50:58 -05:00
Jacob Fletcher
ff4c76e3a2 chore: moves login view and begins i18n 2023-12-01 22:49:59 -05:00
Jacob Fletcher
533e0fb10d chore: moves auth provider 2023-12-01 22:49:59 -05:00
Jacob Fletcher
c5bc3e27a8 chore: moves dashboard view and related components 2023-12-01 22:49:59 -05:00
Jacob Fletcher
fad0398a48 chore: moves ui components 2023-12-01 22:49:52 -05:00
Jacob Fletcher
5ce519aef9 fix: properly cleans field configs 2023-11-16 12:31:41 -05:00
Jacob Fletcher
a0719275e6 fix: removes webpack and vite from client config 2023-11-16 10:13:51 -05:00
James
01a2fc6b75 chore: progress to ui scaffolding 2023-11-16 09:50:57 -05:00
James
c232983e63 chore: progress to ui scaffolding 2023-11-15 17:22:40 -05:00
James
fe956d4617 chore: excludes pino from builds in next poc 2023-11-15 16:28:02 -05:00
James
fee8838e7b chore: establishes package pattern 2023-11-15 16:00:45 -05:00
James
0996f8cccb chore: initial next poc 2023-11-07 13:59:59 -05:00
3191 changed files with 118670 additions and 208997 deletions

4
.env.example Normal file
View File

@@ -0,0 +1,4 @@
DATABASE_URI=mongodb://127.0.0.1/payloadtests
PAYLOAD_SECRET=laijflieawfjlweifjewalifjwe
# PAYLOAD_CONFIG_PATH=MUST BE SET PROGRAMMATICALLY
PAYLOAD_DROP_DATABASE=true

View File

@@ -1,6 +1,15 @@
module.exports = {
extends: ['@payloadcms'],
overrides: [
{
files: ['scripts/**'],
rules: {
'@typescript-eslint/no-unused-vars': 'off',
'no-console': 'off',
'perfectionist/sort-object-types': 'off',
'perfectionist/sort-objects': 'off',
},
},
{
extends: ['plugin:@typescript-eslint/disable-type-checked'],
files: ['*.js', '*.cjs', '*.json', '*.md', '*.yml', '*.yaml'],
@@ -34,5 +43,9 @@ module.exports = {
},
},
],
parserOptions: {
project: ['./tsconfig.json'],
tsconfigRootDir: __dirname,
},
root: true,
}

46
.github/CODEOWNERS vendored
View File

@@ -1,32 +1,50 @@
# Order matters. The last matching pattern takes precedence.
### Catch-all ###
* @denolfe @jmikrut @DanRibbens
.* @denolfe @jmikrut @DanRibbens
### Core ###
/packages/payload/ @denolfe @jmikrut @DanRibbens
/packages/payload/src/uploads/ @denolfe
/packages/payload/src/admin/ @jmikrut @jacobsfletch @JarrodMFlesch
### Adapters ###
/packages/richtext-*/ @AlessioGr
/packages/bundler-*/ @denolfe @jmikrut @DanRibbens @JarrodMFlesch
/packages/db-*/ @denolfe @jmikrut @DanRibbens
/packages/richtext-*/ @denolfe @jmikrut @DanRibbens @AlessioGr
### Plugins ###
/packages/plugin-*/ @denolfe @jmikrut @DanRibbens @jacobsfletch @JarrodMFlesch @AlessioGr
/packages/plugin-cloud*/ @denolfe
/packages/plugin-form-builder/ @jacobsfletch
/packages/plugin-live-preview*/ @jacobsfletch
/packages/plugin-nested-docs/ @jacobsfletch
/packages/plugin-password-protection/ @jmikrut
/packages/plugin-redirects/ @jacobsfletch
/packages/plugin-search/ @jacobsfletch
/packages/plugin-sentry/ @JessChowdhury
/packages/plugin-seo/ @jacobsfletch
/packages/plugin-stripe/ @jacobsfletch
/packages/plugin-zapier/ @JarrodMFlesch
### Examples ###
/examples/ @jacobsfletch
/examples/testing/ @JarrodMFlesch
/examples/email/ @JessChowdhury
/examples/whitelabel/ @JessChowdhury
### Templates ###
/templates/ @jacobsfletch @denolfe
/templates/ @jacobsfletch
/templates/blank/ @denolfe
### Misc ###
/packages/create-payload-app/ @denolfe
/packages/eslint-*/ @denolfe
### Build Files ###
/**/package.json @denolfe
/tsconfig.json @denolfe
/**/tsconfig*.json @denolfe
/jest.config.js @denolfe
/**/jest.config.js @denolfe
/packages/eslint-config-payload/ @denolfe
/packages/payload-admin-bar/ @jacobsfletch
### Root ###
/package.json @denolfe
/scripts/ @denolfe
/.husky/ @denolfe
/.vscode/ @denolfe
/.github/ @denolfe
/.github/CODEOWNERS @denolfe

47
.github/ISSUE_TEMPLATE/1.bug_report.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
name: Bug Report
description: Create a bug report for Payload
labels: ['[possible-bug]']
body:
- type: markdown
attributes:
value: |
*Note:* Feature requests should be opened as [discussions](https://github.com/payloadcms/payload/discussions/new?category=feature-requests-ideas).
- type: input
id: reproduction-link
attributes:
label: Link to reproduction
description: Want us to look into your issue faster? Follow the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md) for more information.
validations:
required: false
- type: textarea
attributes:
label: Describe the Bug
validations:
required: true
- type: textarea
attributes:
label: To Reproduce
description: Steps to reproduce the behavior, please provide a clear description of how to reproduce the issue, based on the linked minimal reproduction. Screenshots can be provided in the issue body below. If using code blocks, make sure that [syntax highlighting is correct](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting) and double check that the rendered preview is not broken.
validations:
required: true
- type: input
id: version
attributes:
label: Payload Version
description: What version of Payload are you running?
validations:
required: true
- type: input
id: adapters-plugins
attributes:
label: Adapters and Plugins
description: What adapters and plugins are you using? ie. db-mongodb, db-postgres, bundler-webpack, etc.
- type: markdown
attributes:
value: Before submitting the issue, go through the steps you've written down to make sure the steps provided are detailed and clear.
- type: markdown
attributes:
value: Contributors should be able to follow the steps provided in order to reproduce the bug.
- type: markdown
attributes:
value: These steps are used to add integration tests to ensure the same issue does not happen again. Thanks in advance!

View File

@@ -1,77 +0,0 @@
name: Functionality Bug
description: '[REPRODUCTION REQUIRED] - Create a bug report'
labels: ['status: needs-triage', 'v3', 'validate-reproduction']
body:
- type: textarea
attributes:
label: Describe the Bug
validations:
required: true
- type: input
id: reproduction-link
attributes:
label: Link to the code that reproduces this issue
description: >-
_REQUIRED_: Please provide a link to your reproduction. Note, if the URL is invalid (404 or a private repository), we may close the issue.
Either use `npx create-payload-app@beta -t blank` then push to a repo or follow the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md) for more information.
validations:
required: true
- type: textarea
attributes:
label: Reproduction Steps
description: Steps to reproduce the behavior, please provide a clear description of how to reproduce the issue, based on the linked minimal reproduction. Screenshots can be provided in the issue body below. If using code blocks, make sure that [syntax highlighting is correct](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting) and double check that the rendered preview is not broken.
validations:
required: true
- type: dropdown
attributes:
label: Which area(s) are affected? (Select all that apply)
multiple: true
options:
- 'Not sure'
- 'area: core'
- 'area: docs'
- 'area: templates'
- 'area: ui'
- 'db-mongodb'
- 'db-postgres'
- 'db-sqlite'
- 'db-vercel-postgres'
- 'plugin: cloud'
- 'plugin: cloud-storage'
- 'plugin: form-builder'
- 'plugin: nested-docs'
- 'plugin: richtext-lexical'
- 'plugin: richtext-slate'
- 'plugin: search'
- 'plugin: sentry'
- 'plugin: seo'
- 'plugin: stripe'
- 'plugin: other'
validations:
required: true
- type: textarea
attributes:
label: Environment Info
description: Paste output from `pnpm payload info` (>= beta.92) _or_ Payload, Node.js, and Next.js versions.
render: text
placeholder: |
Payload:
Node.js:
Next.js:
validations:
required: true
- type: markdown
attributes:
value: Before submitting the issue, go through the steps you've written down to make sure the steps provided are detailed and clear.
- type: markdown
attributes:
value: Contributors should be able to follow the steps provided in order to reproduce the bug.
- type: markdown
attributes:
value: These steps are used to add integration tests to ensure the same issue does not happen again. Thanks in advance!

View File

@@ -1,41 +0,0 @@
name: Design Issue
description: '[SCREENSHOT REQUIRED] - Create a design issue report'
labels: ['status: needs-triage', 'v3', 'area: ui']
body:
- type: textarea
attributes:
label: Describe the Bug.
description: >-
_REQUIRED:_ Please a screenshot/video of the issue along with a detailed description of the problem.
validations:
required: true
- type: textarea
attributes:
label: Reproduction Steps
description: Steps to reproduce the behavior, please provide a clear description of how to reproduce the issue, based on the linked minimal reproduction. Screenshots can be provided in the issue body below. If using code blocks, make sure that [syntax highlighting is correct](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting) and double check that the rendered preview is not broken.
validations:
required: true
- type: textarea
attributes:
label: Environment Info
description: Paste output from `pnpm payload info` (>= beta.92) _or_ Payload, Node.js, and Next.js versions.
render: text
placeholder: |
Payload:
Node.js:
Next.js:
validations:
required: true
- type: markdown
attributes:
value: Before submitting the issue, go through the steps you've written down to make sure the steps provided are detailed and clear.
- type: markdown
attributes:
value: Contributors should be able to follow the steps provided in order to reproduce the bug.
- type: markdown
attributes:
value: These steps are used to add integration tests to ensure the same issue does not happen again. Thanks in advance!

View File

@@ -1,47 +0,0 @@
name: v2 Bug Report
description: Report a bug for Payload v2. ONLY CRITICAL bugs will be fixed in v2.
labels: ['status: needs-triage', 'v2']
body:
- type: markdown
attributes:
value: |
ONLY CRITICAL bugs will be fixed in v2.
- type: input
id: reproduction-link
attributes:
label: Link to reproduction
description: Want us to look into your issue faster? Follow the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md) for more information.
validations:
required: false
- type: textarea
attributes:
label: Describe the Bug
validations:
required: true
- type: textarea
attributes:
label: To Reproduce
description: Steps to reproduce the behavior, please provide a clear description of how to reproduce the issue, based on the linked minimal reproduction. Screenshots can be provided in the issue body below. If using code blocks, make sure that [syntax highlighting is correct](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting) and double check that the rendered preview is not broken.
validations:
required: true
- type: input
id: version
attributes:
label: Payload Version
description: What version of Payload are you running?
validations:
required: true
- type: input
id: adapters-plugins
attributes:
label: Adapters and Plugins
description: What adapters and plugins are you using? ie. db-mongodb, db-postgres, bundler-webpack, etc.
- type: markdown
attributes:
value: Before submitting the issue, go through the steps you've written down to make sure the steps provided are detailed and clear.
- type: markdown
attributes:
value: Contributors should be able to follow the steps provided in order to reproduce the bug.
- type: markdown
attributes:
value: These steps are used to add integration tests to ensure the same issue does not happen again. Thanks in advance!

View File

@@ -1,23 +1,23 @@
<!--
## Description
Thank you for the PR! Please go through the checklist below and make sure you've completed all the steps.
<!-- Please include a summary of the pull request and any related issues it fixes. Please also include relevant motivation and context. -->
Please review the [CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md) document in this repository if you haven't already.
- [ ] I have read and understand the [CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md) document in this repository.
The following items will ensure that your PR is handled as smoothly as possible:
## Type of change
- PR Title must follow conventional commits format. For example, `feat: my new feature`, `fix(plugin-seo): my fix`.
- Minimal description explained as if explained to someone not immediately familiar with the code.
- Provide before/after screenshots or code diffs if applicable.
- Link any related issues/discussions from GitHub or Discord.
- Add review comments if necessary to explain to the reviewer the logic behind a change
<!-- Please delete options that are not relevant. -->
### What?
- [ ] Chore (non-breaking change which does not add functionality)
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Change to the [templates](https://github.com/payloadcms/payload/tree/main/templates) directory (does not affect core functionality)
- [ ] Change to the [examples](https://github.com/payloadcms/payload/tree/main/examples) directory (does not affect core functionality)
- [ ] This change requires a documentation update
### Why?
## Checklist:
### How?
Fixes #
-->
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] Existing test suite passes locally with my changes
- [ ] I have made corresponding changes to the documentation

View File

@@ -1,13 +0,0 @@
module.exports = {
env: {
es6: true,
node: true,
},
extends: ['eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
},
plugins: ['@typescript-eslint'],
}

View File

@@ -1,8 +0,0 @@
module.exports = {
printWidth: 100,
parser: 'typescript',
semi: false,
singleQuote: true,
trailingComma: 'all',
arrowParens: 'avoid',
}

View File

@@ -1,74 +0,0 @@
# Release Commenter
This GitHub Action automatically comments on and/or labels Issues and PRs when a fix is released for them.
> [!IMPORTANT]
> 🔧 Heavily modified version of https://github.com/apexskier/github-release-commenter
## Fork Modifications
- Filters to closed PRs only
- Adds tag filter to support non-linear releases
- Better logging
- Moved to pnpm
- Uses @vercel/ncc for packaging
- Comments on locked issues by unlocking then re-locking
## How it works
Use this action in a workflow [triggered by a release](https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows#release). It will scan commits between that and the prior release, find associated Issues and PRs, and comment on them to let people know a release has been made. Associated Issues and PRs can be directly [linked](https://docs.github.com/en/free-pro-team@latest/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue) to the commit or manually linked from a PR associated with the commit.
## Inputs
**GITHUB_TOKEN**
A GitHub personal access token with repo scope, such as [`secrets.GITHUB_TOKEN`](https://docs.github.com/en/free-pro-team@latest/actions/reference/authentication-in-a-workflow#about-the-github_token-secret).
**comment-template** (optional)
Override the comment posted on Issues and PRs. Set to the empty string to disable commenting. Several variables strings will be automatically replaced:
- `{release_link}` - a markdown link to the release
- `{release_name}` - the release's name
- `{release_tag}` - the release's tag
**label-template** (optional)
Add the given label. Multiple labels can be separated by commas. Several variable strings will be automatically replaced:
- `{release_name}` - the release's name
- `{release_tag}` - the release's tag
**skip-label** (optional)
Skip processing if any of the given labels are present. Same processing rules as **label-template**. Default is "dependencies".
## Example
```yml
on:
release:
types: [published]
jobs:
release:
steps:
- uses: apexskier/github-release-commenter@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
comment-template: |
Release {release_link} addresses this.
```
## Known limitations
These are some known limitations of this action. I'd like to try to address them in the future.
- Non-linear releases aren't supported. For example, releasing a patch to a prior major release after a new major release has been bumped.
- Non-sequential releases aren't supported. For example, if you release multiple prereleases between two official releases, this will only create a comment for the first prerelease in which a fix is released, not the final release.
- The first release for a project will be ignored. This is intentional, as the use case is unlikely. Most projects will either have several alphas that don't need release comments, or won't use issues/PRs for the first commit.
- If a large number of things are commented on, you may see the error `Error: You have triggered an abuse detection mechanism. Please wait a few minutes before you try again.`. Consider using the `skip-label` input to reduce your load on the GitHub API.
## Versions
Workflows will automatically update the tags `v1` and `latest`, allowing you to reference one of those instead of locking to a specific release.

View File

@@ -1,32 +0,0 @@
name: Release Commenter
description: Comment on PRs and Issues when a fix is released
branding:
icon: message-square
color: blue
inputs:
GITHUB_TOKEN:
description: |
A GitHub personal access token with repo scope, such as
secrets.GITHUB_TOKEN.
required: true
comment-template:
description: |
Text template for the comment string.
required: false
default: |
Included in release {release_link}
label-template:
description: Add the given label. Multiple labels can be separated by commas.
required: false
skip-label:
description: Skip commenting if any of the given label are present. Multiple labels can be separated by commas.
required: false
default: "dependencies"
tag-filter:
description: |
Filter tags by a regular expression. Must be escaped. e.g. 'v\\d' to isolate tags between major versions.
required: false
default: null
runs:
using: node20
main: dist/index.js

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +0,0 @@
module.exports = {
testEnvironment: 'node',
testPathIgnorePatterns: ['/node_modules/', '<rootDir>/dist/'],
transform: {
'^.+\\.(t|j)sx?$': ['@swc/jest'],
},
}

View File

@@ -1,34 +0,0 @@
{
"name": "release-commenter",
"version": "0.0.0",
"description": "GitHub Action to automatically comment on PRs and Issues when a fix is released.",
"main": "dist/index.js",
"license": "MIT",
"private": true,
"scripts": {
"clean": "rimraf dist",
"build": "pnpm build:typecheck && pnpm build:ncc",
"build:ncc": "ncc build src/index.ts -t -o dist",
"build:typecheck": "tsc",
"test": "jest"
},
"dependencies": {
"@actions/core": "^1.3.0",
"@actions/github": "^5.0.0"
},
"devDependencies": {
"@octokit/webhooks-types": "^7.5.1",
"@swc/jest": "^0.2.36",
"@types/jest": "^27.5.2",
"@types/node": "^20.16.5",
"@typescript-eslint/eslint-plugin": "^4.33.0",
"@typescript-eslint/parser": "^4.33.0",
"@vercel/ncc": "0.38.1",
"concurrently": "^8.2.2",
"eslint": "^7.32.0",
"jest": "^29.7.0",
"prettier": "^3.3.3",
"ts-jest": "^26.5.6",
"typescript": "^4.9.5"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,266 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`tests feature tests can apply labels 1`] = `
[
[
{
"issue_number": 123,
"labels": [
":dart: landed",
"release-current_tag_name",
"Release Name",
],
},
],
[
{
"issue_number": 7,
"labels": [
":dart: landed",
"release-current_tag_name",
"Release Name",
],
},
],
]
`;
exports[`tests main test 1`] = `
{
"graphql": [MockFunction] {
"calls": [
[
"
{
resource(url: "http://repository/commit/SHA1") {
... on Commit {
messageHeadlineHTML
messageBodyHTML
associatedPullRequests(first: 10) {
pageInfo {
hasNextPage
}
edges {
node {
bodyHTML
number
state
labels(first: 10) {
pageInfo {
hasNextPage
}
nodes {
name
}
}
timelineItems(itemTypes: [CONNECTED_EVENT, DISCONNECTED_EVENT], first: 100) {
pageInfo {
hasNextPage
}
nodes {
... on ConnectedEvent {
__typename
isCrossRepository
subject {
... on Issue {
number
}
}
}
... on DisconnectedEvent {
__typename
isCrossRepository
subject {
... on Issue {
number
}
}
}
}
}
}
}
}
}
}
}
",
],
[
"
{
resource(url: "http://repository/commit/SHA2") {
... on Commit {
messageHeadlineHTML
messageBodyHTML
associatedPullRequests(first: 10) {
pageInfo {
hasNextPage
}
edges {
node {
bodyHTML
number
state
labels(first: 10) {
pageInfo {
hasNextPage
}
nodes {
name
}
}
timelineItems(itemTypes: [CONNECTED_EVENT, DISCONNECTED_EVENT], first: 100) {
pageInfo {
hasNextPage
}
nodes {
... on ConnectedEvent {
__typename
isCrossRepository
subject {
... on Issue {
number
}
}
}
... on DisconnectedEvent {
__typename
isCrossRepository
subject {
... on Issue {
number
}
}
}
}
}
}
}
}
}
}
}
",
],
],
"results": [
{
"type": "return",
"value": Promise {},
},
{
"type": "return",
"value": Promise {},
},
],
},
"rest": {
"issues": {
"addLabels": [MockFunction],
"createComment": [MockFunction] {
"calls": [
[
{
"body": "Included in release [current_tag_name](http://current_release). Replacements: current_tag_name, current_tag_name.",
"issue_number": 3,
},
],
[
{
"body": "Included in release [current_tag_name](http://current_release). Replacements: current_tag_name, current_tag_name.",
"issue_number": 123,
},
],
[
{
"body": "Included in release [current_tag_name](http://current_release). Replacements: current_tag_name, current_tag_name.",
"issue_number": 7,
},
],
],
"results": [
{
"type": "return",
"value": Promise {},
},
{
"type": "return",
"value": Promise {},
},
{
"type": "return",
"value": Promise {},
},
],
},
"get": [MockFunction] {
"calls": [
[
{
"issue_number": 3,
},
],
[
{
"issue_number": 123,
},
],
[
{
"issue_number": 7,
},
],
],
"results": [
{
"type": "return",
"value": Promise {},
},
{
"type": "return",
"value": Promise {},
},
{
"type": "return",
"value": Promise {},
},
],
},
},
"repos": {
"compareCommits": [MockFunction] {
"calls": [
[
{
"base": "prior_tag_name",
"head": "current_tag_name",
},
],
],
"results": [
{
"type": "return",
"value": Promise {},
},
],
},
"listReleases": [MockFunction] {
"calls": [
[
{
"per_page": 100,
},
],
],
"results": [
{
"type": "return",
"value": Promise {},
},
],
},
},
},
}
`;

View File

@@ -1,399 +0,0 @@
import type * as githubModule from '@actions/github'
import type * as coreModule from '@actions/core'
import { mock } from 'node:test'
jest.mock('@actions/core')
jest.mock('@actions/github')
type Mocked<T> = {
-readonly [P in keyof T]: T[P] extends Function ? jest.Mock<T[P]> : jest.Mocked<Partial<T[P]>>
}
const github = require('@actions/github') as jest.Mocked<Mocked<typeof githubModule>>
const core = require('@actions/core') as jest.Mocked<Mocked<typeof coreModule>>
describe('tests', () => {
let mockOctokit: any = {}
let currentTag: string = 'current_tag_name'
;(core.warning as any) = jest.fn(console.warn.bind(console))
;(core.error as any) = jest.fn(console.error.bind(console))
let commentTempate: string = ''
let labelTemplate: string | null = null
const skipLabelTemplate: string | null = 'skip,test'
let tagFilter: string | RegExp | null = null
let simpleMockOctokit: any = {}
beforeEach(() => {
tagFilter = null
currentTag = 'current_tag_name'
;(github.context as any) = {
payload: {
repo: {
owner: 'owner',
repo: 'repo',
},
release: {
tag_name: currentTag,
},
repository: { html_url: 'http://repository' },
},
}
github.getOctokit.mockReset().mockImplementationOnce(((token: string) => {
expect(token).toBe('GITHUB_TOKEN_VALUE')
return mockOctokit
}) as any)
;(core.getInput as any).mockImplementation((key: string) => {
if (key == 'GITHUB_TOKEN') {
return 'GITHUB_TOKEN_VALUE'
}
if (key == 'comment-template') {
return commentTempate
}
if (key == 'label-template') {
return labelTemplate
}
if (key == 'skip-label') {
return skipLabelTemplate
}
if (key == 'tag-filter') {
return tagFilter
}
fail(`Unexpected input key ${key}`)
})
commentTempate =
'Included in release {release_link}. Replacements: {release_name}, {release_tag}.'
labelTemplate = null
simpleMockOctokit = {
rest: {
issues: {
get: jest.fn(() => Promise.resolve({ data: { locked: false } })),
createComment: jest.fn(() => Promise.resolve()),
addLabels: jest.fn(() => Promise.resolve()),
},
repos: {
listReleases: jest.fn(() =>
Promise.resolve({
data: [
{
name: 'Release Name',
tag_name: 'current_tag_name',
html_url: 'http://current_release',
},
{
tag_name: 'prior_tag_name',
html_url: 'http://prior_release',
},
],
}),
),
compareCommits: jest.fn(() =>
Promise.resolve({
data: { commits: [{ sha: 'SHA1' }] },
}),
),
},
},
graphql: jest.fn(() =>
Promise.resolve({
resource: {
messageHeadlineHTML: '',
messageBodyHTML:
'<span class="issue-keyword tooltipped tooltipped-se" aria-label="This commit closes issue #123.">Closes</span> <p><span class="issue-keyword tooltipped tooltipped-se" aria-label="This pull request closes issue #7.">Closes</span>',
associatedPullRequests: {
pageInfo: { hasNextPage: false },
edges: [],
},
},
}),
),
}
})
afterEach(() => {
expect(core.error).not.toHaveBeenCalled()
expect(core.warning).not.toHaveBeenCalled()
expect(core.setFailed).not.toHaveBeenCalled()
})
test('main test', async () => {
mockOctokit = {
...simpleMockOctokit,
rest: {
issues: {
get: jest.fn(() => Promise.resolve({ data: { locked: false } })),
createComment: jest.fn(() => Promise.resolve()),
addLabels: jest.fn(() => Promise.resolve()),
},
repos: {
listReleases: jest.fn(() =>
Promise.resolve({
data: [
{
tag_name: 'current_tag_name',
html_url: 'http://current_release',
},
{
tag_name: 'prior_tag_name',
html_url: 'http://prior_release',
},
],
}),
),
compareCommits: jest.fn(() =>
Promise.resolve({
data: { commits: [{ sha: 'SHA1' }, { sha: 'SHA2' }] },
}),
),
},
},
graphql: jest.fn(() =>
Promise.resolve({
resource: {
messageHeadlineHTML:
'<span class="issue-keyword tooltipped tooltipped-se" aria-label="This commit closes issue #3.">Closes</span> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="718013420" data-permission-text="Title is private" data-url="https://github.com/apexskier/github-release-commenter/issues/1" data-hovercard-type="issue" data-hovercard-url="/apexskier/github-release-commenter/issues/1/hovercard" href="https://github.com/apexskier/github-release-commenter/issues/1">#1</a>',
messageBodyHTML:
'<span class="issue-keyword tooltipped tooltipped-se" aria-label="This commit closes issue #123.">Closes</span> <p><span class="issue-keyword tooltipped tooltipped-se" aria-label="This pull request closes issue #7.">Closes</span>',
associatedPullRequests: {
pageInfo: { hasNextPage: false },
edges: [
{
node: {
bodyHTML:
'<span class="issue-keyword tooltipped tooltipped-se" aria-label="This commit closes issue #4.">Closes</span> <span class="issue-keyword tooltipped tooltipped-se" aria-label="This commit closes issue #5.">Closes</span>',
number: 9,
labels: {
pageInfo: { hasNextPage: false },
nodes: [{ name: 'label1' }, { name: 'label2' }],
},
timelineItems: {
pageInfo: { hasNextPage: false },
nodes: [
{
isCrossRepository: true,
__typename: 'ConnectedEvent',
subject: { number: 1 },
},
{
isCrossRepository: false,
__typename: 'ConnectedEvent',
subject: { number: 2 },
},
{
isCrossRepository: false,
__typename: 'DisconnectedEvent',
subject: { number: 2 },
},
{
isCrossRepository: false,
__typename: 'ConnectedEvent',
subject: { number: 2 },
},
],
},
},
},
{
node: {
bodyHTML: '',
number: 42,
labels: {
pageInfo: { hasNextPage: false },
nodes: [{ name: 'label1' }, { name: 'skip' }],
},
timelineItems: {
pageInfo: { hasNextPage: false },
nodes: [
{
isCrossRepository: true,
__typename: 'ConnectedEvent',
subject: { number: 82 },
},
],
},
},
},
],
},
},
}),
),
}
jest.isolateModules(() => {
require('./index')
})
await new Promise<void>(setImmediate)
expect(mockOctokit).toMatchSnapshot()
expect(mockOctokit.rest.issues.createComment).toHaveBeenCalledTimes(3)
})
describe('can filter tags', () => {
const v3prev = 'v3.0.1'
const v3current = 'v3.0.2'
const v2prev = 'v2.0.1'
const v2current = 'v2.0.2'
const listReleasesData = [
{
name: 'Current Release Name',
tag_name: v3current,
html_url: 'http://v3.0.2',
},
{
name: 'Prev Release Name',
tag_name: v3prev,
html_url: 'http://v3.0.1',
},
{
name: 'v2 Current Release Name',
tag_name: v2current,
html_url: 'http://v2.0.2',
},
{
name: 'v2 Prev Release Name',
tag_name: v2prev,
html_url: 'http://v2.0.1',
},
]
it.each`
description | prevTag | currentTag | filter
${'no filter'} | ${v3prev} | ${v3current} | ${null}
${'v3'} | ${v3prev} | ${v3current} | ${'v\\d'}
${'v2'} | ${v2prev} | ${v2current} | ${'v\\d'}
`('should filter tags with $description', async ({ prevTag, currentTag, filter }) => {
// @ts-ignore
github.context.payload.release.tag_name = currentTag
tagFilter = filter
mockOctokit = {
...simpleMockOctokit,
rest: {
issues: {
get: jest.fn(() => Promise.resolve({ data: { locked: false } })),
createComment: jest.fn(() => Promise.resolve()),
addLabels: jest.fn(() => Promise.resolve()),
},
repos: {
listReleases: jest.fn(() =>
Promise.resolve({
data: listReleasesData,
}),
),
compareCommits: jest.fn(() =>
Promise.resolve({
data: { commits: [{ sha: 'SHA1' }] },
}),
),
},
},
graphql: jest.fn(() =>
Promise.resolve({
resource: {
messageHeadlineHTML: '',
messageBodyHTML:
'<span class="issue-keyword tooltipped tooltipped-se" aria-label="This commit closes issue #123.">Closes</span> <p><span class="issue-keyword tooltipped tooltipped-se" aria-label="This pull request closes issue #7.">Closes</span>',
associatedPullRequests: {
pageInfo: { hasNextPage: false },
edges: [],
},
},
}),
),
}
jest.isolateModules(() => {
require('./index')
})
await new Promise<void>(resolve => setImmediate(() => resolve()))
expect(github.getOctokit).toHaveBeenCalled()
expect(mockOctokit.rest.repos.compareCommits.mock.calls).toEqual([
[{ base: prevTag, head: currentTag }],
])
})
})
describe('feature tests', () => {
beforeEach(() => {
mockOctokit = simpleMockOctokit
})
it('can disable comments', async () => {
commentTempate = ''
jest.isolateModules(() => {
require('./index')
})
await new Promise<void>(resolve => setImmediate(() => resolve()))
expect(github.getOctokit).toHaveBeenCalled()
expect(mockOctokit.rest.issues.createComment).not.toHaveBeenCalled()
})
it('should unlock and comment', async () => {
mockOctokit = {
...simpleMockOctokit,
rest: {
...simpleMockOctokit.rest,
issues: {
// Return locked for both issues to be commented on
get: jest.fn(() => Promise.resolve({ data: { locked: true } })),
lock: jest.fn(() => Promise.resolve()),
unlock: jest.fn(() => Promise.resolve()),
createComment: jest.fn(() => Promise.resolve()),
},
},
graphql: jest.fn(() =>
Promise.resolve({
resource: {
messageHeadlineHTML: '',
messageBodyHTML:
'<span class="issue-keyword tooltipped tooltipped-se" aria-label="This commit closes issue #123.">Closes</span> <p><span class="issue-keyword tooltipped tooltipped-se" aria-label="This pull request closes issue #7.">Closes</span>',
associatedPullRequests: {
pageInfo: { hasNextPage: false },
edges: [],
},
},
}),
),
}
jest.isolateModules(() => {
require('./index')
})
await new Promise<void>(resolve => setImmediate(() => resolve()))
expect(github.getOctokit).toHaveBeenCalled()
// Should call once for both linked issues
expect(mockOctokit.rest.issues.unlock).toHaveBeenCalledTimes(2)
expect(mockOctokit.rest.issues.createComment).toHaveBeenCalledTimes(2)
expect(mockOctokit.rest.issues.lock).toHaveBeenCalledTimes(2)
})
it.skip('can apply labels', async () => {
labelTemplate = ':dart: landed,release-{release_tag},{release_name}'
jest.isolateModules(() => {
require('./index')
})
await new Promise<void>(resolve => setImmediate(() => resolve()))
expect(github.getOctokit).toHaveBeenCalled()
expect(mockOctokit.rest.issues.addLabels.mock.calls).toMatchSnapshot()
})
})
})

View File

@@ -1,349 +0,0 @@
import * as core from '@actions/core'
import * as github from '@actions/github'
import type * as Webhooks from '@octokit/webhooks-types'
const closesMatcher = /aria-label="This (?:commit|pull request) closes issue #(\d+)\."/g
const releaseLinkTemplateRegex = /{release_link}/g
const releaseNameTemplateRegex = /{release_name}/g
const releaseTagTemplateRegex = /{release_tag}/g
;(async function main() {
try {
const payload = github.context.payload as Webhooks.EventPayloadMap['release']
const githubToken = core.getInput('GITHUB_TOKEN')
const tagFilter = core.getInput('tag-filter') || undefined // Accept tag filter as an input
const octokit = github.getOctokit(githubToken)
const commentTemplate = core.getInput('comment-template')
const labelTemplate = core.getInput('label-template') || null
const skipLabelTemplate = core.getInput('skip-label') || null
// Fetch the releases with the optional tag filter applied
const { data: rawReleases } = await octokit.rest.repos.listReleases({
...github.context.repo,
per_page: 100,
})
// Get the current release tag or latest tag
const currentTag = payload?.release?.tag_name || rawReleases?.[0]?.tag_name
let releases = rawReleases
// Filter releases by the tag filter if provided
if (tagFilter) {
core.info(`Filtering releases by tag filter: ${tagFilter}`)
// Get the matching part of the current release tag
const regexMatch = currentTag.match(tagFilter)?.[0]
if (!regexMatch) {
core.error(`Current release tag ${currentTag} does not match the tag filter ${tagFilter}`)
return
}
core.info(`Matched string from filter: ${regexMatch}`)
releases = releases
.filter(release => {
const match = release.tag_name.match(regexMatch)?.[0]
return match
})
.slice(0, 2)
}
core.info(`Releases: ${JSON.stringify(releases, null, 2)}`)
if (releases.length < 2) {
if (!releases.length) {
core.error(`No releases found with the provided tag filter: '${tagFilter}'`)
return
}
core.info('first release')
return
}
const [currentRelease, priorRelease] = releases
core.info(`${priorRelease.tag_name}...${currentRelease.tag_name}`)
const {
data: { commits },
} = await octokit.rest.repos.compareCommits({
...github.context.repo,
base: priorRelease.tag_name,
head: currentRelease.tag_name,
})
if (!currentRelease.name) {
core.info('Current release has no name, will fall back to the tag name.')
}
const releaseLabel = currentRelease.name || currentRelease.tag_name
const comment = commentTemplate
.trim()
.split(releaseLinkTemplateRegex)
.join(`[${releaseLabel}](${currentRelease.html_url})`)
.split(releaseNameTemplateRegex)
.join(releaseLabel)
.split(releaseTagTemplateRegex)
.join(currentRelease.tag_name)
const parseLabels = (rawInput: string | null) =>
rawInput
?.split(releaseNameTemplateRegex)
.join(releaseLabel)
?.split(releaseTagTemplateRegex)
.join(currentRelease.tag_name)
?.split(',')
?.map(l => l.trim())
.filter(l => l)
const labels = parseLabels(labelTemplate)
const skipLabels = parseLabels(skipLabelTemplate)
const linkedIssuesPrs = new Set<number>()
await Promise.all(
commits.map(commit =>
(async () => {
const query = `
{
resource(url: "${payload.repository.html_url}/commit/${commit.sha}") {
... on Commit {
messageHeadlineHTML
messageBodyHTML
associatedPullRequests(first: 10) {
pageInfo {
hasNextPage
}
edges {
node {
bodyHTML
number
state
labels(first: 10) {
pageInfo {
hasNextPage
}
nodes {
name
}
}
timelineItems(itemTypes: [CONNECTED_EVENT, DISCONNECTED_EVENT], first: 100) {
pageInfo {
hasNextPage
}
nodes {
... on ConnectedEvent {
__typename
isCrossRepository
subject {
... on Issue {
number
}
}
}
... on DisconnectedEvent {
__typename
isCrossRepository
subject {
... on Issue {
number
}
}
}
}
}
}
}
}
}
}
}
`
const response: {
resource: null | {
messageHeadlineHTML: string
messageBodyHTML: string
associatedPullRequests: {
pageInfo: { hasNextPage: boolean }
edges: ReadonlyArray<{
node: {
bodyHTML: string
number: number
state: 'OPEN' | 'CLOSED' | 'MERGED'
labels: {
pageInfo: { hasNextPage: boolean }
nodes: ReadonlyArray<{
name: string
}>
}
timelineItems: {
pageInfo: { hasNextPage: boolean }
nodes: ReadonlyArray<{
__typename: 'ConnectedEvent' | 'DisconnectedEvent'
isCrossRepository: boolean
subject: {
number: number
}
}>
}
}
}>
}
}
} = await octokit.graphql(query)
if (!response.resource) {
return
}
// core.info(JSON.stringify(response.resource, null, 2))
core.info(`Checking commit: ${payload.repository.html_url}/commit/${commit.sha}`)
const associatedClosedPREdges = response.resource.associatedPullRequests.edges.filter(
e => e.node.state === 'MERGED',
)
if (associatedClosedPREdges.length) {
core.info(
` Associated Merged PRs:\n ${associatedClosedPREdges.map(pr => `${payload.repository.html_url}/pull/${pr.node.number}`).join('\n ')}`,
)
} else {
core.info(' No associated merged PRs')
}
const html = [
response.resource.messageHeadlineHTML,
response.resource.messageBodyHTML,
...associatedClosedPREdges.map(pr => pr.node.bodyHTML),
].join(' ')
for (const match of html.matchAll(closesMatcher)) {
const [, num] = match
linkedIssuesPrs.add(parseInt(num, 10))
core.info(
` Linked issue/PR from closesMatcher: ${payload.repository.html_url}/pull/${num}`,
)
}
if (response.resource.associatedPullRequests.pageInfo.hasNextPage) {
core.warning(`Too many PRs associated with ${commit.sha}`)
}
const seen = new Set<number>()
for (const associatedPR of associatedClosedPREdges) {
if (associatedPR.node.timelineItems.pageInfo.hasNextPage) {
core.warning(`Too many links for #${associatedPR.node.number}`)
}
if (associatedPR.node.labels.pageInfo.hasNextPage) {
core.warning(`Too many labels for #${associatedPR.node.number}`)
}
// a skip labels is present on this PR
if (
skipLabels?.some(l => associatedPR.node.labels.nodes.some(({ name }) => name === l))
) {
continue
}
linkedIssuesPrs.add(associatedPR.node.number)
core.info(
` Linked issue/PR from associated PR: ${payload.repository.html_url}/pull/${associatedPR.node.number}`,
)
// These are sorted by creation date in ascending order. The latest event for a given issue/PR is all we need
// ignore links that aren't part of this repo
const links = associatedPR.node.timelineItems.nodes
.filter(node => !node.isCrossRepository)
.reverse()
for (const link of links) {
if (seen.has(link.subject.number)) {
continue
}
if (link.__typename == 'ConnectedEvent') {
linkedIssuesPrs.add(link.subject.number)
core.info(
`Linked issue/PR from connected event: ${payload.repository.html_url}/pull/${link.subject.number}`,
)
}
seen.add(link.subject.number)
}
}
})(),
),
)
core.info(
`Final issues/PRs to be commented on: \n${Array.from(linkedIssuesPrs)
.map(num => ` ${payload.repository.html_url}/pull/${num}`)
.join('\n')}`,
)
const requests: Array<Promise<unknown>> = []
for (const issueNumber of linkedIssuesPrs) {
const baseRequest = {
...github.context.repo,
issue_number: issueNumber,
}
if (comment) {
const commentRequest = {
...baseRequest,
body: comment,
}
// Check if issue is locked or not
const { data: issue } = await octokit.rest.issues.get(baseRequest)
let createCommentPromise: () => Promise<void>
if (!issue.locked) {
createCommentPromise = async () => {
try {
await octokit.rest.issues.createComment(commentRequest)
} catch (error) {
core.error(error as Error)
core.error(
`Failed to comment on issue/PR: ${issueNumber}. ${payload.repository.html_url}/pull/${issueNumber}`,
)
}
}
} else {
core.info(
`Issue/PR is locked: ${issueNumber}. Unlocking, commenting, and re-locking. ${payload.repository.html_url}/pull/${issueNumber}`,
)
createCommentPromise = async () => {
try {
core.debug(`Unlocking issue/PR: ${issueNumber}`)
await octokit.rest.issues.unlock(baseRequest)
core.debug(`Commenting on issue/PR: ${issueNumber}`)
await octokit.rest.issues.createComment(commentRequest)
core.debug(`Re-locking issue/PR: ${issueNumber}`)
await octokit.rest.issues.lock(baseRequest)
} catch (error) {
core.error(error as Error)
core.error(
`Failed to unlock, comment, and re-lock issue/PR: ${issueNumber}. ${payload.repository.html_url}/pull/${issueNumber}`,
)
}
}
}
requests.push(createCommentPromise())
}
if (labels) {
const request = {
...baseRequest,
labels,
}
// core.info(JSON.stringify(request, null, 2))
requests.push(octokit.rest.issues.addLabels(request))
}
}
await Promise.all(requests)
} catch (error) {
core.error(error as Error)
core.setFailed((error as Error).message)
}
})()

View File

@@ -1,15 +0,0 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["es2020.string"],
"noEmit": true,
"strict": true,
"noUnusedLocals": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"forceConsistentCasingInFileNames": true,
"downlevelIteration": true,
"skipLibCheck": true,
},
"exclude": ["src/**/*.test.ts"]
}

View File

@@ -1,13 +0,0 @@
module.exports = {
env: {
es6: true,
node: true,
},
extends: ['eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
},
plugins: ['@typescript-eslint'],
}

View File

@@ -1,8 +0,0 @@
module.exports = {
printWidth: 100,
parser: 'typescript',
semi: false,
singleQuote: true,
trailingComma: 'all',
arrowParens: 'avoid',
}

View File

@@ -1,22 +0,0 @@
MIT License
Copyright (c) 2024 Payload <info@payloadcms.com>. All modification and additions are copyright of Payload.
---
Original license:
ISC License
Copyright (c) 2023, Balázs Orbán
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@@ -1,21 +0,0 @@
# Triage
Modified version of https://github.com/balazsorban44/nissuer
## Modifications
- Port to TypeScript
- Remove issue locking
- Remove reproduction blocklist
- Uses `@vercel/ncc` for packaging
## Development
> [!IMPORTANT]
> Whenever a modification is made to the action, the action built to `dist` must be committed to the repository.
This is done by running:
```sh
pnpm build
```

View File

@@ -1,40 +0,0 @@
name: Triage
description: Initial triage for issues
inputs:
reproduction-comment:
description: 'Either a string or a path to a .md file inside the repository. Example: ".github/invalid-reproduction.md"'
default: '.github/invalid-reproduction.md'
reproduction-hosts:
description: 'Comma-separated list of hostnames that are allowed for reproductions. Example: "github.com,codesandbox.io"'
default: github.com
reproduction-invalid-label:
description: 'Label to apply to issues without a valid reproduction. Example: "invalid-reproduction"'
default: 'invalid-reproduction'
reproduction-issue-labels:
description: 'Comma-separated list of issue labels. If configured, only verify reproduction URLs of issues with one of these labels present. Adding a comma at the end will handle non-labeled issues as invalid. Example: "bug,", will consider issues with the label "bug" or no label.'
default: ''
reproduction-link-section:
description: 'A regular expression string with "(.*)" matching a valid URL in the issue body. The result is trimmed. Example: "### Link to reproduction(.*)### To reproduce"'
default: '### Link to reproduction(.*)### To reproduce'
tag-only:
description: Log and tag only. Do not perform closing or commenting actions.
default: false
runs:
using: "composite"
steps:
- name: Checkout code
if: ${{ github.event_name != 'pull_request' }}
uses: actions/checkout@v4
- name: Run action
run: node ${{ github.action_path }}/dist/index.js
shell: sh
# https://github.com/actions/runner/issues/665#issuecomment-676581170
env:
"INPUT_REPRODUCTION_COMMENT": ${{inputs.reproduction-comment}}
"INPUT_REPRODUCTION_HOSTS": ${{inputs.reproduction-hosts}}
"INPUT_REPRODUCTION_INVALID_LABEL": ${{inputs.reproduction-invalid-label}}
"INPUT_REPRODUCTION_ISSUE_LABELS": ${{inputs.reproduction-issue-labels}}
"INPUT_REPRODUCTION_LINK_SECTION": ${{inputs.reproduction-link-section}}
"INPUT_TAG_ONLY": ${{inputs.tag-only}}

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +0,0 @@
module.exports = {
testEnvironment: 'node',
testPathIgnorePatterns: ['/node_modules/', '<rootDir>/dist/'],
transform: {
'^.+\\.(t|j)sx?$': ['@swc/jest'],
},
}

View File

@@ -1,34 +0,0 @@
{
"name": "triage",
"version": "0.0.0",
"description": "GitHub Action to triage new issues",
"main": "dist/index.js",
"license": "MIT",
"private": true,
"scripts": {
"clean": "rimraf dist",
"build": "pnpm build:typecheck && pnpm build:ncc",
"build:ncc": "ncc build src/index.ts -t -o dist",
"build:typecheck": "tsc",
"test": "jest"
},
"dependencies": {
"@actions/core": "^1.3.0",
"@actions/github": "^5.0.0"
},
"devDependencies": {
"@octokit/webhooks-types": "^7.5.1",
"@swc/jest": "^0.2.36",
"@types/jest": "^27.5.2",
"@types/node": "^20.16.5",
"@typescript-eslint/eslint-plugin": "^4.33.0",
"@typescript-eslint/parser": "^4.33.0",
"@vercel/ncc": "0.38.1",
"concurrently": "^8.2.2",
"eslint": "^7.32.0",
"jest": "^29.7.0",
"prettier": "^3.3.3",
"ts-jest": "^26.5.6",
"typescript": "^4.9.5"
}
}

5419
.github/actions/triage/pnpm-lock.yaml generated vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,195 +0,0 @@
import { debug, error, getBooleanInput, getInput, info, setFailed } from '@actions/core'
import { context, getOctokit } from '@actions/github'
import { readFile, access } from 'node:fs/promises'
import { join } from 'node:path'
// Ensure GITHUB_TOKEN and GITHUB_WORKSPACE are present
if (!process.env.GITHUB_TOKEN) throw new TypeError('No GITHUB_TOKEN provided')
if (!process.env.GITHUB_WORKSPACE) throw new TypeError('Not a GitHub workspace')
// Define the configuration object
interface Config {
invalidLink: {
comment: string
bugLabels: string[]
hosts: string[]
label: string
linkSection: string
}
tagOnly: boolean
token: string
workspace: string
}
const config: Config = {
invalidLink: {
comment: getInput('reproduction_comment') || '.github/invalid-reproduction.md',
bugLabels: getInput('reproduction_issue_labels')
.split(',')
.map(l => l.trim()),
hosts: (getInput('reproduction_hosts') || 'github.com').split(',').map(h => h.trim()),
label: getInput('reproduction_invalid_label') || 'invalid-reproduction',
linkSection:
getInput('reproduction_link_section') || '### Link to reproduction(.*)### To reproduce',
},
tagOnly: getBooleanOrUndefined('tag_only') || false,
token: process.env.GITHUB_TOKEN,
workspace: process.env.GITHUB_WORKSPACE,
}
// Attempt to parse JSON, return parsed object or error
function tryParse(json: string): Record<string, unknown> {
try {
return JSON.parse(json)
} catch (e) {
setFailed(`Could not parse JSON: ${e instanceof Error ? e.message : e}`)
return {}
}
}
// Retrieves a boolean input or undefined based on environment variables
function getBooleanOrUndefined(value: string): boolean | undefined {
const variable = process.env[`INPUT_${value.toUpperCase()}`]
return variable === undefined || variable === '' ? undefined : getBooleanInput(value)
}
// Returns the appropriate label match type
function getLabelMatch(value: string | undefined): 'name' | 'description' {
return value === 'name' ? 'name' : 'description'
}
// Function to check if an issue contains a valid reproduction link
async function checkValidReproduction(): Promise<void> {
const { issue, action } = context.payload as {
issue: { number: number; body: string; labels: { name: string }[] } | undefined
action: string
}
if (action !== 'opened' || !issue?.body) return
const labels = issue.labels.map(l => l.name)
const issueMatchingLabel =
labels.length &&
config.invalidLink.bugLabels.length &&
labels.some(l => config.invalidLink.bugLabels.includes(l))
if (!issueMatchingLabel) {
info(
`Issue #${issue.number} does not match required labels: ${config.invalidLink.bugLabels.join(', ')}`,
)
info(`Issue labels: ${labels.join(', ')}`)
return
}
info(`Issue #${issue.number} labels: ${labels.join(', ')}`)
const { rest: client } = getOctokit(config.token)
const common = { ...context.repo, issue_number: issue.number }
const labelsToRemove = labels.filter(l => config.invalidLink.bugLabels.includes(l))
if (await isValidReproduction(issue.body)) {
await Promise.all(
labelsToRemove.map(label => client.issues.removeLabel({ ...common, name: label })),
)
return info(`Issue #${issue.number} contains a valid reproduction 💚`)
}
info(`Invalid reproduction, issue will be closed/labeled/commented...`)
// Adjust labels
await Promise.all(
labelsToRemove.map(label => client.issues.removeLabel({ ...common, name: label })),
)
info(`Issue #${issue.number} - validate label removed`)
await client.issues.addLabels({ ...common, labels: [config.invalidLink.label] })
info(`Issue #${issue.number} - labeled`)
// If tagOnly, do not close or comment
if (config.tagOnly) {
info('Tag-only enabled, no closing/commenting actions taken')
return
}
// Perform closing and commenting actions
await client.issues.update({ ...common, state: 'closed' })
info(`Issue #${issue.number} - closed`)
const comment = join(config.workspace, config.invalidLink.comment)
await client.issues.createComment({ ...common, body: await getCommentBody(comment) })
info(`Issue #${issue.number} - commented`)
}
/**
* Determine if an issue contains a valid/accessible link to a reproduction.
*
* Returns `true` if the link is valid.
* @param body - The body content of the issue
*/
async function isValidReproduction(body: string): Promise<boolean> {
const linkSectionRe = new RegExp(config.invalidLink.linkSection, 'is')
const link = body.match(linkSectionRe)?.[1]?.trim()
if (!link) {
info('Missing link')
info(`Link section regex: ${linkSectionRe}`)
info(`Link section: ${body}`)
return false
}
info(`Checking validity of link: ${link}`)
if (!URL.canParse(link)) {
info(`Invalid URL: ${link}`)
return false
}
const url = new URL(link)
if (!config.invalidLink.hosts.includes(url.hostname)) {
info('Link did not match allowed reproduction hosts')
return false
}
try {
// Verify that the link can be accessed
const response = await fetch(link)
const isOk = response.status < 400 || response.status >= 500
info(`Link status: ${response.status}`)
if (!isOk) {
info(`Link returned status ${response.status}`)
}
return isOk
} catch (error) {
info(`Error fetching link: ${(error as Error).message}`)
return false
}
}
/**
* Return either a file's content or a string
* @param {string} pathOrComment
*/
async function getCommentBody(pathOrComment: string) {
try {
await access(pathOrComment)
return await readFile(pathOrComment, 'utf8')
} catch (error: any) {
if (error.code === 'ENOENT') return pathOrComment
throw error
}
}
async function run() {
const { token, workspace, ...safeConfig } = config
info('Configuration:')
info(JSON.stringify(safeConfig, null, 2))
await checkValidReproduction()
}
run().catch(setFailed)

View File

@@ -1,15 +0,0 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["es2020.string"],
"noEmit": true,
"strict": true,
"noUnusedLocals": false, // Undo this
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"forceConsistentCasingInFileNames": true,
"downlevelIteration": true,
"skipLibCheck": true,
},
"exclude": ["src/**/*.test.ts"]
}

View File

@@ -1,18 +0,0 @@
We cannot recreate the issue with the provided information. **Please add a reproduction in order for us to be able to investigate.**
### Why was this issue marked with the `invalid-reproduction` label?
To be able to investigate, we need access to a reproduction to identify what triggered the issue. We prefer a link to a public GitHub repository created with `create-payload-app@beta -t blank` or a forked/branched version of this repository with tests added (more info in the [reproduction-guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md)).
To make sure the issue is resolved as quickly as possible, please make sure that the reproduction is as **minimal** as possible. This means that you should **remove unnecessary code, files, and dependencies** that do not contribute to the issue. Ensure your reproduction does not depend on secrets, 3rd party registries, private dependencies, or any other data that cannot be made public. Avoid a reproduction including a whole monorepo (unless relevant to the issue). The easier it is to reproduce the issue, the quicker we can help.
Please test your reproduction against the latest version of Payload to make sure your issue has not already been fixed.
### I added a link, why was it still marked?
Ensure the link is pointing to a codebase that is accessible (e.g. not a private repository). "[example.com](http://example.com/)", "n/a", "will add later", etc. are not acceptable links -- we need to see a public codebase. See the above section for accepted links.
### Useful Resources
- [Reproduction Guide](https://github.com/payloadcms/payload/blob/main/.github/reproduction-guide.md)
- [Contributing to Payload](https://www.youtube.com/watch?v=08Qa3ggR9rw)

View File

@@ -1,74 +0,0 @@
# docs: https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: github-actions
directories:
- /
- /.github/workflows
- /.github/actions/* # Not working until resolved: https://github.com/dependabot/dependabot-core/issues/6345
- /.github/actions/setup
target-branch: beta
schedule:
interval: monthly
timezone: America/Detroit
time: '06:00'
groups:
github_actions:
patterns:
- '*'
- package-ecosystem: npm
directory: /
target-branch: beta
schedule:
interval: weekly
day: sunday
timezone: America/Detroit
time: '06:00'
commit-message:
prefix: 'chore(deps)'
labels:
- dependencies
groups:
production-deps:
dependency-type: production
update-types:
- minor
- patch
patterns:
- '*'
exclude-patterns:
- 'drizzle*'
dev-deps:
dependency-type: development
update-types:
- minor
- patch
patterns:
- '*'
exclude-patterns:
- 'drizzle*'
# Only bump patch versions for 2.x
- package-ecosystem: npm
directory: /
target-branch: main
schedule:
interval: weekly
day: sunday
timezone: America/Detroit
time: '06:00'
commit-message:
prefix: 'chore(deps)'
labels:
- dependencies
groups:
production-deps:
dependency-type: production
update-types:
- patch
patterns:
- '*'
exclude-patterns:
- 'drizzle*'

4026
.github/pnpm-lock.yaml generated vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +0,0 @@
packages:
- 'actions/*'

View File

@@ -1,116 +0,0 @@
name: label-on-change
on:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
issues:
types:
- assigned
- closed
- labeled
- reopened
# TODO: Handle labeling on comment
jobs:
on-labeled-ensure-one-status:
runs-on: ubuntu-24.04
permissions:
issues: write
# Only run on issue labeled and if label starts with 'status:'
if: github.event.action == 'labeled' && startsWith(github.event.label.name, 'status:')
steps:
- name: Ensure only one status label
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// Get all labels that start with 'status:' and are not the incoming label
const incomingLabelName = context.payload.label.name;
const labelNamesToRemove = context.payload.issue.labels
.filter(label => label.name.startsWith('status:') && label.name !== incomingLabelName)
.map(label => label.name);
if (!labelNamesToRemove.length) {
console.log('No labels to remove');
return;
}
console.log(`Labels to remove: '${labelNamesToRemove}'`);
// If there is more than one status label, remove all but the incoming label
for (const labelName of labelNamesToRemove) {
await github.rest.issues.removeLabel({
issue_number: context.issue.number,
name: labelName,
owner: context.repo.owner,
repo: context.repo.repo,
});
console.log(`Removed '${labelName}' label`);
}
on-issue-close:
runs-on: ubuntu-24.04
permissions:
issues: write
if: github.event.action == 'closed'
steps:
- name: Remove all labels on issue close
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// Get all labels that start with 'status:' and 'stale'
const labelNamesToRemove = context.payload.issue.labels
.filter(label => label.name.startsWith('status:') || label.name === 'stale')
.map(label => label.name);
if (!labelNamesToRemove.length) {
console.log('No labels to remove');
return;
}
console.log(`Labels to remove: '${labelNamesToRemove}'`);
for (const labelName of labelNamesToRemove) {
await github.rest.issues.removeLabel({
issue_number: context.issue.number,
name: labelName,
owner: context.repo.owner,
repo: context.repo.repo,
});
console.log(`Removed '${labelName}' label`);
}
on-issue-reopen:
runs-on: ubuntu-24.04
permissions:
issues: write
if: github.event.action == 'reopened'
steps:
- name: Add needs-triage label on issue reopen
uses: actions-ecosystem/action-add-labels@v1
with:
labels: 'status: needs-triage'
on-issue-assigned:
runs-on: ubuntu-24.04
permissions:
issues: write
if: >
github.event.action == 'assigned' &&
contains(github.event.issue.labels.*.name, 'status: needs-triage')
steps:
- name: Remove needs-triage label on issue assign
uses: actions-ecosystem/action-remove-labels@v1
with:
labels: 'status: needs-triage'
# on-pr-merge:
# runs-on: ubuntu-24.04
# if: github.event.pull_request.merged == true
# steps:
# on-pr-close:
# runs-on: ubuntu-24.04
# if: github.event_name == 'pull_request_target' && github.event.pull_request.merged == false
# steps:

View File

@@ -1,26 +0,0 @@
name: lock-issues
on:
schedule:
# Run nightly at 12am EST
- cron: '0 4 * * *'
workflow_dispatch:
permissions:
issues: write
jobs:
lock_issues:
runs-on: ubuntu-24.04
steps:
- name: Lock issues
uses: dessant/lock-threads@v5
with:
process-only: 'issues'
issue-inactive-days: '1'
exclude-any-issue-labels: 'status: awaiting-reply'
log-output: true
issue-comment: >
This issue has been automatically locked.
Please open a new issue if this issue persists with any additional detail.

View File

@@ -2,23 +2,19 @@ name: build
on:
pull_request:
types: [opened, reopened, synchronize]
types: [ opened, reopened, synchronize ]
push:
branches: ['main']
branches: ['main', 'feat/next-poc']
jobs:
changes:
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
needs_build: ${{ steps.filter.outputs.needs_build }}
templates: ${{ steps.filter.outputs.templates }}
steps:
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- uses: actions/checkout@v4
with:
fetch-depth: 25
@@ -27,7 +23,7 @@ jobs:
with:
filters: |
needs_build:
- '.github/workflows/main.yml'
- '.github/workflows/**'
- 'packages/**'
- 'test/**'
- 'pnpm-lock.yaml'
@@ -42,26 +38,22 @@ jobs:
core-build:
needs: changes
if: ${{ needs.changes.outputs.needs_build == 'true' }}
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 25
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- name: Use Node.js 22.6.0
uses: actions/setup-node@v4
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 22.6.0
node-version: 18
- name: Install pnpm
uses: pnpm/action-setup@v3
uses: pnpm/action-setup@v2
with:
version: 9.7.0
version: 8
run_install: false
- name: Get pnpm store directory
@@ -69,7 +61,7 @@ jobs:
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
@@ -79,16 +71,54 @@ jobs:
${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- run: pnpm install
- run: pnpm run build
- run: pnpm run build:core
- name: Cache build
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ./*
key: ${{ github.sha }}-${{ github.run_number }}
plugins-build:
needs: changes
if: ${{ needs.changes.outputs.needs_build == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 25
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8
run_install: false
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- run: pnpm install
- run: pnpm run build:plugins
tests:
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
needs: core-build
strategy:
fail-fast: false
@@ -104,23 +134,19 @@ jobs:
AWS_REGION: us-east-1
steps:
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- name: Use Node.js 22.6.0
uses: actions/setup-node@v4
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 22.6.0
node-version: 18
- name: Install pnpm
uses: pnpm/action-setup@v3
uses: pnpm/action-setup@v2
with:
version: 9.7.0
version: 8
run_install: false
- name: Restore build
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ./*
key: ${{ github.sha }}-${{ github.run_number }}
@@ -131,7 +157,7 @@ jobs:
- name: Start PostgreSQL
uses: CasperWA/postgresql-action@v1.2
with:
postgresql version: '14' # See https://hub.docker.com/_/postgres for available versions
postgresql version: '14' # See https://hub.docker.com/_/postgres for available versions
postgresql db: ${{ env.POSTGRES_DB }}
postgresql user: ${{ env.POSTGRES_USER }}
postgresql password: ${{ env.POSTGRES_PASSWORD }}
@@ -181,57 +207,31 @@ jobs:
POSTGRES_URL: ${{ env.POSTGRES_URL }}
tests-e2e:
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
needs: core-build
strategy:
fail-fast: false
matrix:
part: [1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8, 8/8]
part: [ 1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8, 8/8 ]
steps:
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- name: Use Node.js 22.6.0
uses: actions/setup-node@v4
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 22.6.0
node-version: 18
- name: Install pnpm
uses: pnpm/action-setup@v3
uses: pnpm/action-setup@v2
with:
version: 9.7.0
version: 8
run_install: false
- name: Restore build
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ./*
key: ${{ github.sha }}-${{ github.run_number }}
- name: Store Playwright's Version
run: |
# Extract the version number using a more targeted regex pattern with awk
PLAYWRIGHT_VERSION=$(pnpm ls @playwright/test --depth=0 | awk '/@playwright\/test/ {print $2}')
echo "Playwright's Version: $PLAYWRIGHT_VERSION"
echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV
- name: Cache Playwright Browsers for Playwright's Version
id: cache-playwright-browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ env.PLAYWRIGHT_VERSION }}
- name: Setup Playwright - Browsers and Dependencies
if: steps.cache-playwright-browsers.outputs.cache-hit != 'true'
run: pnpm exec playwright install --with-deps chromium
- name: Setup Playwright - Dependencies-only
if: steps.cache-playwright-browsers.outputs.cache-hit == 'true'
run: pnpm exec playwright install-deps chromium
- name: E2E Tests
uses: nick-fields/retry@v2
with:
@@ -240,7 +240,7 @@ jobs:
timeout_minutes: 15
command: pnpm test:e2e --part ${{ matrix.part }} --bail
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v3
if: always()
with:
name: test-results
@@ -248,27 +248,23 @@ jobs:
retention-days: 1
tests-type-generation:
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
needs: core-build
steps:
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- name: Use Node.js 22.6.0
uses: actions/setup-node@v4
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 22.6.0
node-version: 18
- name: Install pnpm
uses: pnpm/action-setup@v3
uses: pnpm/action-setup@v2
with:
version: 9.7.0
version: 8
run_install: false
- name: Restore build
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ./*
key: ${{ github.sha }}-${{ github.run_number }}
@@ -279,49 +275,8 @@ jobs:
- name: Generate GraphQL schema file
run: pnpm dev:generate-graphql-schema graphql-schema-gen
build-packages:
runs-on: ubuntu-24.04
needs: core-build
strategy:
fail-fast: false
matrix:
pkg:
- db-mongodb
- db-postgres
- bundler-webpack
- bundler-vite
- richtext-slate
- richtext-lexical
- live-preview
- live-preview-react
steps:
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- name: Use Node.js 22.6.0
uses: actions/setup-node@v4
with:
node-version: 22.6.0
- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9.7.0
run_install: false
- name: Restore build
uses: actions/cache@v4
with:
path: ./*
key: ${{ github.sha }}-${{ github.run_number }}
- name: Build ${{ matrix.pkg }}
run: pnpm turbo run build --filter=${{ matrix.pkg }}
plugins:
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
needs: core-build
strategy:
fail-fast: false
@@ -337,23 +292,19 @@ jobs:
- plugin-seo
steps:
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- name: Use Node.js 22.6.0
uses: actions/setup-node@v4
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 22.6.0
node-version: 18
- name: Install pnpm
uses: pnpm/action-setup@v3
uses: pnpm/action-setup@v2
with:
version: 9.7.0
version: 8
run_install: false
- name: Restore build
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ./*
key: ${{ github.sha }}-${{ github.run_number }}
@@ -368,25 +319,21 @@ jobs:
templates:
needs: changes
if: ${{ needs.changes.outputs.templates == 'true' }}
runs-on: ubuntu-24.04
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
template: [blank, website, ecommerce]
template: [ blank, website, ecommerce ]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 25
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- name: Use Node.js 22.6.0
uses: actions/setup-node@v4
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 22.6.0
node-version: 18
- name: Start MongoDB
uses: supercharge/mongodb-github-action@1.10.0

View File

@@ -1,32 +0,0 @@
name: post-release
on:
release:
types:
- published
workflow_dispatch:
jobs:
post_release:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Only needed if debugging on a branch other than default
# ref: ${{ github.event.release.target_commitish || github.ref }}
- run: echo "npm_version=$(npm pkg get version | tr -d '"')" >> "$GITHUB_ENV"
- uses: ./.github/actions/release-commenter
continue-on-error: true
env:
ACTIONS_STEP_DEBUG: true
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
tag-filter: 'v\d'
# Change to blank to disable commenting
# comment-template: ''
comment-template: |
🚀 This is included in version {release_link}

View File

@@ -1,11 +0,0 @@
name: release-canary
on:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-24.04
steps:
- name: Echo
run: echo "Register release-canary workflow"

View File

@@ -1,42 +0,0 @@
name: stale
on:
workflow_dispatch:
jobs:
stale:
runs-on: ubuntu-24.04
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v9
id: stale
with:
debug-only: true
days-before-stale: 90
days-before-close: 7
ascending: true
operations-per-run: 300
# Ignore all assigned
exempt-all-assignees: false
# Issues
stale-issue-label: 'stale'
exempt-issue-labels: 'blocked,must,should,keep,created-by: Payload team,created-by: Contributor'
stale-issue-message: >
This issue has been marked as stale due to lack of activity. To keep the ticket open, please indicate that it is still relevant in a comment below.
close-issue-message: >
This issue was automatically closed due to lack of activity.
# Pull Requests
stale-pr-label: 'stale'
exempt-pr-labels: 'blocked,must,should,keep,created-by: Payload team,created-by: Contributor'
stale-pr-message: >
This PR is stale due to lack of activity. To keep the PR open, please indicate that it is still relevant in a comment below.
close-pr-message: >
This pull request was automatically closed due to lack of activity.
- name: Print outputs
run: echo ${{ format('{0},{1}', toJSON(steps.stale.outputs.staled-issues-prs), toJSON(steps.stale.outputs.closed-issues-prs)) }}

View File

@@ -1,102 +0,0 @@
name: triage
on:
pull_request:
types:
- opened
issues:
types:
- opened
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
permissions:
contents: read
issues: write
pull-requests: write
jobs:
debug-context:
runs-on: ubuntu-24.04
steps:
- name: View context attributes
uses: actions/github-script@v7
with:
script: console.log({ context })
label-created-by:
name: label-on-open
runs-on: ubuntu-24.04
steps:
- name: Tag with 'created-by'
uses: actions/github-script@v7
if: github.event.action == 'opened'
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const payloadTeamUsernames = [
'denolfe',
'jmikrut',
'DanRibbens',
'jacobsfletch',
'JarrodMFlesch',
'AlessioGr',
'JessChowdhury',
'kendelljoseph',
'PatrikKozak',
'tylandavis',
'paulpopus',
'r1tsuu',
'GermanJablo',
];
const type = context.payload.pull_request ? 'pull_request' : 'issue';
const isTeamMember = payloadTeamUsernames
.map(n => n.toLowerCase())
.includes(context.payload[type].user.login.toLowerCase());
if (isTeamMember) {
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['created-by: Payload team'],
});
console.log(`Added 'created-by: Payload team' label`);
return;
}
const association = context.payload[type].author_association;
let label = ''
if (association === 'MEMBER' || association === 'OWNER') {
label = 'created-by: Payload team';
} else if (association === 'CONTRIBUTOR') {
label = 'created-by: Contributor';
}
if (!label) return;
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: [label],
});
console.log(`Added '${label}' label.`);
triage:
name: initial-triage
if: github.event_name == 'issues'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: ./.github/actions/triage
with:
reproduction-comment: '.github/comments/invalid-reproduction.md'
reproduction-link-section: '### Link to the code that reproduces this issue(.*)### Reproduction Steps'
reproduction-issue-labels: 'validate-reproduction'
tag-only: 'true'

8
.gitignore vendored
View File

@@ -4,14 +4,15 @@ dist
/.idea/*
!/.idea/runConfigurations
# Custom actions
!.github/actions/**/dist
test-results
.devcontainer
.localstack
/migrations
/media
.localstack
.turbo
.turbo
# Created by https://www.toptal.com/developers/gitignore/api/node,macos,windows,webstorm,sublimetext,visualstudiocode
# Edit at https://www.toptal.com/developers/gitignore?templates=node,macos,windows,webstorm,sublimetext,visualstudiocode
@@ -137,6 +138,7 @@ out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/

View File

@@ -1 +1 @@
v18.17.1
v18.19.1

2
.nvmrc
View File

@@ -1 +1 @@
v18.17.1
v18.19.1

22
.vscode/launch.json vendored
View File

@@ -2,6 +2,12 @@
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
"configurations": [
{
"command": "pnpm dev",
"name": "Run Dev 3.0",
"request": "launch",
"type": "node-terminal"
},
{
"command": "pnpm run dev _community",
"cwd": "${workspaceFolder}",
@@ -19,13 +25,6 @@
"PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER": "s3"
}
},
{
"command": "pnpm run dev collections-graphql",
"cwd": "${workspaceFolder}",
"name": "Run Dev GraphQL",
"request": "launch",
"type": "node-terminal"
},
{
"command": "pnpm run dev fields",
"cwd": "${workspaceFolder}",
@@ -34,7 +33,7 @@
"type": "node-terminal"
},
{
"command": "pnpm run dev:postgres fields",
"command": "pnpm run dev:postgres versions",
"cwd": "${workspaceFolder}",
"name": "Run Dev Postgres",
"request": "launch",
@@ -54,13 +53,6 @@
"request": "launch",
"type": "node-terminal"
},
{
"command": "pnpm run dev field-error-states",
"cwd": "${workspaceFolder}",
"name": "Run Dev Field Error States",
"request": "launch",
"type": "node-terminal"
},
{
"command": "pnpm run dev uploads",
"cwd": "${workspaceFolder}",

29
.vscode/settings.json vendored
View File

@@ -36,8 +36,29 @@
"typescript.tsdk": "node_modules/typescript/lib",
// Load .git-blame-ignore-revs file
"gitlens.advanced.blame.customArguments": ["--ignore-revs-file", ".git-blame-ignore-revs"],
"jestrunner.jestCommand": "pnpm exec cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-deprecation\" node 'node_modules/jest/bin/jest.js'",
"jestrunner.debugOptions": {
"runtimeArgs": ["--experimental-vm-modules", "--no-deprecation"]
}
"[javascript][typescript][typescriptreact]": {
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#8cb5b6",
"activityBar.background": "#8cb5b6",
"activityBar.foreground": "#15202b",
"activityBar.inactiveForeground": "#15202b99",
"activityBarBadge.background": "#9c639b",
"activityBarBadge.foreground": "#e7e7e7",
"commandCenter.border": "#15202b99",
"sash.hoverBorder": "#8cb5b6",
"statusBar.background": "#6da1a2",
"statusBar.foreground": "#15202b",
"statusBarItem.hoverBackground": "#568586",
"statusBarItem.remoteBackground": "#6da1a2",
"statusBarItem.remoteForeground": "#15202b",
"titleBar.activeBackground": "#6da1a2",
"titleBar.activeForeground": "#15202b",
"titleBar.inactiveBackground": "#6da1a299",
"titleBar.inactiveForeground": "#15202b99"
},
"peacock.color": "#6da1a2"
}

View File

@@ -1,549 +1,3 @@
## [2.32.2](https://github.com/payloadcms/payload/compare/v2.32.1...v2.32.2) (2025-03-14)
Bump critical deps ([#11705](https://github.com/payloadcms/payload/pull/11705))
## [2.32.1](https://github.com/payloadcms/payload/compare/v2.32.0...v2.32.1) (2025-03-14)
Bumps dependencies ([#11702](https://github.com/payloadcms/payload/pull/11702))
### Bug Fixes
* remove collapsible label prefix from the FieldSelect dropdown component ([#10760](https://github.com/payloadcms/payload/issues/10760)) ([a5e6ea5](https://github.com/payloadcms/payload/commit/a5e6ea57373591ec90f452ad61b376f72f9ce304)), closes [#10757](https://github.com/payloadcms/payload/issues/10757)
## [2.32.0](https://github.com/payloadcms/payload/compare/v2.31.0...v2.32.0) (2025-01-10)
### Features
* export CheckboxInput ([#10489](https://github.com/payloadcms/payload/issues/10489)) ([2e35255](https://github.com/payloadcms/payload/commit/2e352552d1905217acdc52f5c4a6255eb24b247c))
## [2.31.0](https://github.com/payloadcms/payload/compare/v2.30.4...v2.31.0) (2025-01-09)
### Features
* adds `forceRenderAllFields` admin prop to force all fields in edit view to render immediately ([#10464](https://github.com/payloadcms/payload/issues/10464)) ([07ff181](https://github.com/payloadcms/payload/commit/07ff181ccf5e455c97a4afa6d72bcbc173b1a76d))
* **i18n:** add Slovenian (sl) translation ([#8709](https://github.com/payloadcms/payload/issues/8709)) ([7039b1f](https://github.com/payloadcms/payload/commit/7039b1f82e323358a605f9b2165328403f8da74c))
* **v2:** allows filtering on group field types from list view ([#10421](https://github.com/payloadcms/payload/issues/10421)) ([f430db8](https://github.com/payloadcms/payload/commit/f430db8bc5853f5a444d8c2ec6626df0af2e41a4))
### Bug Fixes
* **graphql:** 500 error when querying hasMany field data that is filtered by access-control ([#6519](https://github.com/payloadcms/payload/issues/6519)) ([4892d96](https://github.com/payloadcms/payload/commit/4892d965157285964fb024516ddcdf56a74cc68e)), closes [#6518](https://github.com/payloadcms/payload/issues/6518)
* when publishing from a draft, only 10 were published. ([#7906](https://github.com/payloadcms/payload/issues/7906)) ([0cf9678](https://github.com/payloadcms/payload/commit/0cf96785bc47e2d2ef107a139d03058e99c8bb79))
## [2.30.4](https://github.com/payloadcms/payload/compare/v2.30.3...v2.30.4) (2024-11-11)
### Features
* **plugin-seo:** add Turkish translation ([#8918](https://github.com/payloadcms/payload/issues/8918)) ([7c9ec9c](https://github.com/payloadcms/payload/commit/7c9ec9c4e0bafd19eb0ef94e9bb4aa07df3e097e))
### Bug Fixes
* **db-postgres:** sort by localized fields ([#9016](https://github.com/payloadcms/payload/issues/9016)) ([9c25754](https://github.com/payloadcms/payload/commit/9c25754eed87e70b053231693102378150b8b80d))
* edit many modal draft action button order and style ([#9046](https://github.com/payloadcms/payload/issues/9046)) ([a907480](https://github.com/payloadcms/payload/commit/a907480a94f07b4afa0e0723a3738c8bd457c51f)), closes [#9045](https://github.com/payloadcms/payload/issues/9045)
* error saving after duplicating blocks with nested items ([#8814](https://github.com/payloadcms/payload/issues/8814)) ([eba777c](https://github.com/payloadcms/payload/commit/eba777c3a0b4c489d87d3c6154d835a105fef4a2))
* list drawer relationship not displaying ([#9011](https://github.com/payloadcms/payload/issues/9011)) ([169da5c](https://github.com/payloadcms/payload/commit/169da5c3d83bfe3559227504929aa62721ded1d9))
* querying relationships by `id` path with REST ([#9014](https://github.com/payloadcms/payload/issues/9014)) ([a0bd706](https://github.com/payloadcms/payload/commit/a0bd7060c45df3037ee074bd83400837c0adb83a))
## [2.30.3](https://github.com/payloadcms/payload/compare/v2.30.2...v2.30.3) (2024-10-18)
### Bug Fixes
* **db-postgres:** migrate:create errors with previous schemas ([#8786](https://github.com/payloadcms/payload/issues/8786)) ([e9c1222](https://github.com/payloadcms/payload/commit/e9c12221824a9a180991722135d22ff91d07ef11))
* duplicate with select hasMany fields ([#8734](https://github.com/payloadcms/payload/issues/8734)) ([c8ed645](https://github.com/payloadcms/payload/commit/c8ed6454a733bea09ae620517c4894701999e119))
## [2.30.2](https://github.com/payloadcms/payload/compare/v2.30.1...v2.30.2) (2024-10-17)
### Bug Fixes
* applies resize after cropping if `resizeOptions` are defined ([#8535](https://github.com/payloadcms/payload/issues/8535)) ([f2284f3](https://github.com/payloadcms/payload/commit/f2284f3d1b420c543d9eee9929f961db4cbef8a1))
* calculates correct aspect ratio dimensions on sharp based files ([#8510](https://github.com/payloadcms/payload/issues/8510)) ([9d05b82](https://github.com/payloadcms/payload/commit/9d05b82dc67b967e55176b92f7b20d4486883201)), closes [#8317](https://github.com/payloadcms/payload/issues/8317)
* **db-postgres:** build indexes for relationships ([#8446](https://github.com/payloadcms/payload/issues/8446)) ([d05e3b0](https://github.com/payloadcms/payload/commit/d05e3b0411c2e705bd7a26e93ba55f2b7532e41b))
* **db-postgres:** port many various fixes from 3.0 ([#8468](https://github.com/payloadcms/payload/issues/8468)) ([1347b6c](https://github.com/payloadcms/payload/commit/1347b6cc36c33043755b4e31d7731ba19b8c985f))
* **db-postgres:** select hasMany nested to array + tab/group ([#8739](https://github.com/payloadcms/payload/issues/8739)) ([0efc610](https://github.com/payloadcms/payload/commit/0efc6102104729a162912157a7e34293ec9764a5))
* **richtext-lexical:** add target _blank for new-tab in linkFeature ([#8571](https://github.com/payloadcms/payload/issues/8571)) ([61e8ce1](https://github.com/payloadcms/payload/commit/61e8ce17439301cb16aee92887e97a69cac4e044)), closes [#8569](https://github.com/payloadcms/payload/issues/8569)
## [2.30.1](https://github.com/payloadcms/payload/compare/v2.30.0...v2.30.1) (2024-10-02)
### Bug Fixes
* **db-mongodb:** properly filters out `number` field values with the `exists` operator filter ([#8415](https://github.com/payloadcms/payload/issues/8415)) ([0586f23](https://github.com/payloadcms/payload/commit/0586f236bbf04163a0d9b226772849cb3d977864)), closes [#8181](https://github.com/payloadcms/payload/issues/8181)
* sorting by id incorrectly orders by version.id ([#8450](https://github.com/payloadcms/payload/issues/8450)) ([1d38e6d](https://github.com/payloadcms/payload/commit/1d38e6d5d5b56a91aa8f59a461d40f28b1750f8c))
## [2.30.0](https://github.com/payloadcms/payload/compare/v2.29.0...v2.30.0) (2024-09-27)
* export toast from react toastify in payload ([#8438](https://github.com/payloadcms/payload/issues/8438)) ([17fc2d1](https://github.com/payloadcms/payload/commit/17fc2d13d06b6de01f839c27fd706bc0d6a185eb))
## [2.29.0](https://github.com/payloadcms/payload/compare/v2.28.0...v2.29.0) (2024-09-25)
### Features
* add new option to disable JOI validation ([#8067](https://github.com/payloadcms/payload/issues/8067)) ([28a0650](https://github.com/payloadcms/payload/commit/28a065072fcad2dc768e44d79609eb5ab8a3fdfd))
### Bug Fixes
* **db-postgres:** localized items in arrays with versions ([#8334](https://github.com/payloadcms/payload/issues/8334)) ([c86526b](https://github.com/payloadcms/payload/commit/c86526b5c81ff484e66fbe6e7c727fdcc1f93c77))
* **db-postgres:** querying on array within a relationship field ([#8153](https://github.com/payloadcms/payload/issues/8153)) ([170ea5b](https://github.com/payloadcms/payload/commit/170ea5badcff154514b8166ac92177d89a3fa5f8))
* **db-postgres:** sanitize tab/group path for table name ([#8010](https://github.com/payloadcms/payload/issues/8010)) ([ba7a043](https://github.com/payloadcms/payload/commit/ba7a043a99f58fad39a62ac471eeb7309a39bba0))
* treat empty strings as null / undefined for `exists` queries ([#8336](https://github.com/payloadcms/payload/issues/8336)) ([31d0b30](https://github.com/payloadcms/payload/commit/31d0b309fe5df1e37ed2a938959c1ef87834d987)), closes [#7714](https://github.com/payloadcms/payload/issues/7714)
## [2.28.0](https://github.com/payloadcms/payload/compare/v2.27.0...v2.28.0) (2024-09-04)
### Features
* collections can use custom database operations ([#7675](https://github.com/payloadcms/payload/issues/7675)) ([6ba293c](https://github.com/payloadcms/payload/commit/6ba293c0f84f91bf89cf089a20e47de130013ebb))
### Bug Fixes
* **db-postgres:** migration exit codes ([#7873](https://github.com/payloadcms/payload/issues/7873)) ([25e9bc6](https://github.com/payloadcms/payload/commit/25e9bc62dbcbabcb3619cf83e3dc0110e0a4cabf)), closes [#7031](https://github.com/payloadcms/payload/issues/7031)
* **db-postgres:** query hasMany text/number in array/blocks ([#8033](https://github.com/payloadcms/payload/issues/8033)) ([96a624a](https://github.com/payloadcms/payload/commit/96a624ad5c5259b197b4ca793d8419d1e827de9c))
* **plugin-cloud:** better logging on static handler ([#7924](https://github.com/payloadcms/payload/issues/7924)) ([1f09348](https://github.com/payloadcms/payload/commit/1f0934877ce5aabb771c936c3677a26d2ef006ec))
## [2.27.0](https://github.com/payloadcms/payload/compare/v2.26.0...v2.27.0) (2024-08-26)
### Features
* add support for custom image size file names ([#7637](https://github.com/payloadcms/payload/issues/7637)) ([f976270](https://github.com/payloadcms/payload/commit/f97627092cabe4eabbebefa75afc53579188386b))
* upgrade react-toastify dependency, and upgrade to pnpm v9 in our monorepo ([#7667](https://github.com/payloadcms/payload/issues/7667)) ([94d18e8](https://github.com/payloadcms/payload/commit/94d18e8d747588efce225cde0b621db9b513e7c1))
### Bug Fixes
* update state of field if either `valid` status or `errorMessage` changes ([#7632](https://github.com/payloadcms/payload/issues/7632)) ([c624eea](https://github.com/payloadcms/payload/commit/c624eea0d868938f4603860fa25be3df580ba7fe)), closes [#6413](https://github.com/payloadcms/payload/issues/6413)
## [2.26.0](https://github.com/payloadcms/payload/compare/v2.25.0...v2.26.0) (2024-08-09)
### Features
* adds classnames to edit, list views ([#7595](https://github.com/payloadcms/payload/issues/7595)) ([7f39afa](https://github.com/payloadcms/payload/commit/7f39afa1928b118451138e811ea71a04fce021d5))
* adds upload's relationship thumbnail ([#5015](https://github.com/payloadcms/payload/issues/5015)) ([39e110e](https://github.com/payloadcms/payload/commit/39e110e6331efff0ca8ca7174780076243a016de))
* **ui:** expose custom errors in delete many ([#7439](https://github.com/payloadcms/payload/issues/7439)) ([3e780b9](https://github.com/payloadcms/payload/commit/3e780b98155550f877021996dd094ba435dff81b))
### Bug Fixes
* **db-postgres:** localized array inside blocks field ([#7458](https://github.com/payloadcms/payload/issues/7458)) ([a308d63](https://github.com/payloadcms/payload/commit/a308d6384f9724c5ff330382070a5803fbcf167c)), closes [#5240](https://github.com/payloadcms/payload/issues/5240)
* deprecated `inflight` package ([#6558](https://github.com/payloadcms/payload/issues/6558)) ([eca1517](https://github.com/payloadcms/payload/commit/eca1517237c78983c192f4bafa92a86d94a0de9e)), closes [#6492](https://github.com/payloadcms/payload/issues/6492)
* enable `relationship` & `upload` field population in `versions` ([#7533](https://github.com/payloadcms/payload/issues/7533)) ([9865ae9](https://github.com/payloadcms/payload/commit/9865ae998b9aeb5d72724023976bb203133e19ff))
* filtering by non-poly `relationships` with `not_equals` operator ([#7573](https://github.com/payloadcms/payload/issues/7573)) ([efa56ce](https://github.com/payloadcms/payload/commit/efa56cefc15a48cd45b3aaba2eddacca79e1be30)), closes [#5212](https://github.com/payloadcms/payload/issues/5212) [#6278](https://github.com/payloadcms/payload/issues/6278)
* filtering by polymorphic `relationships` with `drafts` enabled ([#7565](https://github.com/payloadcms/payload/issues/7565)) ([907d7d1](https://github.com/payloadcms/payload/commit/907d7d1d3a89ed22bb991a1f238bb77d54e3e173)), closes [#6880](https://github.com/payloadcms/payload/issues/6880)
* retained date milliseconds ([#7393](https://github.com/payloadcms/payload/issues/7393)) ([9c9e689](https://github.com/payloadcms/payload/commit/9c9e6896a502de209c6cccf63cc5cfc0f0143bf3)), closes [#6108](https://github.com/payloadcms/payload/issues/6108)
* prevents `hasMany` text going outside of input boundaries ([#7454](https://github.com/payloadcms/payload/issues/7454)) ([1a0ef48](https://github.com/payloadcms/payload/commit/1a0ef4824b3d6548d36e7f28a2030640361c0655)), closes [#6034](https://github.com/payloadcms/payload/issues/6034)
* previousValue missing from ValidateOptions type ([#6931](https://github.com/payloadcms/payload/issues/6931)) ([fca5a40](https://github.com/payloadcms/payload/commit/fca5a404dbf3b440b428e55cf5e03db647f9a453))
* render singular label for `ArrayCell` when length is 1 ([#7585](https://github.com/payloadcms/payload/issues/7585)) ([fc4d24a](https://github.com/payloadcms/payload/commit/fc4d24aa8889ac9be76059a92478d5532b142b5c)), closes [#6099](https://github.com/payloadcms/payload/issues/6099)
## [2.25.0](https://github.com/payloadcms/payload/compare/v2.24.2...v2.25.0) (2024-07-26)
### Features
* allows metadata to be appended to the file of the output media ([#7295](https://github.com/payloadcms/payload/issues/7295)) ([3c5cce4](https://github.com/payloadcms/payload/commit/3c5cce4c6f108f87e87b091bbfec976423de73a2))
* **db-mongodb:** adds new optional `collation` feature flag behind mongodb collation option ([#7359](https://github.com/payloadcms/payload/issues/7359)) ([9750bc2](https://github.com/payloadcms/payload/commit/9750bc217ee7d63732a34908c84eb88b88dac0a8)), closes [#7349](https://github.com/payloadcms/payload/issues/7349)
### Bug Fixes
* properly handles `0` value number fields in list view ([#7364](https://github.com/payloadcms/payload/issues/7364)) ([5321098](https://github.com/payloadcms/payload/commit/5321098d7eada43838f6d5c69f3233c150fe0afa)), closes [#5510](https://github.com/payloadcms/payload/issues/5510)
* preserves objectids in deepCopyObject ([#7385](https://github.com/payloadcms/payload/issues/7385)) ([1348483](https://github.com/payloadcms/payload/commit/134848364801c72cc773ef7b48854306d1b9bac3))
* relaxes equality check for relationship options in filter ([#7344](https://github.com/payloadcms/payload/issues/7344)) ([468e544](https://github.com/payloadcms/payload/commit/468e5441f16775134d915ec7caddb17b817d3408))
* supports null values in query strings ([#5241](https://github.com/payloadcms/payload/issues/5241)) ([c57591b](https://github.com/payloadcms/payload/commit/c57591bc4fb8d28b7de16a111faffea7d3e11f8d))
## [2.24.2](https://github.com/payloadcms/payload/compare/v2.24.1...v2.24.2) (2024-07-24)
### Features
* **db-mongodb:** add jsonParse flag to mongooseAdapter that preserves existing, untracked MongoDB data types ([#7338](https://github.com/payloadcms/payload/issues/7338)) ([f96cf59](https://github.com/payloadcms/payload/commit/f96cf593cedcae0d8ed55f9a70e8e4e77917a876))
### Bug Fixes
* allow autosave relationship drawers to function properly ([#7325](https://github.com/payloadcms/payload/issues/7325)) ([69e7b7a](https://github.com/payloadcms/payload/commit/69e7b7a158c38058ece54a97bfa79e65192774a6))
* **db-mongodb:** removes precedence of regular chars over international chars in sort ([#6923](https://github.com/payloadcms/payload/issues/6923)) ([0058660](https://github.com/payloadcms/payload/commit/0058660b3f8bd820abb4494ff53fa67f49f0f6b4)), closes [#6719](https://github.com/payloadcms/payload/issues/6719)
* fetches and sets permissions before setting user ([#7337](https://github.com/payloadcms/payload/issues/7337)) ([8259611](https://github.com/payloadcms/payload/commit/8259611ce60e23f6298a07564d5f6dd2966d61ff))
* **plugin-stripe:** properly types async webhooks ([#7316](https://github.com/payloadcms/payload/issues/7316)) ([c6da99b](https://github.com/payloadcms/payload/commit/c6da99b4d1b986089bb697486a7825db66323078))
## [2.24.1](https://github.com/payloadcms/payload/compare/v2.24.0...v2.24.1) (2024-07-22)
### Bug Fixes
* aliases AfterMe, AfterLogout, and AfterRefresh hook types ([#7146](https://github.com/payloadcms/payload/issues/7146)) ([20377bb](https://github.com/payloadcms/payload/commit/20377bb22c867552e412c1cafd16869399aadd68))
* exports fallback hook types to ensure backwards compatibility ([#7217](https://github.com/payloadcms/payload/issues/7217)) ([1864577](https://github.com/payloadcms/payload/commit/18645771c86664f1246f0fb599c8265a4cd1d6c0))
* resizes images first before applying focal point ([#7278](https://github.com/payloadcms/payload/issues/7278)) ([1b208c7](https://github.com/payloadcms/payload/commit/1b208c7addf56ae8a1af5e408b001b3e5f080a38))
* uploads from drawer and focal point positioning ([#7244](https://github.com/payloadcms/payload/issues/7244)) ([0841d5a](https://github.com/payloadcms/payload/commit/0841d5a35ee00650c703231a08fc9a361861ba67))
## [2.24.0](https://github.com/payloadcms/payload/compare/v2.23.1...v2.24.0) (2024-07-16)
### Features
* adds ability to upload files from a remote url ([#7087](https://github.com/payloadcms/payload/issues/7087)) ([84d214f](https://github.com/payloadcms/payload/commit/84d214f99207ad78a466b8c16eb36e29f57cd0e3))
* **db-mongodb:** allows mongoose schemaOptions to be configured ([#7099](https://github.com/payloadcms/payload/issues/7099)) ([51474fa](https://github.com/payloadcms/payload/commit/51474fa661ae24ab8fc0d13001fafc0f35216c1e))
### Bug Fixes
* ensures access query runs with locale when present ([#6981](https://github.com/payloadcms/payload/issues/6981)) ([a5492af](https://github.com/payloadcms/payload/commit/a5492afad672e19dd35b1f5370b51f22656f334c))
## [2.23.1](https://github.com/payloadcms/payload/compare/v2.23.0...v2.23.1) (2024-06-28)
### Bug Fixes
* remove unused refresh arg, this affected me/refresh hooks ([#6976](https://github.com/payloadcms/payload/issues/6976)) ([c82d2ca](https://github.com/payloadcms/payload/commit/77e8ce980ef0bcb0380b499dd1ccdfd36199b707))
## [2.23.0](https://github.com/payloadcms/payload/compare/v2.22.2...v2.23.0) (2024-06-28)
### Features
* adds me and refresh hooks ([#6968](https://github.com/payloadcms/payload/issues/6968)) ([c82d2ca](https://github.com/payloadcms/payload/commit/c82d2caa29422083e97affc99a033296d78892d6))
### Bug Fixes
* **richtext-lexical:** html converters unnecessarily growing over time ([#6963](https://github.com/payloadcms/payload/issues/6963)) ([cf52d64](https://github.com/payloadcms/payload/commit/cf52d64d984d98ab782ca33f20b43c935ce60683))
## [2.22.2](https://github.com/payloadcms/payload/compare/v2.22.1...v2.22.2) (2024-06-26)
### Bug Fixes
* return exp and strategy from auth ([#6943](https://github.com/payloadcms/payload/issues/6943)) ([ea18735](https://github.com/payloadcms/payload/commit/ea18735d3b2d2a96989009130e3724aab487e520))
## [2.22.1](https://github.com/payloadcms/payload/compare/v2.22.0...v2.22.1) (2024-06-25)
### Bug Fixes
* graphql query concurrency issues ([#6857](https://github.com/payloadcms/payload/issues/6857)) ([bb911cc](https://github.com/payloadcms/payload/commit/bb911cc7eca1eeef15ade8eb043c0056c281e311))
* sends cropped image pixel values to server instead of percent values ([#6852](https://github.com/payloadcms/payload/issues/6852)) ([8747743](https://github.com/payloadcms/payload/commit/874774375f8beada9bac0a8ef3e77f63adc30834))
## [2.22.0](https://github.com/payloadcms/payload/compare/v2.21.0...v2.22.0) (2024-06-20)
### Features
* passes prev value through to validate functions ([#6805](https://github.com/payloadcms/payload/issues/6805)) ([0a51de7](https://github.com/payloadcms/payload/commit/0a51de7623d7c7790db52f0cc3e431b5ec3436f2))
### Bug Fixes
* adjust json field schema for defaultValue ([#6872](https://github.com/payloadcms/payload/issues/6872)) ([58427ff](https://github.com/payloadcms/payload/commit/58427ffae3e0c1159fae817850b4c1770f43b9b9))
* array row validation messages ([#6780](https://github.com/payloadcms/payload/issues/6780)) ([68ea693](https://github.com/payloadcms/payload/commit/68ea693a88714951661464917d5df10a416a5ca0))
* cannot use empty string in defaultValue on text-like fields ([#6842](https://github.com/payloadcms/payload/issues/6842)) ([3364385](https://github.com/payloadcms/payload/commit/336438506ce5e54065f59a0352531e0255f5313d))
* corrects redirect with lonely slash on login ([#6784](https://github.com/payloadcms/payload/issues/6784)) ([dae56e6](https://github.com/payloadcms/payload/commit/dae56e60eef9e6456d9c51e7fc3b995a32e56f5e))
* **db-postgres:** cascade delete FKs on hasMany relationships ([#6735](https://github.com/payloadcms/payload/issues/6735)) ([9ecc6c8](https://github.com/payloadcms/payload/commit/9ecc6c889929a07d1163919eac14c9b33b90208a))
* **payload, db-mongodb:** querying relationships with `in` & `not_in` ([#6773](https://github.com/payloadcms/payload/issues/6773)) ([f6ba3be](https://github.com/payloadcms/payload/commit/f6ba3befaeb02edca66f04fbc2ea91d2d2549d08)), closes [#6741](https://github.com/payloadcms/payload/issues/6741)
* **plugin-cloud-storage:** missing error handling for invalid plugin config, leading to unexpected webpack errors ([#6786](https://github.com/payloadcms/payload/issues/6786)) ([015aafd](https://github.com/payloadcms/payload/commit/015aafda758938028c37a96e9b5fe62902757b09))
* **ui:** withinCollapsible always false from useCollapsible provider ([#6783](https://github.com/payloadcms/payload/issues/6783)) ([9f0aaf0](https://github.com/payloadcms/payload/commit/9f0aaf066e76210a85faf43b2b5dc5129ccf3879)), closes [#6760](https://github.com/payloadcms/payload/issues/6760)
* unflattening json objects containing keys with periods ([#6834](https://github.com/payloadcms/payload/issues/6834)) ([025306f](https://github.com/payloadcms/payload/commit/025306f9e685c030956dad3b0f0158c1dce49668)), closes [#5378](https://github.com/payloadcms/payload/issues/5378)
* upgrade swc, fixing swc issues on linux ([#6809](https://github.com/payloadcms/payload/issues/6809)) ([1c986a9](https://github.com/payloadcms/payload/commit/1c986a98321163c921cb071a160b6fa9fc8bd9ee))
## [2.21.0](https://github.com/payloadcms/payload/compare/v2.20.0...v2.21.0) (2024-06-14)
### Features
* draft validation ([#6746](https://github.com/payloadcms/payload/issues/6746)) ([ff70fd9](https://github.com/payloadcms/payload/commit/ff70fd9813ec7dc14bf54d3457c25e145fe01699))
### Bug Fixes
* adjust version status pill when unpublished ([#6744](https://github.com/payloadcms/payload/issues/6744)) ([b7e8529](https://github.com/payloadcms/payload/commit/b7e852993beaaa465e38caa36e75e870819516b5))
* use correct time for isLocked check ([#6052](https://github.com/payloadcms/payload/issues/6052)) ([3b4bb30](https://github.com/payloadcms/payload/commit/3b4bb3065a6d2ac2f7d6aafd0fb4a35b580f3662))
* unable to save animated file types with undefined image sizes ([#6733](https://github.com/payloadcms/payload/issues/6733)) ([e40570b](https://github.com/payloadcms/payload/commit/e40570bd0d64660bb2ae5b5785b4c85c684ca9ab)), closes [#6727](https://github.com/payloadcms/payload/issues/6727)
## [2.20.0](https://github.com/payloadcms/payload/compare/v2.19.3...v2.20.0) (2024-06-11)
### Features
* **ui:** updates draft/published version pills ([#6732](https://github.com/payloadcms/payload/issues/6732)) ([ed86b15](https://github.com/payloadcms/payload/commit/ed86b15242ccbd737f3fe80103afc7d8c4cc6915))
### Bug Fixes
* adds multi select inputs for `number` & `text` fields in where builder ([#6662](https://github.com/payloadcms/payload/issues/6662)) ([e3003b4](https://github.com/payloadcms/payload/commit/e3003b443fd3b472670ade228c174c7f755b1732))
* create sharp file for `fileHasAdjustments` files or `fileIsAnimated` files ([#6710](https://github.com/payloadcms/payload/issues/6710)) ([921a5c0](https://github.com/payloadcms/payload/commit/921a5c065d6089f0118ad8be7adbf75614c8db9c))
* enable SaveDraft button when creating new documents ([#6672](https://github.com/payloadcms/payload/issues/6672)) ([63bc6ae](https://github.com/payloadcms/payload/commit/63bc6ae52f63adf98f442c2d7992461e7f5f86e4)), closes [#6671](https://github.com/payloadcms/payload/issues/6671) [/github.com/payloadcms/payload/commit/8f03cd7c789eda7613ddced0d45a32afe49b1e01#diff-b7c978f47b1f3beff95c78ad95078e600624cbcd7ac10f9378cc4ad6803db244L75-R79](https://github.com/payloadcms//github.com/payloadcms/payload/commit/8f03cd7c789eda7613ddced0d45a32afe49b1e01/issues/diff-b7c978f47b1f3beff95c78ad95078e600624cbcd7ac10f9378cc4ad6803db244L75-R79)
* handles localized nested relationship fields in versions ([#6679](https://github.com/payloadcms/payload/issues/6679)) ([8a62298](https://github.com/payloadcms/payload/commit/8a622984e7ce4a2439d5d63e2689404652f8c96b))
* live preview device position when using zoom ([#6667](https://github.com/payloadcms/payload/issues/6667)) ([9525511](https://github.com/payloadcms/payload/commit/9525511e8bc6bc3fbd7e21e36596404604f1c109))
* only use `metadata.pages` for height if animated ([#6729](https://github.com/payloadcms/payload/issues/6729)) ([2f9ed34](https://github.com/payloadcms/payload/commit/2f9ed34d13d94070db40b1eabd04655d2e13e094))
* removes `array` & `blocks` & `group` fields from sort ([#6574](https://github.com/payloadcms/payload/issues/6574)) ([507e095](https://github.com/payloadcms/payload/commit/507e0954b2743012f0b53c396d49461120a02b1a)), closes [#6469](https://github.com/payloadcms/payload/issues/6469)
* withinCollapsible should be undefined by default ([#6666](https://github.com/payloadcms/payload/issues/6666)) ([37c8386](https://github.com/payloadcms/payload/commit/37c8386a51172966057df3477517d160e1c4a9a7)), closes [#6658](https://github.com/payloadcms/payload/issues/6658)
## [2.19.3](https://github.com/payloadcms/payload/compare/v2.19.2...v2.19.3) (2024-06-07)
### Bug Fixes
* scopes uploadEdits to documents, hoists action to doc provider ([#6664](https://github.com/payloadcms/payload/issues/6664)) ([373cb00](https://github.com/payloadcms/payload/commit/373cb0013902b52aba455542e10402316da4b2f4))
## [2.19.2](https://github.com/payloadcms/payload/compare/v2.19.1...v2.19.2) (2024-06-06)
### Bug Fixes
* cascade draft arg when querying globals with graphql ([#6651](https://github.com/payloadcms/payload/issues/6651)) ([ac8c209](https://github.com/payloadcms/payload/commit/ac8c2096af641a6886e4543ee65c9790e45f080f))
* filtered out `disableListColumn` fields reappeared after toggling other fields ([#6636](https://github.com/payloadcms/payload/issues/6636)) ([626be15](https://github.com/payloadcms/payload/commit/626be155784dda181276bb87617433822a0accf3))
* resizing animated images ([#6621](https://github.com/payloadcms/payload/issues/6621)) ([67c0b0e](https://github.com/payloadcms/payload/commit/67c0b0e6e0b5b190f6a916b59ba02f8c18479e18)), closes [#2181](https://github.com/payloadcms/payload/issues/2181) [#6146](https://github.com/payloadcms/payload/issues/6146)
## [2.19.1](https://github.com/payloadcms/payload/compare/v2.19.0...v2.19.1) (2024-06-04)
### Bug Fixes
* override ajv dependency version to 8.14.0 wherever possible ([#6618](https://github.com/payloadcms/payload/issues/6618)) ([e44ce81](https://github.com/payloadcms/payload/commit/e44ce819cefddeaaf20b2b7ce804e94a9272baf1))
## [2.19.0](https://github.com/payloadcms/payload/compare/v2.18.3...v2.19.0) (2024-06-04)
### Features
* **translations:** update Turkish translations ([#5738](https://github.com/payloadcms/payload/issues/5738)) ([4fddea8](https://github.com/payloadcms/payload/commit/4fddea86ebd5f21705be2310f8b7053d31109189))
### Bug Fixes
* adds new `userEmailAlreadyRegistered` translations ([#6549](https://github.com/payloadcms/payload/issues/6549)) ([56c6700](https://github.com/payloadcms/payload/commit/56c6700cf25570cc217e28dc69459a3b81adbced)), closes [#6535](https://github.com/payloadcms/payload/issues/6535)
* adjusts sizing of remove/add buttons to be same size ([#6527](https://github.com/payloadcms/payload/issues/6527)) ([a352ebc](https://github.com/payloadcms/payload/commit/a352ebc5520bbd0f6a9caef068825976dba05ded)), closes [#6098](https://github.com/payloadcms/payload/issues/6098)
* focalPoint undefined handling ([#6552](https://github.com/payloadcms/payload/issues/6552)) ([fcfc3c5](https://github.com/payloadcms/payload/commit/fcfc3c593f69f63c51f8aa09973fcacbfbe04952))
* pagination on polymorphic relationship field requesting entries with page parameter set to NaN ([#5366](https://github.com/payloadcms/payload/issues/5366)) ([547acfe](https://github.com/payloadcms/payload/commit/547acfe876bdf0df2ce808941f72b690c9dbcae3))
* safely evaluates `field.admin` in WhereBuilder ([#6534](https://github.com/payloadcms/payload/issues/6534)) ([4f9d78d](https://github.com/payloadcms/payload/commit/4f9d78df5e38f3f70852bb6de47cff619f57c648))
* separate sort and search fields when looking up relationship. ([#5964](https://github.com/payloadcms/payload/issues/5964)) ([c009219](https://github.com/payloadcms/payload/commit/c0092191a6ded1098a94d9f48918ab79171e5e32)), closes [#4815](https://github.com/payloadcms/payload/issues/4815) [#5222](https://github.com/payloadcms/payload/issues/5222)
* ui field validation error with `admin.disableListColumn` property ([#6530](https://github.com/payloadcms/payload/issues/6530)) ([eeddece](https://github.com/payloadcms/payload/commit/eeddeceda988d7a4ce8ad31d3036a4ee84aceec3)), closes [#6521](https://github.com/payloadcms/payload/issues/6521)
* **ui:** blocks browser save dialog from opening when hotkey used with no changes ([#6365](https://github.com/payloadcms/payload/issues/6365)) ([8f03cd7](https://github.com/payloadcms/payload/commit/8f03cd7c789eda7613ddced0d45a32afe49b1e01)), closes [#214](https://github.com/payloadcms/payload/issues/214)
## [2.18.3](https://github.com/payloadcms/payload/compare/v2.18.2...v2.18.3) (2024-05-17)
### Bug Fixes
* **db-postgres:** query with like on id columns ([#6416](https://github.com/payloadcms/payload/issues/6416)) ([bf77cec](https://github.com/payloadcms/payload/commit/bf77cec7e9e7db4988e481d464178636203fca32))
* **db-postgres:** uuid custom db name ([#6409](https://github.com/payloadcms/payload/issues/6409)) ([db5f3f3](https://github.com/payloadcms/payload/commit/db5f3f3ccdaedd9e8036c3e39fc20650a309a151))
* nested `disableListColumn` in rows ([#6412](https://github.com/payloadcms/payload/issues/6412)) ([ab8b2f3](https://github.com/payloadcms/payload/commit/ab8b2f3fb87864484582b7d819ca307888a9449b)), closes [#6407](https://github.com/payloadcms/payload/issues/6407)
## [2.18.2](https://github.com/payloadcms/payload/compare/v2.18.1...v2.18.2) (2024-05-17)
### Bug Fixes
* allow focal point when no sizes defined ([#6397](https://github.com/payloadcms/payload/issues/6397)) ([88e113a](https://github.com/payloadcms/payload/commit/88e113a5452300434f690186d10ea02ab159ffc3))
## [2.18.1](https://github.com/payloadcms/payload/compare/v2.18.0...v2.18.1) (2024-05-16)
### Bug Fixes
* add back explicit crop x and y values ([#6391](https://github.com/payloadcms/payload/issues/6391)) ([e76df32](https://github.com/payloadcms/payload/commit/e76df32f0987cc92dc8d9c693950e650c52576bf))
## [2.18.0](https://github.com/payloadcms/payload/compare/v2.17.0...v2.18.0) (2024-05-16)
### Features
* store focal point on uploads ([#6364](https://github.com/payloadcms/payload/issues/6364)) ([82b88a3](https://github.com/payloadcms/payload/commit/82b88a315ff1d52f0b19a70224d5c600a3a97eb5))
### Bug Fixes
* **db-postgres:** filter with ID not_in AND queries - postgres ([#6358](https://github.com/payloadcms/payload/issues/6358)) ([cc94078](https://github.com/payloadcms/payload/commit/cc940786072c0065f10fdd2893050bddc4595a21)), closes [#5151](https://github.com/payloadcms/payload/issues/5151)
* **richtext-lexical:** upload, relationship and block node insertion fails sometimes ([#6390](https://github.com/payloadcms/payload/issues/6390)) ([48a410e](https://github.com/payloadcms/payload/commit/48a410e294598af9c73577a04f86466248f93da0))
## [2.17.0](https://github.com/payloadcms/payload/compare/v2.16.1...v2.17.0) (2024-05-15)
### Features
* adds misc translations to API view and react select ([#6138](https://github.com/payloadcms/payload/issues/6138)) ([30e535b](https://github.com/payloadcms/payload/commit/30e535b5b929dddead007d8a9adca62808595e2c))
* **richtext-lexical:** remove LexicalBlock, RichTextFieldRequiredEditor and FieldWithRichTextRequiredEditor types ([#6279](https://github.com/payloadcms/payload/issues/6279)) ([9df5ab8](https://github.com/payloadcms/payload/commit/9df5ab8a10a35ad34615d7e4da024f59ff037e0e))
### Bug Fixes
* appends `editDepth` value to `radio` & `checkbox` IDs when inside drawer ([#6181](https://github.com/payloadcms/payload/issues/6181)) ([69c93d3](https://github.com/payloadcms/payload/commit/69c93d3c62394a5cf995a2eaec9a3ab30e0f77af))
* collection labels with locales not working when creating new doc ([#5995](https://github.com/payloadcms/payload/issues/5995)) ([51efe4f](https://github.com/payloadcms/payload/commit/51efe4f39bcaadccb109a2a02a690ca65041ee57))
* safely access cookie header for uploads ([#6367](https://github.com/payloadcms/payload/issues/6367)) ([de92c50](https://github.com/payloadcms/payload/commit/de92c50847640661f915455f8db0029873ddc7ab))
* step-nav breadcrumbs ellipsis ([#6345](https://github.com/payloadcms/payload/issues/6345)) ([d02b1fb](https://github.com/payloadcms/payload/commit/d02b1fb084e636e49122ad55b25b9c49eb761f1c))
*
### ⚠ BREAKING CHANGES
* **richtext-lexical:** remove LexicalBlock, RichTextFieldRequiredEditor and FieldWithRichTextRequiredEditor types (#6279)
## [2.16.1](https://github.com/payloadcms/payload/compare/v2.16.0...v2.16.1) (2024-05-07)
### Features
* **richtext-lexical:** add maxDepth property to various lexical features ([#6250](https://github.com/payloadcms/payload/issues/6250)) ([857b9a4](https://github.com/payloadcms/payload/commit/857b9a4ac3236c740458750f156a3a4274eda210)), closes [#6242](https://github.com/payloadcms/payload/issues/6242)
### Bug Fixes
* **richtext-lexical:** export missing HorizontalRuleFeature ([#6236](https://github.com/payloadcms/payload/issues/6236)) ([f829b08](https://github.com/payloadcms/payload/commit/f829b084ba9649ef596cce4a7bf6ae8c7ccf57e3))
## [2.16.0](https://github.com/payloadcms/payload/compare/v2.15.0...v2.16.0) (2024-05-06)
### Features
* adds disableListColumn, disableListFilter to fields admin props ([#6188](https://github.com/payloadcms/payload/issues/6188)) ([db4aace](https://github.com/payloadcms/payload/commit/db4aacebb801f1cc11ef8732f9f3b78475256641))
### Bug Fixes
* graphql upload relations returning null ([#6233](https://github.com/payloadcms/payload/issues/6233)) ([cac52da](https://github.com/payloadcms/payload/commit/cac52da638a0df4356120a2f61c6aaf25641a5ad))
* hide drag handles when `admin.isSortable: false` ([#6225](https://github.com/payloadcms/payload/issues/6225)) ([622cdb0](https://github.com/payloadcms/payload/commit/622cdb044002b2c3182c3b0432b51befbfb9b979))
* **plugin-form-builder:** hook overrides not working as intended ([#6203](https://github.com/payloadcms/payload/issues/6203)) ([b735d6a](https://github.com/payloadcms/payload/commit/b735d6aa169acca8cb638859d2c8ba43e315f02c))
## [2.15.0](https://github.com/payloadcms/payload/compare/v2.14.2...v2.15.0) (2024-05-03)
### Features
* add isSortable to arrays and blocks ([#5962](https://github.com/payloadcms/payload/issues/5962)) ([5c58bd3](https://github.com/payloadcms/payload/commit/5c58bd322da966fe610959df13dfd49add35a2ef))
* use filterOptions in list relationship filter ([#6156](https://github.com/payloadcms/payload/issues/6156)) ([23f3eb1](https://github.com/payloadcms/payload/commit/23f3eb1cf0b75a4044319d7cd3e5000d5b4e42c4))
### Bug Fixes
* bulk publish from collection list ([#6063](https://github.com/payloadcms/payload/issues/6063)) ([84570e6](https://github.com/payloadcms/payload/commit/84570e6e3bbb81fcae80da92b01bc56d09906072))
* cascade draft arg in nested GraphQL relationship queries ([#6141](https://github.com/payloadcms/payload/issues/6141)) ([a8ac8b4](https://github.com/payloadcms/payload/commit/a8ac8b463349664f3188ae77217f037da72f796b))
* GraphQL nested relationships not respecting req locale ([#6117](https://github.com/payloadcms/payload/issues/6117)) ([3fccd34](https://github.com/payloadcms/payload/commit/3fccd34abe5a332f88f5e950b755cd1d21441fb6))
* hide unusable fields from collection filter select ([#6135](https://github.com/payloadcms/payload/issues/6135)) ([2be5ad0](https://github.com/payloadcms/payload/commit/2be5ad0ebafd1d3c1c0567e2085ccfd593f18271))
* incorrect `localesNotSaved` translation ([#5996](https://github.com/payloadcms/payload/issues/5996)) ([af67749](https://github.com/payloadcms/payload/commit/af67749e49db92e675b63b52190e562468894706))
* **plugin-cloud:** purge cache for all sizes ([#5301](https://github.com/payloadcms/payload/issues/5301)) ([831f1ff](https://github.com/payloadcms/payload/commit/831f1ff5bed7e083cc076e9eb5ff9a2b2f1ed710))
* properly adds `readonly` styles to disabled `radio` fields ([#6176](https://github.com/payloadcms/payload/issues/6176)) ([9b7e62d](https://github.com/payloadcms/payload/commit/9b7e62dc20dca7402c6c68dfb8a5995c211993af))
* resets filter state when param state change within route ([#6169](https://github.com/payloadcms/payload/issues/6169)) ([6e38cc2](https://github.com/payloadcms/payload/commit/6e38cc2bcfb08b608abcb6aac4b4c1f6eea63428))
* **richtext-lexical:** drag and add block handles disappear too quickly for smaller screen sizes. ([#6145](https://github.com/payloadcms/payload/issues/6145)) ([24f6972](https://github.com/payloadcms/payload/commit/24f697219b5071d91a5c37aafb50e2d823b68d4c))
* **richtext-lexical:** floating toolbar caret positioned incorrectly for some line heights ([#6151](https://github.com/payloadcms/payload/issues/6151)) ([36b1f5a](https://github.com/payloadcms/payload/commit/36b1f5a763f782c140e62aa062b4077d6efd0738))
* sanitizes fields in default edit view for drawer content ([#6175](https://github.com/payloadcms/payload/issues/6175)) ([43dab5c](https://github.com/payloadcms/payload/commit/43dab5c7053831a0c71f3a6860113f653cab674f))
* version restoration ([#6039](https://github.com/payloadcms/payload/issues/6039)) ([91bac9c](https://github.com/payloadcms/payload/commit/91bac9c0aa1ff3da052b9c2ad83fa5ac23a16d1d))
## [2.14.2](https://github.com/payloadcms/payload/compare/v2.14.1...v2.14.2) (2024-04-26)
### Bug Fixes
* **deps:** dedupes react ([#6058](https://github.com/payloadcms/payload/issues/6058)) ([d0ba694](https://github.com/payloadcms/payload/commit/d0ba694c80a1b699c4f2cad98b1f0bde1f0d43ca))
## [2.14.1](https://github.com/payloadcms/payload/compare/v2.14.0...v2.14.1) (2024-04-25)
### Bug Fixes
* **db-postgres:** cumulative updates ([#6033](https://github.com/payloadcms/payload/issues/6033)) ([c31b8dc](https://github.com/payloadcms/payload/commit/c31b8dcaa0c43132d8a01e0cc43094f466cc9168))
* disable api key checkbox does not remove api key ([#6017](https://github.com/payloadcms/payload/issues/6017)) ([0ffdcc6](https://github.com/payloadcms/payload/commit/0ffdcc685f4e917a02e62dbaccec7cc8ebbf695d))
* **richtext-lexical:** minimize the amount of times sanitizeFields is called ([#6018](https://github.com/payloadcms/payload/issues/6018)) ([60372fa](https://github.com/payloadcms/payload/commit/60372faf36b7f6d92a61ccbaee0f528e50f5a51a))
## [2.14.0](https://github.com/payloadcms/payload/compare/v2.13.0...v2.14.0) (2024-04-24)
### Features
* add count operation to collections ([#5936](https://github.com/payloadcms/payload/issues/5936)) ([c380dee](https://github.com/payloadcms/payload/commit/c380deee4a1db82bce9fea264060000957a53eee))
### Bug Fixes
* bulk publish ([#6006](https://github.com/payloadcms/payload/issues/6006)) ([c11600a](https://github.com/payloadcms/payload/commit/c11600aac38cd67019765faf2a41e62df13e50cc))
* **db-postgres:** extra version suffix added to table names ([#5939](https://github.com/payloadcms/payload/issues/5939)) ([bd8b512](https://github.com/payloadcms/payload/commit/bd8b5123b0991e53eb209315897dbca10d14d45e))
* **db-postgres:** Fixes nested groups inside nested blocks ([#5882](https://github.com/payloadcms/payload/issues/5882)) ([e258866](https://github.com/payloadcms/payload/commit/e25886649fce414d5d47918f35ba2d4d2ba59174))
* **db-postgres:** row table names were not being built properly - v2 ([#5961](https://github.com/payloadcms/payload/issues/5961)) ([9152a23](https://github.com/payloadcms/payload/commit/9152a238d2982503e7f509350651b0ba3f83b1ec))
* header filters ([#5997](https://github.com/payloadcms/payload/issues/5997)) ([ad01c67](https://github.com/payloadcms/payload/commit/ad01c6784d283386dc819dfcd47455cad5accfaa))
* min/max attributes missing from number input ([#5779](https://github.com/payloadcms/payload/issues/5779)) ([985796b](https://github.com/payloadcms/payload/commit/985796be54b593af0a4934685ab8621b9badda10))
* removes `equals` & `not_equals` operators from fields with `hasMany` ([#5885](https://github.com/payloadcms/payload/issues/5885)) ([a8c9625](https://github.com/payloadcms/payload/commit/a8c9625cdec33476a5da87bcd9f010f9d7fb9a94))
## [2.13.0](https://github.com/payloadcms/payload/compare/v2.12.1...v2.13.0) (2024-04-19)
### Features
* allow configuration for setting headers on external file fetch ([ec1ad0b](https://github.com/payloadcms/payload/commit/ec1ad0b6628d400d7435821c8a72b6746bf87577))
* **db-\*:** custom db table and enum names ([#5045](https://github.com/payloadcms/payload/issues/5045)) ([9bbacc4](https://github.com/payloadcms/payload/commit/9bbacc4fb1ad247634f394e95c42ee3adade8048))
* json field schemas ([#5726](https://github.com/payloadcms/payload/issues/5726)) ([2c402cc](https://github.com/payloadcms/payload/commit/2c402cc65c9e8f7f33e2fb0ce5e1a8ceff52af1b))
* **plugin-seo:** add Chinese translation ([#5429](https://github.com/payloadcms/payload/issues/5429)) ([fcb29bb](https://github.com/payloadcms/payload/commit/fcb29bb1c637867301bbc1070b4a84383bf0e90a))
* **richtext-lexical:** add HorizontalRuleFeature ([d8e9084](https://github.com/payloadcms/payload/commit/d8e9084db21828968046ab59775633e409ce5c2a))
* **richtext-lexical:** improve floating handle y-positioning by positioning it in the center for smaller elements. ([0055a8e](https://github.com/payloadcms/payload/commit/0055a8eb36b95722cccdc5eb3101a79d3e764f8b))
### Bug Fixes
* adds type error validations for `email` and `password` in login operation ([#4852](https://github.com/payloadcms/payload/issues/4852)) ([1f00360](https://github.com/payloadcms/payload/commit/1f0036054a9461535b0992f2449e91e4eaf97d4e))
* avoids getting and setting doc preferences when creating new ([#5757](https://github.com/payloadcms/payload/issues/5757)) ([e3c3dda](https://github.com/payloadcms/payload/commit/e3c3ddac34dff8fa085f5b702be2838d513be300))
* block field type missing dbName ([#5695](https://github.com/payloadcms/payload/issues/5695)) ([e7608f5](https://github.com/payloadcms/payload/commit/e7608f5507d3b85ea3f44b5cb1f43edf67608b1b))
* **db-mongodb:** failing `contains` query with special chars ([#5774](https://github.com/payloadcms/payload/issues/5774)) ([5fa99fb](https://github.com/payloadcms/payload/commit/5fa99fb060cabbb69b5d6688748260e562e6bea3))
* **db-mongodb:** ignore end session errors ([#5904](https://github.com/payloadcms/payload/issues/5904)) ([cb8d562](https://github.com/payloadcms/payload/commit/cb8d562132bee437798880e1d7f64dbfdee36949))
* **db-mongodb:** version fields indexSortableFields ([#5863](https://github.com/payloadcms/payload/issues/5863)) ([fe0028c](https://github.com/payloadcms/payload/commit/fe0028c89945303a431b48efdae7b6e22304c8a3))
* **db-postgres:** hasMany relationship query contains operator ([#4212](https://github.com/payloadcms/payload/issues/4212)) ([608d6d0](https://github.com/payloadcms/payload/commit/608d6d0a872af224ea42c3e6c8a3b4f21678f550))
* **db-postgres:** issue querying by localised relationship not respecting locale as constraint ([#5666](https://github.com/payloadcms/payload/issues/5666)) ([44599cb](https://github.com/payloadcms/payload/commit/44599cbc7b8f23d6d8c7a3e05466237406812a6d))
* **db-postgres:** query hasMany fields with in ([#5881](https://github.com/payloadcms/payload/issues/5881)) ([6185f8a](https://github.com/payloadcms/payload/commit/6185f8a5d845d12651f5a3ee128eb43d3b9d2449))
* **db-postgres:** relationship query pagination ([#5802](https://github.com/payloadcms/payload/issues/5802)) ([65690a6](https://github.com/payloadcms/payload/commit/65690a675c17cfacebe775a327a57741ac09416a))
* **db-postgres:** validateExistingBlockIsIdentical localized ([#5839](https://github.com/payloadcms/payload/issues/5839)) ([4c4f924](https://github.com/payloadcms/payload/commit/4c4f924e90ee23a73c9a7cc7e69bbc2caf902b92))
* duplicate document multiple times in quick succession ([#5642](https://github.com/payloadcms/payload/issues/5642)) ([373787d](https://github.com/payloadcms/payload/commit/373787de31cbbd33b587aa4be6344948f082f5bb))
* missing date locales ([#5656](https://github.com/payloadcms/payload/issues/5656)) ([c1c8600](https://github.com/payloadcms/payload/commit/c1c86009a5e9aad401a05f7c63ad37bd3f88dc84))
* number ids were not sanitized to number in rest api ([51f84a4](https://github.com/payloadcms/payload/commit/51f84a4fcfd437eb73c7d83205b66e3620085909))
* passes parent id instead of incoming id to saveVersion ([#5831](https://github.com/payloadcms/payload/issues/5831)) ([25c9a14](https://github.com/payloadcms/payload/commit/25c9a145bec9e9566d2bbcba59d5b34394e10bbd))
* **plugin-seo:** uses correct key for ukrainian translation ([#5873](https://github.com/payloadcms/payload/issues/5873)) ([e47e544](https://github.com/payloadcms/payload/commit/e47e544364031ac834565a4d86ef6ec9c04e63c0))
* properly handle drafts in bulk update ([#5872](https://github.com/payloadcms/payload/issues/5872)) ([ad38f76](https://github.com/payloadcms/payload/commit/ad38f760111abf947c6b0ee4b983ee1224a9bf1b))
* req.collection being lost when querying a global inside a collection ([#5727](https://github.com/payloadcms/payload/issues/5727)) ([cbd03ed](https://github.com/payloadcms/payload/commit/cbd03ed2f8819ee8ac20e8739cc03e88ff4caa25))
* **richtext-lexical:** catch errors that may occur during HTML generation ([#5754](https://github.com/payloadcms/payload/issues/5754)) ([9b44296](https://github.com/payloadcms/payload/commit/9b442960929d00faa07f1383b1267f71e6f44efe))
* **richtext-lexical:** do not allow omitting editor prop for sub-richtext fields within lexical defined in the payload config ([#5766](https://github.com/payloadcms/payload/issues/5766)) ([6186493](https://github.com/payloadcms/payload/commit/6186493246157b4d4b33c8c47378f08581315942))
* **richtext-lexical:** incorrect floating handle y-position calculation next to certain kinds of HTML elements like HR ([de5d6cc](https://github.com/payloadcms/payload/commit/de5d6cc4bd591745156f0b8c56795b7bd2eaad7e))
* **richtext-lexical:** limit unnecessary floating handle positioning updates ([a00439e](https://github.com/payloadcms/payload/commit/a00439ea893e074d64be83ee6af1e780178a7ee3))
* **richtext-lexical:** pass through config for schema generation. Makes it more robust ([#5700](https://github.com/payloadcms/payload/issues/5700)) ([cf135fd](https://github.com/payloadcms/payload/commit/cf135fd1e4aeb30121281399e26be901393ada6d))
* **richtext-lexical:** use correct nodeType on HorizontalRule feature HTML converter ([#5805](https://github.com/payloadcms/payload/issues/5805)) ([3b1d331](https://github.com/payloadcms/payload/commit/3b1d3313165499616673f6d363c90ef884994525))
* updates type name of `CustomPublishButtonProps` to `CustomPublishButtonType` ([#5644](https://github.com/payloadcms/payload/issues/5644)) ([7df7bf4](https://github.com/payloadcms/payload/commit/7df7bf448bd26e870a1fde8aaa47430904d68366))
* updates var ([9530d28](https://github.com/payloadcms/payload/commit/9530d28a6760a667b718027a49ea43ba1accd546))
* use isolateObjectProperty function in createLocalReq ([#5748](https://github.com/payloadcms/payload/issues/5748)) ([c0ba6cc](https://github.com/payloadcms/payload/commit/c0ba6cc19a20c043a08ca77caacd47ef7cfb48f4))
* uses find instead of fieldIndex for custom ID check ([509ec67](https://github.com/payloadcms/payload/commit/509ec677c42993d9c08facf6928a5ef1e9767508))
### ⚠ BREAKING CHANGES
* **richtext-lexical:** do not allow omitting editor prop for sub-richtext fields within lexical defined in the payload config ([#5766](https://github.com/payloadcms/payload/issues/5766))
## [2.12.1](https://github.com/payloadcms/payload/compare/v2.12.0...v2.12.1) (2024-04-03)
### Bug Fixes
* Skip parsing if operator is 'exist' ([#5404](https://github.com/payloadcms/payload/issues/5404)) ([742a7af](https://github.com/payloadcms/payload/commit/742a7af93d2e9ef4d41ee093cef875322792ae72))
* updates colors of tooltip in light mode ([#5632](https://github.com/payloadcms/payload/issues/5632)) ([a7e7c92](https://github.com/payloadcms/payload/commit/a7e7c9276835e0a35a18daccb218c901ca2fdd8c))
## [2.12.0](https://github.com/payloadcms/payload/compare/v2.11.2...v2.12.0) (2024-04-03)
### Features
* **plugin-seo:** adds Norwegian translation ([#5621](https://github.com/payloadcms/payload/issues/5621)) ([589b492](https://github.com/payloadcms/payload/commit/589b492b2e6bc578e6f17649ff6d936ffd88b8b5))
* **richtext-*:** add ability to provide custom Field and Error components ([#5574](https://github.com/payloadcms/payload/issues/5574)) ([02d2c51](https://github.com/payloadcms/payload/commit/02d2c517176a775c6eeb4b164d9e6b45d8f5e4c1))
### Bug Fixes
* **db-postgres:** error on delete having joins ([#5459](https://github.com/payloadcms/payload/issues/5459)) ([9169230](https://github.com/payloadcms/payload/commit/916923071a2c28077326bfd2059d1665ef47e94f))
* image resize tiff files ([#5415](https://github.com/payloadcms/payload/issues/5415)) ([8184e00](https://github.com/payloadcms/payload/commit/8184e0005af1b6da93d0921c31547515a4ce6343))
* number field with hasMany accept defaultValue array ([#5618](https://github.com/payloadcms/payload/issues/5618)) ([a3ae416](https://github.com/payloadcms/payload/commit/a3ae4160850290c194bb228e1fbeb8c7533cead3))
* regression of filterOptions using different transaction ([#5169](https://github.com/payloadcms/payload/issues/5169)) ([3ceb6ef](https://github.com/payloadcms/payload/commit/3ceb6efd32cfa9556c6656469fa43d61d7679b1d))
* **richtext-lexical:** Blocks: generated output schema is not fully correct ([#5259](https://github.com/payloadcms/payload/issues/5259)) ([e7f6bfb](https://github.com/payloadcms/payload/commit/e7f6bfbe9da4cab42c7ec7019371d5e79af17ec9))
* **richtext-lexical:** checklist html converter incorrectly outputting children ([#5570](https://github.com/payloadcms/payload/issues/5570)) ([2e5400f](https://github.com/payloadcms/payload/commit/2e5400fa7a5ac7441e00134a7f4299022228f64f))
* **richtext-lexical:** disable instanceof HTMLImageElement check as it causes issues when used on the server ([2164dcc](https://github.com/payloadcms/payload/commit/2164dcc594b5c16d7111b71cdb01f5f7aaa7e127))
* **richtext-lexical:** Link: add open-in-new-tab to html converter ([23df60d](https://github.com/payloadcms/payload/commit/23df60dba5682255ce6f60e3ee8e6901f6a70c7b))
* **richtext-lexical:** properly center add- and drag-block handles ([#5568](https://github.com/payloadcms/payload/issues/5568)) ([48dc116](https://github.com/payloadcms/payload/commit/48dc116f57113c3124ff93a50fa1189053e21d76))
* sets beforeValidateHook req type to required ([#5608](https://github.com/payloadcms/payload/issues/5608)) ([e10d5df](https://github.com/payloadcms/payload/commit/e10d5df0b2dd21b86cce44d0e36b31e9d3411b39))
## [2.11.2](https://github.com/payloadcms/payload/compare/v2.11.1...v2.11.2) (2024-02-23)

View File

@@ -17,7 +17,7 @@
<hr/>
> [!IMPORTANT]
> 🎉 <strong>Payload 3.0 beta released!</strong> You can now deploy Payload fully in any Next.js app folder. Read more in the <a target="_blank" href="https://payloadcms.com/blog/30-beta-install-payload-into-any-nextjs-app-with-one-line" rel="dofollow"><strong>announcement post</strong></a>.
> 🎉 <strong>Payload 2.0 is now available!</strong> Read more in the <a target="_blank" href="https://payloadcms.com/blog/payload-2-0" rel="dofollow"><strong>announcement post</strong></a>.
<h3>Benefits over a regular CMS</h3>
<ul>
@@ -99,10 +99,6 @@ If you want to add contributions to this repository, please follow the instructi
The [Examples Directory](./examples) is a great resource for learning how to setup Payload in a variety of different ways, but you can also find great examples in our blog and throughout our social media.
If you'd like to run the examples, you can either copy them to a folder outside this repo or run them directly by (1) navigating to the example's subfolder (`cd examples/your-example-folder`) and (2) using the `--ignore-workspace` flag to bypass workspace restrictions (e.g., `pnpm --ignore-workspace install` or `pnpm --ignore-workspace dev`).
You can see more examples at:
- [Examples Directory](./examples)
- [Payload Blog](https://payloadcms.com/blog)
- [Payload YouTube](https://www.youtube.com/@payloadcms)

View File

@@ -0,0 +1,20 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
import config from '@payload-config'
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import { RootPage, generatePageMetadata } from '@payloadcms/next/views/Root/index'
type Args = {
params: {
segments: string[]
}
searchParams: {
[key: string]: string | string[]
}
}
export const generateMetadata = ({ params, searchParams }: Args) =>
generatePageMetadata({ config, params, searchParams })
const Page = ({ params, searchParams }: Args) => RootPage({ config, params, searchParams })
export default Page

View File

@@ -0,0 +1,9 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config'
import { REST_DELETE, REST_GET, REST_PATCH, REST_POST } from '@payloadcms/next/routes'
export const GET = REST_GET(config)
export const POST = REST_POST(config)
export const DELETE = REST_DELETE(config)
export const PATCH = REST_PATCH(config)

View File

@@ -0,0 +1,6 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config'
import { GET_STATIC_FILE } from '@payloadcms/next/routes'
export const GET = GET_STATIC_FILE(config)

View File

@@ -0,0 +1,6 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config'
import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes'
export const GET = GRAPHQL_PLAYGROUND_GET(config)

View File

@@ -0,0 +1,6 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
/* DO NOT MODIFY it because it could be re-written at any time. */
import config from '@payload-config'
import { GRAPHQL_POST } from '@payloadcms/next/routes'
export const POST = GRAPHQL_POST(config)

15
app/(payload)/layout.tsx Normal file
View File

@@ -0,0 +1,15 @@
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
import configPromise from '@payload-config'
import { RootLayout } from '@payloadcms/next/layouts/Root/index'
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
import React from 'react'
import './custom.scss'
type Args = {
children: React.ReactNode
}
const Layout = ({ children }: Args) => <RootLayout config={configPromise}>{children}</RootLayout>
export default Layout

5
app/my-route/route.ts Normal file
View File

@@ -0,0 +1,5 @@
export const GET = () => {
return Response.json({
hello: 'elliot',
})
}

View File

@@ -34,14 +34,13 @@ const defaultPayloadAccess = ({ req: { user } }) => {
```
<Banner type="success">
**Note:**
<strong>Note:</strong>
<br />
In the Local API, all Access Control functions are skipped by default, allowing your server to do
whatever it needs. But, you can opt back in by setting the option
**overrideAccess**
to **false**.
whatever it needs. But, you can opt back in by setting the option <strong>
overrideAccess
</strong>{' '}
to <strong>false</strong>.
</Banner>
### Access Control Types
@@ -55,8 +54,8 @@ You can manage access within Payload on three different levels:
### When Access Control is Executed
<Banner type="success">
**Note:**
<strong>Note:</strong>
<br />
Access control functions are utilized in two places. It's important to understand how and when
your access control is executed.
</Banner>
@@ -74,10 +73,10 @@ To accomplish this, Payload ships with an `Access` operation, which is executed
### Argument Availability
<Banner type="warning">
**Important:**
When your access control functions are executed via the **access** operation, the{' '}
**id** and **data** arguments will be **undefined**,
<strong>Important:</strong>
<br />
When your access control functions are executed via the <strong>access</strong> operation, the{' '}
<strong>id</strong> and <strong>data</strong> arguments will be <strong>undefined</strong>,
because Payload is executing your functions without referencing a specific document.
</Banner>

View File

@@ -46,8 +46,8 @@ At their core, a bundler's main goal is to take a bunch of files and turn them i
Since the bundled file is sent to the browser, it can't include any server-only code. You will need to remove any server-only code from your admin UI before bundling it. You can learn more about [excluding server code](/docs/admin/excluding-server-code) section.
<Banner type="warning">
**Using environment variables in the admin UI**
<strong>Using environment variables in the admin UI</strong>
<br />
Bundles should not contain sensitive information. By default, Payload
excludes env variables from the bundle. If you need to use env variables in your payload config,
you need to prefix them with `PAYLOAD_PUBLIC_` to make them available to the client-side code.

View File

@@ -11,8 +11,8 @@ While designing the Payload Admin panel, we determined it should be as minimal a
To swap in your own React component, first, consult the list of available component overrides below. Determine the scope that corresponds to what you are trying to accomplish, and then author your React component accordingly.
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
Custom components will automatically be provided with all props that the default component normally
accepts.
</Banner>
@@ -133,8 +133,8 @@ To add a _new_ view to the Admin Panel, simply add another key to the `views` ob
```
<Banner type="warning">
**Note:**
<strong>Note:</strong>
<br />
Routes are cascading. This means that unless explicitly given the `exact` property, they will match on URLs that simply _start_ with the route's path. This is helpful when creating catch-all routes in your application. Alternatively, you could define your nested route _before_ your parent route.
</Banner>
@@ -168,7 +168,7 @@ import * as React from 'react'
import {
CustomSaveButtonProps,
CustomSaveDraftButtonProps,
CustomPublishButtonType,
CustomPublishButtonProps,
CustomPreviewButtonProps,
} from 'payload/types'
@@ -185,7 +185,7 @@ export const CustomSaveDraftButton: CustomSaveDraftButtonProps = ({
return <DefaultButton label={label} disabled={disabled} saveDraft={saveDraft} />
}
export const CustomPublishButton: CustomPublishButtonType = ({
export const CustomPublishButton: CustomPublishButtonProps = ({
DefaultButton,
disabled,
label,
@@ -451,8 +451,8 @@ Your custom view components will be given all the props that a React Router `<Ro
| **`canAccessAdmin`** \* | If the currently logged in user is allowed to access the admin panel or not. |
<Banner type="warning">
**Note:**
<strong>Note:</strong>
<br />
It's up to you to secure your custom views. If your view requires a user to be logged in or to
have certain access rights, you should handle that within your view component yourself.
</Banner>
@@ -471,8 +471,8 @@ To see how to pass in your custom views to create custom views of your own, take
All Payload fields support the ability to swap in your own React components. So, for example, instead of rendering a default Text input, you might need to render a color picker that provides the editor with a custom color picker interface to restrict the data entered to colors only.
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
Don't see a built-in field type that you need? Build it! Using a combination of custom validation
and custom components, you can override the entirety of how a component functions within the admin
panel and effectively create your own field type.
@@ -491,7 +491,7 @@ As an alternative to replacing the entire Field component, you may want to keep
| Component | Description |
| ----------------- | --------------------------------------------------------------------------------------------------------------- |
| **`Label`** | Override the default Label in the Field Component. [More](#label-component) |
| **`Error`** | Override the default Error in the Field Component. [More](#error-component) |
| **`Error`** | Override the default Label in the Field Component. [More](#error-component) |
| **`beforeInput`** | An array of elements that will be added before `input`/`textarea` elements. [More](#afterinput-and-beforeinput) |
| **`afterInput`** | An array of elements that will be added after `input`/`textarea` elements. [More](#afterinput-and-beforeinput) |
@@ -546,7 +546,7 @@ const CustomTextField: React.FC<{ path: string }> = ({ path }) => {
<Banner type="success">
For more information regarding the hooks that are available to you while you build custom
components, including the **useField** hook, [click here](/docs/admin/hooks).
components, including the <strong>useField</strong> hook, [click here](/docs/admin/hooks).
</Banner>
## Label Component
@@ -648,16 +648,16 @@ export default titleField;
## Custom providers
As your admin customizations gets more complex you may want to share state between fields or other components. You can add custom providers to add your own context to any Payload app for use in other custom components within the admin panel. Within your config add `admin.components.providers`, these can be used to share context or provide other custom functionality. Read the [React context](https://reactjs.org/docs/context.html) docs to learn more.
As your admin customizations gets more complex you may want to share state between fields or other components. You can add custom providers to do add your own context to any Payload app for use in other custom components within the admin panel. Within your config add `admin.components.providers`, these can be used to share context or provide other custom functionality. Read the [React context](https://reactjs.org/docs/context.html) docs to learn more.
<Banner type="warning">
**Reminder:** Don't forget to pass the **children** prop through the provider
<strong>Reminder:</strong> Don't forget to pass the **children** prop through the provider
component for the admin UI to show
</Banner>
### Styling Custom Components
Payload exports its SCSS variables and mixins for reuse in your own custom components. This is helpful in cases where you might want to style a custom input similarly to Payload's built-in styling, so it blends more thoroughly into the existing admin UI.
Payload exports its SCSS variables and mixins for reuse in your own custom components. This is helpful in cases where you might want to style a custom input similarly to Payload's built-ini styling, so it blends more thoroughly into the existing admin UI.
To make use of Payload SCSS variables / mixins to use directly in your own components, you can import them as follows:

View File

@@ -8,8 +8,8 @@ desc: NEEDS TO BE WRITTEN
## Admin environment vars
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
Be careful about what variables you provide to your client-side code. Analyze every single one to
make sure that you're not accidentally leaking anything that an attacker could exploit. Only keys
that are safe for anyone to read in plain text should be provided to your Admin panel.

View File

@@ -69,8 +69,8 @@ export const createStripeSubscription = async ({ data, operation }) => {
```
<Banner type="error">
**Warning:**
<strong>Warning:</strong>
<br />
The above code is NOT production-ready and should not be referenced to create Stripe
subscriptions. Although creating a beforeChange hook is a completely valid spot to do things like
create subscriptions, the code above is incomplete and insecure, meant for explanation purposes

View File

@@ -57,7 +57,7 @@ const {
There are times when a custom field component needs to have access to data from other fields, and you have a few options to do so. The `useFormFields` hook is a powerful and highly performant way to retrieve a form's field state, as well as to retrieve the `dispatchFields` method, which can be helpful for setting other fields' form states from anywhere within a form.
<Banner type="success">
**This hook is great for retrieving only certain fields from form state** because it
<strong>This hook is great for retrieving only certain fields from form state</strong> because it
ensures that it will only cause a rerender when the items that you ask for change.
</Banner>
@@ -133,8 +133,8 @@ To see types for each action supported within the `dispatchFields` hook, check o
The `useForm` hook can be used to interact with the form itself, and sends back many methods that can be used to reactively fetch form state without causing rerenders within your components each time a field is changed. This is useful if you have action-based callbacks that your components fire, and need to interact with form state _based on a user action_.
<Banner type="warning">
**Warning:**
<strong>Warning:</strong>
<br />
This hook is optimized to avoid causing rerenders when fields change, and as such, its `fields`
property will be out of date. You should only leverage this hook if you need to perform actions
against the form in response to your users' actions. Do not rely on its returned "fields" as being
@@ -152,7 +152,7 @@ The `useForm` hook returns an object with the following properties: |
rows={[
[
{
value: "**`fields`**",
value: <strong><code>fields</code></strong>,
},
{
value: "Deprecated. This property cannot be relied on as up-to-date.",
@@ -163,7 +163,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`submit`**",
value: <strong><code>submit</code></strong>,
},
{
value: "Method to trigger the form to submit",
@@ -174,7 +174,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`dispatchFields`**",
value: <strong><code>dispatchFields</code></strong>,
},
{
value: "Dispatch actions to the form field state",
@@ -185,7 +185,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`validateForm`**",
value: <strong><code>validateForm</code></strong>,
},
{
value: "Trigger a validation of the form state",
@@ -196,10 +196,10 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`createFormData`**",
value: <strong><code>createFormData</code></strong>,
},
{
value: "Create a `multipart/form-data` object from the current form's state",
value: <>Create a <code>multipart/form-data</code> object from the current form's state</>,
},
{
value: ''
@@ -207,7 +207,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`disabled`**",
value: <strong><code>disabled</code></strong>,
},
{
value: "Boolean denoting whether or not the form is disabled",
@@ -218,7 +218,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`getFields`**",
value: <strong><code>getFields</code></strong>,
},
{
value: 'Gets all fields from state',
@@ -229,7 +229,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`getField`**",
value: <strong><code>getField</code></strong>,
},
{
value: 'Gets a single field from state by path',
@@ -240,7 +240,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`getData`**",
value: <strong><code>getData</code></strong>,
},
{
value: 'Returns the data stored in the form',
@@ -251,7 +251,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`getSiblingData`**",
value: <strong><code>getSiblingData</code></strong>,
},
{
value: 'Returns form sibling data for the given field path',
@@ -262,10 +262,10 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`setModified`**",
value: <strong><code>setModified</code></strong>,
},
{
value: "Set the form\'s `modified` state",
value: <>Set the form\'s <code>modified</code> state</>,
},
{
value: '',
@@ -273,10 +273,10 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`setProcessing`**",
value: <strong><code>setProcessing</code></strong>,
},
{
value: "Set the form\'s `processing` state",
value: <>Set the form\'s <code>processing</code> state</>,
},
{
value: '',
@@ -284,10 +284,10 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`setSubmitted`**",
value: <strong><code>setSubmitted</code></strong>,
},
{
value: "Set the form\'s `submitted` state",
value: <>Set the form\'s <code>submitted</code> state</>,
},
{
value: '',
@@ -295,7 +295,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`formRef`**",
value: <strong><code>formRef</code></strong>,
},
{
value: 'The ref from the form HTML element',
@@ -306,7 +306,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`reset`**",
value: <strong><code>reset</code></strong>,
},
{
value: 'Method to reset the form to its initial state',
@@ -317,7 +317,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**`addFieldRow`**",
value: <strong><code>addFieldRow</code></strong>,
},
{
value: "Method to add a row on an array or block field",
@@ -326,7 +326,8 @@ The `useForm` hook returns an object with the following properties: |
drawerTitle: 'addFieldRow',
drawerDescription: 'A useful method to programmatically add a row to an array or block field.',
drawerSlug: 'addFieldRow',
drawerContent: `
drawerContent: (
<>
<TableWithDrawers
columns={[
'Prop',
@@ -335,7 +336,7 @@ The `useForm` hook returns an object with the following properties: |
rows={[
[
{
value: "**\\\`path\\\`**",
value: <strong><code>path</code></strong>,
},
{
value: "The path to the array or block field",
@@ -343,7 +344,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**\\\`rowIndex\\\`**",
value: <strong><code>rowIndex</code></strong>,
},
{
value: "The index of the row to add. If omitted, the row will be added to the end of the array.",
@@ -351,7 +352,7 @@ The `useForm` hook returns an object with the following properties: |
],
[
{
value: "**\\\`data\\\`**",
value: <strong><code>data</code></strong>,
},
{
value: "The data to add to the row",
@@ -360,9 +361,14 @@ The `useForm` hook returns an object with the following properties: |
]}
/>
{' '}
\`\`\`tsx
import { useForm } from "payload/components/forms";
<br />
{' '}
<pre>
{`import { useForm } from "payload/components/forms";
export const CustomArrayManager = () => {
const { addFieldRow } = useForm()
@@ -385,13 +391,12 @@ export const CustomArrayManager = () => {
Add Row
</button>
)
}
\`\`\`
}`}
</pre>
An example config to go along with the Custom Component
\`\`\`tsx
const ExampleCollection = {
<p>An example config to go along with the custom component</p>
<pre>
{`const ExampleCollection = {
slug: "example-collection",
fields: [
{
@@ -409,19 +414,20 @@ const ExampleCollection = {
name: "customArrayManager",
admin: {
components: {
Field: '/path/to/CustomArrayManagerField',
Field: CustomArrayManager,
},
},
},
],
}
\`\`\`
`
}`}
</pre>
</>
)
}
],
[
{
value: "**`removeFieldRow`**",
value: <strong><code>removeFieldRow</code></strong>,
},
{
value: "Method to remove a row from an array or block field",
@@ -430,7 +436,8 @@ const ExampleCollection = {
drawerTitle: 'removeFieldRow',
drawerDescription: 'A useful method to programmatically remove a row from an array or block field.',
drawerSlug: 'removeFieldRow',
drawerContent: `
drawerContent: (
<>
<TableWithDrawers
columns={[
'Prop',
@@ -439,7 +446,7 @@ const ExampleCollection = {
rows={[
[
{
value: "**\\\`path\\\`**",
value: <strong><code>path</code></strong>,
},
{
value: "The path to the array or block field",
@@ -447,7 +454,7 @@ const ExampleCollection = {
],
[
{
value: "**\\\`rowIndex\\\`**",
value: <strong><code>rowIndex</code></strong>,
},
{
value: "The index of the row to remove",
@@ -456,10 +463,14 @@ const ExampleCollection = {
]}
/>
{' '}
<br />
\`\`\`tsx
import { useForm } from "payload/components/forms";
{' '}
<pre>
{`import { useForm } from "payload/components/forms";
export const CustomArrayManager = () => {
const { removeFieldRow } = useForm()
@@ -477,13 +488,12 @@ export const CustomArrayManager = () => {
Remove Row
</button>
)
}
\`\`\`
}`}
</pre>
An example config to go along with the Custom Component
\`\`\`tsx
const ExampleCollection = {
<p>An example config to go along with the custom component</p>
<pre>
{`const ExampleCollection = {
slug: "example-collection",
fields: [
{
@@ -501,19 +511,20 @@ const ExampleCollection = {
name: "customArrayManager",
admin: {
components: {
Field: '/path/to/CustomArrayManagerField',
Field: CustomArrayManager,
},
},
},
],
}
\`\`\`
`
}`}
</pre>
</>
)
}
],
[
{
value: "**`replaceFieldRow`**",
value: <strong><code>replaceFieldRow</code></strong>,
},
{
value: "Method to replace a row from an array or block field",
@@ -522,7 +533,8 @@ const ExampleCollection = {
drawerTitle: 'replaceFieldRow',
drawerDescription: 'A useful method to programmatically replace a row from an array or block field.',
drawerSlug: 'replaceFieldRow',
drawerContent: `
drawerContent: (
<>
<TableWithDrawers
columns={[
'Prop',
@@ -531,7 +543,7 @@ const ExampleCollection = {
rows={[
[
{
value: "**\\\`path\\\`**",
value: <strong><code>path</code></strong>,
},
{
value: "The path to the array or block field",
@@ -539,7 +551,7 @@ const ExampleCollection = {
],
[
{
value: "**\\\`rowIndex\\\`**",
value: <strong><code>rowIndex</code></strong>,
},
{
value: "The index of the row to replace",
@@ -547,7 +559,7 @@ const ExampleCollection = {
],
[
{
value: "**\\\`data\\\`**",
value: <strong><code>data</code></strong>,
},
{
value: "The data to replace within the row",
@@ -556,11 +568,14 @@ const ExampleCollection = {
]}
/>
{' '}
<br />
{' '}
\`\`\`tsx
import { useForm } from "payload/components/forms";
<pre>
{`import { useForm } from "payload/components/forms";
export const CustomArrayManager = () => {
const { replaceFieldRow } = useForm()
@@ -583,13 +598,12 @@ export const CustomArrayManager = () => {
Replace Row
</button>
)
}
\`\`\`
}`}
</pre>
An example config to go along with the Custom Component
\`\`\`tsx
const ExampleCollection = {
<p>An example config to go along with the custom component</p>
<pre>
{`const ExampleCollection = {
slug: "example-collection",
fields: [
{
@@ -607,14 +621,15 @@ const ExampleCollection = {
name: "customArrayManager",
admin: {
components: {
Field: '/path/to/CustomArrayManagerField',
Field: CustomArrayManager,
},
},
},
],
}
\`\`\`
`
}`}
</pre>
</>
)
}
],
]}

View File

@@ -51,8 +51,8 @@ All options for the Admin panel are defined in your base Payload config file.
### The Admin User Collection
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
The Payload Admin panel can only be used by one Collection that supports
[Authentication](/docs/authentication/overview).
</Banner>

View File

@@ -15,8 +15,8 @@ Out of the box, Payload handles the persistence of your users' preferences in a
1. The "collapsed" state of blocks, on a document level, as users edit or interact with documents
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
All preferences are stored on an individual user basis. Payload automatically recognizes the user
that is reading or setting a preference via all provided authentication methods.
</Banner>

View File

@@ -45,7 +45,7 @@ Here are the main differences between how Vite aliases work and how Webpack alia
**Vite aliases do not work with absolute paths.**
In Vite, alias keys must **exactly match** a import paths. If you have 2 files that import the same server-only module, but have different import paths, you would need to add 2 aliases to support both import paths.
In Vite, alias keys must <strong>exactly match</strong> a import paths. If you have 2 files that import the same server-only module, but have different import paths, you would need to add 2 aliases to support both import paths.
```ts
// File A

View File

@@ -59,8 +59,8 @@ export default buildConfig({
```
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
If changes to your Webpack aliases are not surfacing, they might be
[cached](https://webpack.js.org/configuration/cache/) in `node_modules/.cache/webpack`. Try
deleting that folder and restarting your server.

View File

@@ -46,9 +46,9 @@ To enable API keys on a collection, set the `useAPIKey` auth option to `true`. F
</Banner>
<Banner type="warning">
**Important:**
<strong>Important:</strong>
If you change your `PAYLOAD_SECRET`, you will need to regenerate your API keys.
<br />
The secret key is used to encrypt the API keys, so if you change the secret, existing API keys will no longer be valid.
</Banner>
@@ -95,8 +95,8 @@ You can customize how the Forgot Password workflow operates with the following o
Function that accepts one argument, containing `{ req, token, user }`, that allows for overriding the HTML within emails that are sent to users attempting to reset their password. The function should return a string that supports HTML, which can be a full HTML email.
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
HTML templating can be used to create custom email templates, inline CSS automatically, and more.
You can make a reusable function that standardizes all email sent from Payload, which makes
sending custom emails more DRY. Payload doesn't ship with an HTML templating engine, so you are
@@ -138,8 +138,8 @@ export const Customers: CollectionConfig = {
```
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
If you specify a different URL to send your users to for resetting their password, such as a page
on the frontend of your app or similar, you need to handle making the call to the Payload REST or
GraphQL reset-password operation yourself on your frontend, using the token that was provided for
@@ -198,8 +198,8 @@ export const Customers: CollectionConfig = {
```
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
If you specify a different URL to send your users to for email verification, such as a page on the
frontend of your app or similar, you need to handle making the call to the Payload REST or GraphQL
verification operation yourself on your frontend, using the token that was provided for you.
@@ -216,7 +216,7 @@ Example:
{
slug: 'customers',
auth: {
verify: {
forgotPassword: {
// highlight-start
generateEmailSubject: ({ req, user }) => {
return `Hey ${user.email}, reset your password!`;

View File

@@ -191,7 +191,7 @@ mutation {
### Refresh
Allows for "refreshing" JWTs. If your user has a token that is about to expire, but the user is still active and using the app, you might want to use the `refresh` operation to receive a new token by executing this operation via the authenticated user.
Allows for "refreshing" JWTs. If your user has a token that is about to expire, but the user is still active and using the app, you might want to use the `refresh` operation to receive a new token by sending the operation the token that is about to expire.
This operation requires a non-expired token to send back a new one. If the user's token has already expired, you will need to allow them to log in again to retrieve a new token.
@@ -237,6 +237,13 @@ mutation {
}
```
<Banner type="success">
The Refresh operation will automatically find the user's token in either a JWT header or the
HTTP-only cookie. But, you can specify the token you're looking to refresh by providing the REST
API with a `token` within the JSON body of the request, or by providing the GraphQL resolver a
`token` arg.
</Banner>
### Verify by Email
If your collection supports email verification, the Verify operation will be exposed which accepts a verification token and sets the user's `_verified` property to `true`, thereby allowing the user to authenticate with the Payload API.
@@ -283,9 +290,6 @@ const res = await fetch(`http://localhost:3000/api/[collection-slug]/unlock`, {
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: 'dev@payloadcms.com',
}),
})
```
@@ -293,7 +297,7 @@ const res = await fetch(`http://localhost:3000/api/[collection-slug]/unlock`, {
```
mutation {
unlock[collection-singular-label](email: "dev@payloadcms.com")
unlock[collection-singular-label]
}
```
@@ -302,9 +306,6 @@ mutation {
```ts
const result = await payload.unlock({
collection: '[collection-slug]',
data: {
email: 'dev@payloadcms.com',
},
})
```
@@ -351,8 +352,8 @@ const token = await payload.forgotPassword({
```
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
You can stop the reset-password email from being sent via using the local API. This is helpful if
you need to create user accounts programmatically, but not set their password for them. This
effectively generates a reset password token which you can then use to send to a page you create,

View File

@@ -87,10 +87,10 @@ Successfully logging in returns a `JWT` (JSON web token) which is how a user wil
You can specify what data gets encoded to the JWT token by setting `saveToJWT` to true in your auth collection fields. If you wish to use a different key other than the field `name`, you can provide it to `saveToJWT` as a string. It is also possible to use `saveToJWT` on fields that are nested in inside groups and tabs. If a group has a `saveToJWT` set it will include the object with all sub-fields in the token. You can set `saveToJWT: false` for any fields you wish to omit. If a field inside a group has `saveToJWT` set, but the group does not, the field will be included at the top level of the token.
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
You can access the logged-in user from access control functions and hooks via the Express{' '}
**req**. The logged-in user is automatically added as the **user**
<strong>req</strong>. The logged-in user is automatically added as the <strong>user</strong>{' '}
property.
</Banner>
@@ -119,8 +119,8 @@ const pages = await response.json()
For more about how to automatically include cookies in requests from your app to your Payload API, [click here](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Sending_a_request_with_credentials_included).
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
To make sure you have a Payload cookie set properly in your browser after logging in, you can use
Chrome's Developer Tools - Application - Cookies - [your-domain-here]. The Chrome Developer tools
will still show HTTP-only cookies, even when JavaScript running on the page can't.
@@ -135,10 +135,10 @@ For example, let's say you have a very popular app running at coolsite.com. This
So, if a user of coolsite.com is logged in and just browsing around on the internet, they might stumble onto a page with bad intentions. That bad page might automatically make requests to all sorts of sites to see if they can find one that they can log into - and coolsite.com might be on their list. If your user was logged in while they visited that evil site, the attacker could do whatever they wanted as if they were your coolsite.com user by just sending requests to the coolsite API (which would automatically include the auth cookie). They could send themselves a bunch of money from your user's account, change the user's password, etc. This is what a CSRF attack is.
<Banner type="warning">
**
<strong>
To protect against CSRF attacks, Payload only accepts cookie-based authentication from domains
that you explicitly whitelist.
**
</strong>
</Banner>
To define domains that should allow users to identify themselves via the Payload HTTP-only cookie, use the `csrf` option on the base Payload config to whitelist domains that you trust.

View File

@@ -54,7 +54,7 @@ Any of the features in Payload Cloud that require environment variables will aut
Payment methods can be set per project and can be updated any time. You can use teams default payment method, or add a new one. Modify your payment methods in your Project settings / Team settings.
<Banner type="success">
**Note:** All Payload Cloud teams that deploy a project require a card on file. This
<strong>Note:</strong> All Payload Cloud teams that deploy a project require a card on file. This
helps us prevent fraud and abuse on our platform. If you select a plan with a free trial, you will
not be charged until your trial period is over. Well remind you 7 days before your trial ends and
you can cancel anytime.

View File

@@ -31,7 +31,7 @@ Next, select your `GitHub Scope`. If you belong to multiple organizations, they
After selecting your scope, create a unique `repository name` and select whether you want your repository to be public or private on GitHub.
<Banner type="warning">
**Note:** Public repositories can be accessed by anyone online, while private
<strong>Note:</strong> Public repositories can be accessed by anyone online, while private
repositories grant access only to you and anyone you explicitly authorize.
</Banner>
@@ -45,7 +45,7 @@ Payload Cloud works for any Node.js + MongoDB app. From the New Project page, se
_Creating a new project from an existing repository._
<Banner type="warning">
**Note:** In order to make use of the features of Payload Cloud in your own codebase,
<strong>Note:</strong> In order to make use of the features of Payload Cloud in your own codebase,
you will need to add the [Cloud Plugin](https://github.com/payloadcms/plugin-cloud) to your
Payload app.
</Banner>

View File

@@ -14,7 +14,7 @@ It's often best practice to write your Collections in separate files and then im
## Options
| Option | Description |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **`slug`** \* | Unique, URL-friendly string that will act as an identifier for this Collection. |
| **`fields`** \* | Array of field types that will determine the structure and functionality of the data stored within this Collection. [Click here](/docs/fields/overview) for a full list of field types as well as how to configure them. |
| **`labels`** | Singular and plural labels for use in identifying this Collection throughout Payload. Auto-generated from slug if not defined. |
@@ -30,8 +30,6 @@ It's often best practice to write your Collections in separate files and then im
| **`typescript`** | An object with property `interface` as the text used in schema generation. Auto-generated from slug if not defined. |
| **`defaultSort`** | Pass a top-level field to sort by default in the collection List view. Prefix the name of the field with a minus symbol ("-") to sort in descending order. |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
| **`dbName`** | Custom table or collection name depending on the database adapter. Auto-generated from slug if not defined. |
| **`db`** | Set custom database operations for this Collection. [More](/docs/database/overview#collection-operations) |
_\* An asterisk denotes that a property is required._
@@ -61,8 +59,7 @@ export const Orders: CollectionConfig = {
#### More collection config examples
You can find an assortment
of [example collection configs](https://github.com/payloadcms/public-demo/tree/master/src/payload/collections) in the
Public
of [example collection configs](https://github.com/payloadcms/public-demo/tree/master/src/payload/collections) in the Public
Demo source code on GitHub.
### Admin options
@@ -70,24 +67,23 @@ Demo source code on GitHub.
You can customize the way that the Admin panel behaves on a collection-by-collection basis by defining the `admin`
property on a collection's config.
| Option | Description |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `group` | Text used as a label for grouping collection and global links together in the navigation. |
| `hidden` | Set to true or a function, called with the current user, returning true to exclude this collection from navigation and admin routing. |
| `hooks` | Admin-specific hooks for this collection. [More](#admin-hooks) |
| `useAsTitle` | Specify a top-level field to use for a document title throughout the Admin panel. If no field is defined, the ID of the document is used as the title. |
| `description` | Text or React component to display below the Collection label in the List view to give editors more information. |
| `defaultColumns` | Array of field names that correspond to which columns to show by default in this collection's List view. |
| `disableDuplicate ` | Disables the "Duplicate" button while editing documents within this collection. |
| `forceRenderAllFields ` | Forces all fields in the Edit view to render immediately, regardless of scroll position. By default, this is set to `false` to improve performance, as fields are progressively rendered to balance load times. Enabling this option can make it easier to locate fields using browser search (e.g., `CMD+F`). |
| `hideAPIURL` | Hides the "API URL" meta field while editing documents within this collection. |
| `enableRichTextLink` | The [Rich Text](/docs/fields/rich-text) field features a `Link` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. |
| `enableRichTextRelationship` | The [Rich Text](/docs/fields/rich-text) field features a `Relationship` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. |
| `preview` | Function to generate preview URLS within the Admin panel that can point to your app. [More](#preview). |
| `livePreview` | Enable real-time editing for instant visual feedback of your front-end application. [More](/docs/live-preview/overview). |
| `components` | Swap in your own React components to be used within this collection. [More](/docs/admin/components#collections) |
| `listSearchableFields` | Specify which fields should be searched in the List search view. [More](#list-searchable-fields) |
| **`pagination`** | Set pagination-specific options for this collection. [More](#pagination) |
| Option | Description |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `group` | Text used as a label for grouping collection and global links together in the navigation. |
| `hidden` | Set to true or a function, called with the current user, returning true to exclude this collection from navigation and admin routing. |
| `hooks` | Admin-specific hooks for this collection. [More](#admin-hooks) |
| `useAsTitle` | Specify a top-level field to use for a document title throughout the Admin panel. If no field is defined, the ID of the document is used as the title. |
| `description` | Text or React component to display below the Collection label in the List view to give editors more information. |
| `defaultColumns` | Array of field names that correspond to which columns to show by default in this collection's List view. |
| `disableDuplicate ` | Disables the "Duplicate" button while editing documents within this collection. |
| `hideAPIURL` | Hides the "API URL" meta field while editing documents within this collection. |
| `enableRichTextLink` | The [Rich Text](/docs/fields/rich-text) field features a `Link` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. |
| `enableRichTextRelationship` | The [Rich Text](/docs/fields/rich-text) field features a `Relationship` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. |
| `preview` | Function to generate preview URLS within the Admin panel that can point to your app. [More](#preview). |
| `livePreview` | Enable real-time editing for instant visual feedback of your front-end application. [More](/docs/live-preview/overview). |
| `components` | Swap in your own React components to be used within this collection. [More](/docs/admin/components#collections) |
| `listSearchableFields` | Specify which fields should be searched in the List search view. [More](#list-searchable-fields) |
| **`pagination`** | Set pagination-specific options for this collection. [More](#pagination) |
### Preview
@@ -133,7 +129,7 @@ export const Posts: CollectionConfig = {
Here are a few options that you can specify options for pagination on a collection-by-collection basis:
| Option | Description |
| -------------- | --------------------------------------------------------------------------------------------------- |
|----------------|-----------------------------------------------------------------------------------------------------|
| `defaultLimit` | Integer that specifies the default per-page limit that should be used. Defaults to 10. |
| `limits` | Provide an array of integers to use as per-page options for admins to choose from in the List view. |
@@ -165,11 +161,10 @@ add `admin.listSearchableFields: ['title', 'metaDescription', 'tags']` - and the
those three fields plus the ID field.
<Banner type="warning">
**Note:**
If you are adding **listSearchableFields**, make sure you index each of these fields
so your admin queries can remain performant.
<strong>Note:</strong>
<br />
If you are adding <strong>listSearchableFields</strong>, make sure you index each of these fields
so your admin queries can remain performant.
</Banner>
### Admin Hooks

View File

@@ -6,13 +6,9 @@ desc: Set up your Global config for your needs by defining fields, adding slugs
keywords: globals, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
Global configs are in many ways similar to [Collections](/docs/configuration/collections). The big difference is that
Collections will potentially contain _many_ documents, while a Global is a "one-off". Globals are perfect for things
like header nav, site-wide banner alerts, app-wide localized strings, and other "global" data that your site or app
might rely on.
Global configs are in many ways similar to [Collections](/docs/configuration/collections). The big difference is that Collections will potentially contain _many_ documents, while a Global is a "one-off". Globals are perfect for things like header nav, site-wide banner alerts, app-wide localized strings, and other "global" data that your site or app might rely on.
As with Collection configs, it's often best practice to write your Globals in separate files and then import them into
the main Payload config.
As with Collection configs, it's often best practice to write your Globals in separate files and then import them into the main Payload config.
## Options
@@ -30,7 +26,6 @@ the main Payload config.
| **`graphQL.name`** | Text used in schema generation. Auto-generated from slug if not defined. |
| **`typescript`** | An object with property `interface` as the text used in schema generation. Auto-generated from slug if not defined. |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
| **`dbName`** | Custom table or collection name for this global depending on the database adapter. Auto-generated from slug if not defined. |
_\* An asterisk denotes that a property is required._
@@ -64,31 +59,26 @@ export default Nav
#### Global config example
You can find a few [example Global configs](https://github.com/payloadcms/public-demo/tree/master/src/payload/globals)
in the Public Demo source code on GitHub.
You can find a few [example Global configs](https://github.com/payloadcms/public-demo/tree/master/src/payload/globals) in the Public Demo source code on GitHub.
### Admin options
You can customize the way that the Admin panel behaves on a Global-by-Global basis by defining the `admin` property on a
Global's config.
You can customize the way that the Admin panel behaves on a Global-by-Global basis by defining the `admin` property on a Global's config.
| Option | Description |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `group` | Text used as a label for grouping collection and global links together in the navigation. |
| `hidden` | Set to true or a function, called with the current user, returning true to exclude this global from navigation and admin routing. |
| `components` | Swap in your own React components to be used within this Global. [More](/docs/admin/components#globals) |
| `preview` | Function to generate a preview URL within the Admin panel for this global that can point to your app. [More](#preview). |
| `livePreview` | Enable real-time editing for instant visual feedback of your front-end application. [More](/docs/live-preview/overview). |
| `hideAPIURL` | Hides the "API URL" meta field while editing documents within this collection. |
| `forceRenderAllFields ` | Forces all fields in the Edit view to render immediately, regardless of scroll position. By default, this is set to `false` to improve performance, as fields are progressively rendered to balance load times. Enabling this option can make it easier to locate fields using browser search (e.g., `CMD+F`). |
| Option | Description |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `group` | Text used as a label for grouping collection and global links together in the navigation. |
| `hidden` | Set to true or a function, called with the current user, returning true to exclude this global from navigation and admin routing. |
| `components` | Swap in your own React components to be used within this Global. [More](/docs/admin/components#globals) |
| `preview` | Function to generate a preview URL within the Admin panel for this global that can point to your app. [More](#preview). |
| `livePreview`| Enable real-time editing for instant visual feedback of your front-end application. [More](/docs/live-preview/overview). |
| `hideAPIURL` | Hides the "API URL" meta field while editing documents within this collection. |
### Preview
Global `admin` options can accept a `preview` function that will be used to generate a link pointing to the frontend of
your app to preview data.
Global `admin` options can accept a `preview` function that will be used to generate a link pointing to the frontend of your app to preview data.
If the function is specified, a Preview button will automatically appear in the corresponding global's Edit view.
Clicking the Preview button will link to the URL that is generated by the function.
If the function is specified, a Preview button will automatically appear in the corresponding global's Edit view. Clicking the Preview button will link to the URL that is generated by the function.
**The preview function accepts two arguments:**
@@ -123,20 +113,15 @@ export const MyGlobal: GlobalConfig = {
### Access control
As with Collections, you can specify extremely granular access control (what users can do with this Global) on a
Global-by-Global basis. However, Globals only have `update` and `read` access control due to their nature of only having
one document. To learn more, go to the [Access Control](/docs/access-control/overview) docs.
As with Collections, you can specify extremely granular access control (what users can do with this Global) on a Global-by-Global basis. However, Globals only have `update` and `read` access control due to their nature of only having one document. To learn more, go to the [Access Control](/docs/access-control/overview) docs.
### Hooks
Globals also fully support a smaller subset of Hooks. To learn more, go to the [Hooks](/docs/hooks/overview)
documentation.
Globals also fully support a smaller subset of Hooks. To learn more, go to the [Hooks](/docs/hooks/overview) documentation.
### Field types
Globals support all field types that Payload has to offer—including simple fields like text and checkboxes all the way
to more complicated layout-building field groups like Blocks. [Click here](/docs/fields/overview) to learn more about
field types.
Globals support all field types that Payload has to offer—including simple fields like text and checkboxes all the way to more complicated layout-building field groups like Blocks. [Click here](/docs/fields/overview) to learn more about field types.
### TypeScript

View File

@@ -62,8 +62,8 @@ The Payload admin panel reads the language settings of a user's browser and disp
After a user logs in, they can change their language selection in the `/account` view.
<Banner>
**Note:**
<strong>Note:</strong>
<br />
If there is a language that Payload does not yet support, we accept code
[contributions](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md).
</Banner>

View File

@@ -24,8 +24,8 @@ export default buildConfig({
// collections go here
],
localization: {
locales: ['en', 'es', 'de'], // required
defaultLocale: 'en', // required
locales: ['en', 'es', 'de'],
defaultLocale: 'en',
fallback: true,
},
})
@@ -49,12 +49,11 @@ export default buildConfig({
{
label: 'Arabic',
code: 'ar',
// opt-in to setting default text-alignment on Input fields to rtl (right-to-left)
// when current locale is rtl
// opt-in to setting default text-alignment on Input fields to rtl (right-to-left) when current locale is rtl
rtl: true,
},
],
defaultLocale: 'en', // required
defaultLocale: 'en',
fallback: true,
},
})
@@ -87,7 +86,7 @@ export default buildConfig({
code: 'nb',
},
],
defaultLocale: 'en', // required
defaultLocale: 'en',
fallback: true,
},
})
@@ -135,9 +134,13 @@ to support localization, you need to specify each field that you would like to l
```js
{
name: 'title',
type: 'text',
// highlight-start
localized: true,
type
:
'text',
// highlight-start
localized
:
true,
// highlight-end
}
```
@@ -149,8 +152,8 @@ All field types with a `name` property support the `localized` property—even t
and `block`s.
<Banner>
**Note:**
<strong>Note:</strong>
<br />
Enabling localization for field types that support nested fields will automatically create
localized "sets" of all fields contained within the field. For example, if you have a page layout
using a blocks field type, you have the choice of either localizing the full layout, by enabling
@@ -158,8 +161,8 @@ and `block`s.
</Banner>
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
When converting an existing field to or from `localized: true` the data structure in the document
will change for this field and so existing data for this field will be lost. Before changing the
localization setting on fields with existing data, you may need to consider a field migration
@@ -235,9 +238,9 @@ const posts = await payload.find({
```
<Banner type="alert">
**Tip:**
<strong>Tip:</strong>
<br />
The REST and Local APIs can return all localization data in one request by passing 'all' or '*' as
the **locale** parameter. The response will be structured so that field values come
the <strong>locale</strong> parameter. The response will be structured so that field values come
back as the full objects keyed for each locale instead of the single, translated value.
</Banner>

View File

@@ -11,8 +11,8 @@ Payload is a _config-based_, code-first CMS and application framework. The Paylo
**Also, because the Payload source code is fully written in TypeScript, its configs are strongly typed—meaning that even if you aren't using TypeScript, your IDE (such as VSCode) may still provide helpful information like type-ahead suggestions while you write your config.**
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
This file is included in the Payload admin bundle, so make sure you do not embed any sensitive
information.
</Banner>
@@ -66,8 +66,8 @@ export default buildConfig({
admin: {
bundler: webpackBundler(), // or viteBundler()
},
db: mongooseAdapter({}), // or postgresAdapter({})
editor: lexicalEditor({}), // or slateEditor({})
db: mongooseAdapter({}) // or postgresAdapter({}),
editor: lexicalEditor({}) // or slateEditor({})
collections: [
{
slug: 'pages',
@@ -135,8 +135,8 @@ project-name
```
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
If you use an environment variable to configure any properties that are required for the Admin
panel to function (ex. serverURL or any routes), you need to make sure that your Admin panel code
can access it. [Click here](/docs/admin/webpack#admin-environment-vars) for more info.

View File

@@ -30,18 +30,13 @@ export default buildConfig({
### Options
| Option | Description |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `autoPluralization` | Tell Mongoose to auto-pluralize any collection names if it encounters any singular words used as collection `slug`s. |
| `schemaOptions` | Customize schema options for all Mongoose schemas created internally. |
| `jsonParse` | Set to false to disable the automatic JSON stringify/parse of data queried by MongoDB. For example, if you have data not tracked by Payload such as `Date` fields and similar, you can use this option to ensure that existing `Date` properties remain as `Date` and not strings. |
| `collections` | Options on a collection-by-collection basis. [More](#collections-options) |
| `globals` | Options for the Globals collection created by Payload. [More](#globals-options) |
| `connectOptions` | Customize MongoDB connection options. Payload will connect to your MongoDB database using default options which you can override and extend to include all the [options](https://mongoosejs.com/docs/connections.html#options) available to mongoose. |
| `disableIndexHints` | Set to true to disable hinting to MongoDB to use 'id' as index. This is currently done when counting documents for pagination, as it increases the speed of the count function used in that query. Disabling this optimization might fix some problems with AWS DocumentDB. Defaults to false |
| `migrationDir` | Customize the directory that migrations are stored. |
| `transactionOptions` | An object with configuration properties used in [transactions](https://www.mongodb.com/docs/manual/core/transactions/) or `false` which will disable the use of transactions. |
| `collation` | Enable language-specific string comparison with customizable options. Available on MongoDB 3.4+. Defaults locale to "en". Example: `{ strength: 3 }`. For a full list of collation options and their definitions, see the [MongoDB documentation](https://www.mongodb.com/docs/manual/reference/collation/). |
| Option | Description |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `autoPluralization` | Tell Mongoose to auto-pluralize any collection names if it encounters any singular words used as collection `slug`s. |
| `connectOptions` | Customize MongoDB connection options. Payload will connect to your MongoDB database using default options which you can override and extend to include all the [options](https://mongoosejs.com/docs/connections.html#options) available to mongoose. |
| `disableIndexHints` | Set to true to disable hinting to MongoDB to use 'id' as index. This is currently done when counting documents for pagination, as it increases the speed of the count function used in that query. Disabling this optimization might fix some problems with AWS DocumentDB. Defaults to false |
| `migrationDir` | Customize the directory that migrations are stored. |
| `transactionOptions` | An object with configuration properties used in [transactions](https://www.mongodb.com/docs/manual/core/transactions/) or `false` which will disable the use of transactions. | |
### Access to Mongoose models
@@ -53,51 +48,3 @@ You can access Mongoose models as follows:
- Collection models - `payload.db.collections[myCollectionSlug]`
- Globals model - `payload.db.globals`
- Versions model (both collections and globals) - `payload.db.versions[myEntitySlug]`
### Collections Options
You can configure the way the MongoDB adapter works on a collection-by-collection basis, including customizing Mongoose `schemaOptions` for each collection schema created.
Example:
```ts
const db = mongooseAdapter({
url: 'your-url-here',
collections: {
users: {
//
schemaOptions: {
strict: false,
}
}
}
})
```
### Global Options
Payload automatically creates a single `globals` collection that correspond with any Payload globals that you define. When you initialize the `mongooseAdapter`, you can specify settings here for your globals in a similar manner to how you can for collections above. Right now, the only property available is `schemaOptions` but more may be added in the future.
### Preserving externally managed data
You can use Payload in conjunction with an existing MongoDB database, where you might have some fields "tracked" in Payload via corresponding field configs, and other fields completely unknown to Payload.
If you have external field data in existing MongoDB collections which you'd like to use in combination with Payload, and you don't want to lose those external fields, you can configure Payload to "preserve" that data while it makes updates to your existing documents.
To do this, the first step is to configure Mongoose's `strict` property, which tells Mongoose to write all data that it receives (and not disregard any data that it does not know about).
The second step is to disable Payload's automatic JSON parsing of documents it receives from MongoDB.
Here's an example for how to configure your Mongoose adapter to preserve external collection fields that are not tracked by Payload:
```ts
mongooseAdapter({
url: process.env.DATABASE_URI,
// Disable the JSON parsing that Payload performs
jsonParse: false,
// Disable strict mode for Mongoose
schemaOptions: {
strict: false,
},
})
```

View File

@@ -70,105 +70,4 @@ export default buildConfig({
}
}),
})
```
## Collection Operations
To configure Collection database operations in your Payload application, your Collection config has methods that can override default database operations for that Collection.
The override methods receive arguments useful for augmenting operations such as Field data, the collection slug, and the req.
Here is an example:
```ts
import type { CollectionConfig } from 'payload/types'
export const Collection: CollectionConfig => {
return {
slug: 'collection-db-operations',
db: {
// Create a document in a custom db
create: async ({ collection, data, req }) => {
const doc = await fetch(`https://example.com/api/${collection}/create`, {
method: "POST",
body: JSON.stringify(data),
headers: {
'x-app-user': `payload_${req.payload.user}`,
'Content-Type': 'application/json'
}
}).then(response => response.json())
return doc
},
// Delete a document in a custom db
deleteOne: async ({ collection, data, req }) => {
const docs = await fetch(`https://example.com/api/${collection}/delete/${data.id}`, {
method: 'DELETE',
headers: {
'x-app-user': `payload_${req.payload.user}`
}
}).then(response => response.json())
return docs
},
// Delete many documents in a custom db
deleteMany: async ({ collection, data, req }) => {
const docs = await fetch(`https://example.com/api/${collection}/delete`, {
method: 'DELETE'
headers: {
'x-app-user': `payload_${req.payload.user}`
}
body: JSON.stringify(data),
}).then(response => response.json())
return docs
},
// Find documents in a custom db
find: async ({ collection, data, req, where, limit }) => {
const docs = await fetch(`https://example.com/api/${collection}/find`, {
headers: {
'x-app-user': `payload_${req.payload.user}`
}
body: JSON.stringify({data, where, limit}),
}).then(response => response.json())
return { docs }
},
// Find one document in a custom db
findOne: async ({ collection, data, req }) => {
const doc = await fetch(`https://example.com/api/${collection}/find/${data.id}`, {
headers: {
'x-app-user': `payload_${req.payload.user}`
}
}).then(response => response.json())
return doc
},
// Update one document in an custom db
updateOne: async ({ collection, data, req }) => {
const doc = await fetch(`https://example.com/api/${collection}/update/${data.id}`, {
method: 'PUT',
body: JSON.stringify(data),
headers: {
'x-app-user': `payload_${req.payload.user}`,
'Content-Type': 'application/json'
}
}).then(response => response.json())
return { ...doc, updated: true }
},
},
fields: [
{
name: 'name',
type: 'text',
},
],
}
}
```
```

View File

@@ -37,18 +37,12 @@ export default buildConfig({
### Options
| Option | Description |
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `pool` \* | [Pool connection options](https://orm.drizzle.team/docs/quick-postgresql/node-postgres) that will be passed to Drizzle and `node-postgres`. |
| `push` | Disable Drizzle's [`db push`](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push) in development mode. By default, `push` is enabled for development mode only. |
| `migrationDir` | Customize the directory that migrations are stored. |
| `logger` | The instance of the logger to be passed to drizzle. By default Payload's will be used. |
| Option | Description |
|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `pool` | [Pool connection options](https://orm.drizzle.team/docs/quick-postgresql/node-postgres) that will be passed to Drizzle and `node-postgres`. |
| `push` | Disable Drizzle's [`db push`](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push) in development mode. By default, `push` is enabled for development mode only. |
| `migrationDir` | Customize the directory that migrations are stored. |
| `schemaName` | A string for the postgres schema to use, defaults to 'public'. |
| `localesSuffix` | A string appended to the end of table names for storing localized fields. Default is '_locales'. |
| `relationshipsSuffix` | A string appended to the end of table names for storing relationships. Default is '_rels'. |
| `versionsSuffix` | A string appended to the end of table names for storing versions. Defaults to '_v'. |
### Access to Drizzle

View File

@@ -11,8 +11,8 @@ Database transactions allow your application to make a series of database change
By default, Payload will use transactions for all operations, as long as it is supported by the configured database. Database changes are contained within all Payload operations and any errors thrown will result in all changes being rolled back without being committed. When transactions are not supported by the database, Payload will continue to operate as expected without them.
<Banner type="info">
**Note:**
<strong>Note:</strong>
<br />
MongoDB requires a connection to a replicaset in order to make use of transactions.
</Banner>
@@ -20,8 +20,7 @@ The initial request made to Payload will begin a new transaction and attach it t
```ts
const afterChange: CollectionAfterChangeHook = async ({ req }) => {
// because req.transactionID is assigned from Payload and passed through,
// my-slug will only persist if the entire request is successful
// because req.transactionID is assigned from Payload and passed through, my-slug will only persist if the entire request is successful
await req.payload.create({
req,
collection: 'my-slug',
@@ -61,44 +60,10 @@ const afterChange: CollectionAfterChangeHook = async ({ req }) => {
### Direct Transaction Access
When writing your own scripts or custom endpoints, you may wish to have direct control over transactions. This is useful for interacting with your database in something like a background job, outside the normal request-response flow.
When writing your own scripts or custom endpoints, you may wish to have direct control over transactions. This is useful for interacting with your database outside of Payload's local API.
The following functions can be used for managing transactions:
`payload.db.beginTransaction` - Starts a new session and returns a transaction ID for use in other Payload Local API calls. Note that if your database does not support transactions, this will return `null`.\
`payload.db.commitTransaction` - Takes the identifier for the transaction, finalizes any changes.\
`payload.db.rollbackTransaction` - Takes the identifier for the transaction, discards any changes.
You can then use the transaction ID with Payload's local API by passing it inside the `PayloadRequest` object.
Here is an example for a "background job" function, which utilizes the direct transaction API to make sure it either succeeds completely or gets rolled back in case of an error.
```ts
async function allOrNothingJob() {
const req = {} as PayloadRequest;
req.transactionID = await payload.db.beginTransaction();
try {
await payload.create({
req, // use our manual transaction
collection: 'my-slug',
data: {
some: 'data'
}
});
await payload.create({
req, // use our manual transaction
collection: 'something-else',
data: {
some: 'data'
}
});
console.log('Everything done.');
if (req.transactionID) await payload.db.commitTransaction(req.transactionID);
} catch (e) {
console.error('Oh no, something went wrong!');
if (req.transactionID) await payload.db.rollbackTransaction(req.transactionID);
}
}
```
`payload.db.beginTransaction` - Starts a new session and returns a transaction ID for use in other Payload Local API calls.
`payload.db.commitTransaction` - Takes the identifier for the transaction, finalizes any changes.
`payload.db.rollbackTransaction` - Takes the identifier for the transaction, discards any changes.

View File

@@ -50,7 +50,7 @@ payload.init({
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
port: Number(process.env.SMTP_PORT),
port: Number(process.env.SMTP_HOST),
secure: Number(process.env.SMTP_PORT) === 465, // true for port 465, false (the default) for 587 and others
requireTLS: true,
},

View File

@@ -1,39 +0,0 @@
---
title: Examples
label: Overview
order: 10
desc:
keywords: example, examples, starter, boilerplate, template, templates
---
Payload provides a vast array of examples to help you get started with your project no matter what you are working on. These examples are designed to be easy to get up and running, and to be easy to understand. They showcase nothing more than the specific features being demonstrated, so you can easily decipher what is going on.
Examples are changing every day, so be sure to check back often to see what new examples have been added. If you have a specific example you would like to see, please feel free to start a new [Discussion](https://github.com/payloadcms/payload/discussions) or open a new [PR](https://github.com/payloadcms/payload/pulls) to add it yourself.
- [Auth](https://github.com/payloadcms/payload/tree/main/examples/auth)
- [Custom Server](https://github.com/payloadcms/payload/tree/main/examples/custom-server)
- [Draft Preview](https://github.com/payloadcms/payload/tree/main/examples/draft-preview)
- [Email](https://github.com/payloadcms/payload/tree/main/examples/email)
- [Form Builder](https://github.com/payloadcms/payload/tree/main/examples/form-builder)
- [Hierarchy](https://github.com/payloadcms/payload/tree/main/examples/hierarchy)
- [Live Preview](https://github.com/payloadcms/payload/tree/main/examples/live-preview)
- [Multi-tenant](https://github.com/payloadcms/payload/tree/main/examples/multi-tenant)
- [Nested Docs](https://github.com/payloadcms/payload/tree/main/examples/nested-docs)
- [Redirects](https://github.com/payloadcms/payload/tree/main/examples/redirects)
- [Tests](https://github.com/payloadcms/payload/tree/main/examples/testing)
- [Virtual Fields](https://github.com/payloadcms/payload/tree/main/examples/virtual-fields)
- [White-label Admin UI](https://github.com/payloadcms/payload/tree/main/examples/whitelabel)
Where necessary, some examples include a front-end. Examples that require a front-end share this folder structure:
```plaintext
example/
├── payload/
├── next-app/
├── next-pages/
├── react-router/
├── vue/
├── svelte/
```
Where `payload` is your Payload project, and the other directories are dedicated to their respective front-end framework. We are adding new examples every day, so if your framework of choice is not yet supported in any particular example, please feel free to start a new [Discussion](https://github.com/payloadcms/payload/discussions) or open a new [PR](https://github.com/payloadcms/payload/pulls) to add it yourself.

View File

@@ -12,24 +12,22 @@ keywords: array, fields, config, configuration, documentation, Content Managemen
</Banner>
<LightDarkImage
srcLight="https://payloadcms.com/images/docs/fields/array.png"
srcDark="https://payloadcms.com/images/docs/fields/array-dark.png"
alt="Array field with two Rows in Payload admin panel"
caption="Admin panel screenshot of an Array field with two Rows"
srcLight="https://payloadcms.com/images/docs/fields/array.png"
srcDark="https://payloadcms.com/images/docs/fields/array-dark.png"
alt="Array field with two Rows in Payload admin panel"
caption="Admin panel screenshot of an Array field with two Rows"
/>
**Example uses:**
- A "slider" with an image ([upload field](/docs/fields/upload)) and a caption ([text field](/docs/fields/text))
- Navigational structures where editors can specify nav items containing
pages ([relationship field](/docs/fields/relationship)), an "open in new tab" [checkbox field](/docs/fields/checkbox)
- Event agenda "timeslots" where you need to specify start & end time ([date field](/docs/fields/date)),
label ([text field](/docs/fields/text)), and Learn More page [relationship](/docs/fields/relationship)
- Navigational structures where editors can specify nav items containing pages ([relationship field](/docs/fields/relationship)), an "open in new tab" [checkbox field](/docs/fields/checkbox)
- Event agenda "timeslots" where you need to specify start & end time ([date field](/docs/fields/date)), label ([text field](/docs/fields/text)), and Learn More page [relationship](/docs/fields/relationship)
### Config
| Option | Description |
|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) |
| **`label`** | Text used as the heading in the Admin panel or an object with keys for each language. Auto-generated from name if not defined. |
| **`fields`** \* | Array of field types to correspond to each row of the Array. |
@@ -47,19 +45,16 @@ caption="Admin panel screenshot of an Array field with two Rows"
| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
| **`interfaceName`** | Create a top level, reusable [Typescript interface](/docs/typescript/generating-types#custom-field-interfaces) & [GraphQL type](/docs/graphql/graphql-schema#custom-field-schemas). |
| **`dbName`** | Custom table name for the field when using SQL database adapter ([Postgres](/docs/database/postgres)). Auto-generated from name if not defined. |
_\* An asterisk denotes that a property is required._
### Admin Config
In addition to the default [field admin config](/docs/fields/overview#admin-config), you can adjust the following
properties:
In addition to the default [field admin config](/docs/fields/overview#admin-config), you can adjust the following properties:
| Option | Description |
|---------------------------|----------------------------------------------------------------------------------------------------------------------|
| ------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| **`initCollapsed`** | Set the initial collapsed state |
| **`isSortable`** | Disable array order sorting by setting this value to `false` |
| **`components.RowLabel`** | Function or React component to be rendered as the label on the array row. Receives `({ data, index, path })` as args |
### Example
@@ -68,7 +63,6 @@ properties:
```ts
import { CollectionConfig } from 'payload/types'
import { RowLabelArgs } from 'payload/dist/admin/components/forms/RowLabel/types'
export const ExampleCollection: CollectionConfig = {
slug: 'example-collection',
@@ -103,7 +97,7 @@ export const ExampleCollection: CollectionConfig = {
],
admin: {
components: {
RowLabel: ({ data, index }: RowLabelArgs) => {
RowLabel: ({ data, index }) => {
return data?.title || `Slide ${String(index).padStart(2, '0')}`
},
},

View File

@@ -7,30 +7,29 @@ keywords: blocks, fields, config, configuration, documentation, Content Manageme
---
<Banner>
The Blocks field type is **incredibly powerful** and can be used as a
*layout builder* as well as to define any other flexible content model you can think of. It
The Blocks field type is <strong>incredibly powerful</strong> and can be used as a{' '}
<em>layout builder</em> as well as to define any other flexible content model you can think of. It
stores an array of objects, where each object must match the shape of one of your provided block
configs.
</Banner>
<LightDarkImage
srcLight="https://payloadcms.com/images/docs/fields/blocks.png"
srcDark="https://payloadcms.com/images/docs/fields/blocks-dark.png"
alt="Admin panel screenshot of add Blocks drawer view"
caption="Admin panel screenshot of add Blocks drawer view"
srcLight="https://payloadcms.com/images/docs/fields/blocks.png"
srcDark="https://payloadcms.com/images/docs/fields/blocks-dark.png"
alt="Admin panel screenshot of add Blocks drawer view"
caption="Admin panel screenshot of add Blocks drawer view"
/>
**Example uses:**
- A layout builder tool that grants editors to design highly customizable page or post layouts. Blocks could include
configs such as `Quote`, `CallToAction`, `Slider`, `Content`, `Gallery`, or others.
- A layout builder tool that grants editors to design highly customizable page or post layouts. Blocks could include configs such as `Quote`, `CallToAction`, `Slider`, `Content`, `Gallery`, or others.
- A form builder tool where available block configs might be `Text`, `Select`, or `Checkbox`.
- Virtual event agenda "timeslots" where a timeslot could either be a `Break`, a `Presentation`, or a `BreakoutSession`.
### Field config
| Option | Description |
|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) |
| **`label`** | Text used as the heading in the Admin panel or an object with keys for each language. Auto-generated from name if not defined. |
| **`blocks`** \* | Array of [block configs](/docs/fields/blocks#block-configs) to be made available to this field. |
@@ -52,21 +51,19 @@ _\* An asterisk denotes that a property is required._
### Admin Config
In addition to the default [field admin config](/docs/fields/overview#admin-config), you can adjust the following
properties:
In addition to the default [field admin config](/docs/fields/overview#admin-config), you can adjust the following properties:
| Option | Description |
|---------------------|---------------------------------|
| ------------------- | ------------------------------- |
| **`initCollapsed`** | Set the initial collapsed state |
| **`isSortable`** | Disable block order sorting by setting this value to `false` |
### Block configs
Blocks are defined as separate configs of their own.
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
Best practice is to define each block config in its own file, and then import them into your
Blocks field as necessary. This way each block config can be easily shared between fields. For
instance, using the "layout builder" example, you might want to feature a few of the same blocks
@@ -75,7 +72,7 @@ Blocks are defined as separate configs of their own.
</Banner>
| Option | Description |
|----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`slug`** \* | Identifier for this block type. Will be saved on each block as the `blockType` property. |
| **`fields`** \* | Array of fields to be stored in this block. |
| **`labels`** | Customize the block labels that appear in the Admin dashboard. Auto-generated from slug if not defined. |
@@ -83,8 +80,7 @@ Blocks are defined as separate configs of their own.
| **`imageAltText`** | Customize this block's image thumbnail alt text. |
| **`interfaceName`** | Create a top level, reusable [Typescript interface](/docs/typescript/generating-types#custom-field-interfaces) & [GraphQL type](/docs/graphql/graphql-schema#custom-field-schemas). |
| **`graphQL.singularName`** | Text to use for the GraphQL schema name. Auto-generated from slug if not defined. NOTE: this is set for deprecation, prefer `interfaceName`. |
| **`dbName`** | Custom table name for this block type when using SQL database adapter ([Postgres](/docs/database/postgres)). Auto-generated from slug if not defined.
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
#### Auto-generated data per block
@@ -96,8 +92,7 @@ The `blockType` is saved as the slug of the block that has been selected.
**`blockName`**
The Admin panel provides each block with a `blockName` field which optionally allows editors to label their blocks for
better editability and readability.
The Admin panel provides each block with a `blockName` field which optionally allows editors to label their blocks for better editability and readability.
### Example
@@ -144,8 +139,7 @@ export const ExampleCollection: CollectionConfig = {
### TypeScript
As you build your own Block configs, you might want to store them in separate files but retain typing accordingly. To do
so, you can import and use Payload's `Block` type:
As you build your own Block configs, you might want to store them in separate files but retain typing accordingly. To do so, you can import and use Payload's `Block` type:
```ts
import type { Block } from 'payload/types'

View File

@@ -4,7 +4,7 @@ label: JSON
order: 50
desc: The JSON field type will store any string in the Database. Learn how to use JSON fields, see examples and options.
keywords: json, jsonSchema, schema, validation, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
keywords: json, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
<Banner>
@@ -30,7 +30,6 @@ This field uses the `monaco-react` editor syntax highlighting.
| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. |
| **`index`** | Build an [index](/docs/database/overview) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. |
| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) |
| **`jsonSchema`** | Provide a JSON schema that will be used for validation. [JSON schemas](https://json-schema.org/learn/getting-started-step-by-step) |
| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. |
| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) |
| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) |
@@ -53,7 +52,7 @@ In addition to the default [field admin config](/docs/fields/overview#admin-conf
### Example
`collections/ExampleCollection.ts`
`collections/ExampleCollection.ts
```ts
import { CollectionConfig } from 'payload/types'
@@ -69,68 +68,3 @@ export const ExampleCollection: CollectionConfig = {
],
}
```
### JSON Schema Validation
Payload JSON fields fully support the [JSON schema](https://json-schema.org/) standard. By providing a schema in your field config, the editor will be guided in the admin UI, getting typeahead for properties and their formats automatically. When the document is saved, the default validation will prevent saving any invalid data in the field according to the schema in your config.
If you only provide a URL to a schema, Payload will fetch the desired schema if it is publicly available. If not, it is recommended to add the schema directly to your config or import it from another file so that it can be implemented consistently in your project.
#### Local JSON Schema
`collections/ExampleCollection.ts`
```ts
import { CollectionConfig } from 'payload/types'
export const ExampleCollection: CollectionConfig = {
slug: 'example-collection',
fields: [
{
name: 'customerJSON', // required
type: 'json', // required
jsonSchema: {
uri: 'a://b/foo.json', // required
fileMatch: ['a://b/foo.json'], // required
schema: {
type: 'object',
properties: {
foo: {
enum: ['bar', 'foobar'],
}
},
},
},
},
],
}
// {"foo": "bar"} or {"foo": "foobar"} - ok
// Attempting to create {"foo": "not-bar"} will throw an error
```
#### Remote JSON Schema
`collections/ExampleCollection.ts`
```ts
import { CollectionConfig } from 'payload/types'
export const ExampleCollection: CollectionConfig = {
slug: 'example-collection',
fields: [
{
name: 'customerJSON', // required
type: 'json', // required
jsonSchema: {
uri: 'https://example.com/customer.schema.json', // required
fileMatch: ['https://example.com/customer.schema.json'], // required
},
},
],
}
// If 'https://example.com/customer.schema.json' has a JSON schema
// {"foo": "bar"} or {"foo": "foobar"} - ok
// Attempting to create {"foo": "not-bar"} will throw an error
```

View File

@@ -70,16 +70,7 @@ In addition to being able to define access control on a document-level, you can
### Field names
All fields require a `name` property. This is the key that will be used to store and retrieve the field's value in the database. This property must be unique within the Collection, Global, or nested group that it is defined in.
Payload reserves various field names for internal use. Using reserved field names will result in your field being sanitized from the config.
The following field names are forbidden and cannot be used:
- `__v`
- `salt`
- `hash`
- `file`
Some fields use their `name` property as a unique identifier to store and retrieve from the database. `__v`, `salt`, and `hash` are all reserved field names which are sanitized from Payload's config and cannot be used.
### Validation
@@ -154,7 +145,6 @@ const field: Field = {
Collections ID fields are generated automatically by default. An explicit `id` field can be declared in the `fields` array to override this behavior.
Users are then required to provide a custom ID value when creating a record through the Admin UI or API.
Valid ID types are `number` and `text`.
When using the text value, remember that it shouldn't contain the / (slash) sign, as the API will read it separately and this can result in unexpected behavior.
Example:
@@ -173,21 +163,19 @@ Example:
In addition to each field's base configuration, you can define specific traits and properties for fields that only have effect on how they are rendered in the Admin panel. The following properties are available for all fields within the `admin` property:
| Option | Description |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `condition` | You can programmatically show / hide fields based on what other fields are doing. [Click here](#conditional-logic) for more info. |
| `components` | All field components can be completely and easily swapped out for custom components that you define. [Click here](#custom-components) for more info. |
| `description` | Helper text to display with the field to provide more information for the editor user. [Click here](#description) for more info. |
| `position` | Specify if the field should be rendered in the sidebar by defining `position: 'sidebar'`. |
| `width` | Restrict the width of a field. you can pass any string-based value here, be it pixels, percentages, etc. This property is especially useful when fields are nested within a `Row` type where they can be organized horizontally. |
| `style` | Attach raw CSS style properties to the root DOM element of a field. |
| `className` | Attach a CSS class name to the root DOM element of a field. |
| `readOnly` | Setting a field to `readOnly` has no effect on the API whatsoever but disables the admin component's editability to prevent editors from modifying the field's value. |
| `disabled` | If a field is `disabled`, it is completely omitted from the Admin panel. |
| `disableBulkEdit` | Set `disableBulkEdit` to `true` to prevent fields from appearing in the select options when making edits for multiple documents. |
| `disableListColumn` | Set `disableListColumn` to `true` to prevent fields from appearing in the list view column selector. |
| `disableListFilter` | Set `disableListFilter` to `true` to prevent fields from appearing in the list view filter options. |
| `hidden` | Setting a field's `hidden` property on its `admin` config will transform it into a `hidden` input type. Its value will still submit with the Admin panel's requests, but the field itself will not be visible to editors. |
| Option | Description |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `condition` | You can programmatically show / hide fields based on what other fields are doing. [Click here](#conditional-logic) for more info. |
| `components` | All field components can be completely and easily swapped out for custom components that you define. [Click here](#custom-components) for more info. |
| `description` | Helper text to display with the field to provide more information for the editor user. [Click here](#description) for more info. |
| `position` | Specify if the field should be rendered in the sidebar by defining `position: 'sidebar'`. |
| `width` | Restrict the width of a field. you can pass any string-based value here, be it pixels, percentages, etc. This property is especially useful when fields are nested within a `Row` type where they can be organized horizontally. |
| `style` | Attach raw CSS style properties to the root DOM element of a field. |
| `className` | Attach a CSS class name to the root DOM element of a field. |
| `readOnly` | Setting a field to `readOnly` has no effect on the API whatsoever but disables the admin component's editability to prevent editors from modifying the field's value. |
| `disabled` | If a field is `disabled`, it is completely omitted from the Admin panel. |
| `disableBulkEdit` | Set `disableBulkEdit` to `true` to prevent fields from appearing in the select options when making edits for multiple documents. |
| `hidden` | Setting a field's `hidden` property on its `admin` config will transform it into a `hidden` input type. Its value will still submit with the Admin panel's requests, but the field itself will not be visible to editors. |
### Custom components

View File

@@ -13,7 +13,7 @@ keywords: point, geolocation, geospatial, geojson, 2dsphere, config, configurati
</Banner>
<Banner type="warning">
**Note:** The Point field type is currently only supported in MongoDB.
<strong>Note:</strong> The Point field type is currently only supported in MongoDB.
</Banner>
<LightDarkImage
@@ -47,7 +47,7 @@ The data structure in the database matches the GeoJSON structure to represent po
_\* An asterisk denotes that a property is required._
<Banner type="warning">
**Note:** The Point field type is currently only supported in MongoDB.
<strong>Note:</strong> The Point field type is currently only supported in MongoDB.
</Banner>
### Example

View File

@@ -36,13 +36,12 @@ keywords: radio, fields, config, configuration, documentation, Content Managemen
| **`required`** | Require this field to have a value. |
| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
| **`enumName`** | Custom enum name for this field when using SQL database adapter ([Postgres](/docs/database/postgres)). Auto-generated from name if not defined.
_\* An asterisk denotes that a property is required._
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
Option values should be strings that do not contain hyphens or special characters due to GraphQL
enumeration naming constraints. Underscores are allowed. If you determine you need your option
values to be non-strings or contain special characters, they will be formatted accordingly before

View File

@@ -52,8 +52,8 @@ caption="Admin panel screenshot of a Relationship field"
_\* An asterisk denotes that a property is required._
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
The [Depth](/docs/getting-started/concepts#depth) parameter can be used to automatically populate
related documents that are returned by the API.
</Banner>
@@ -173,12 +173,12 @@ export const ExampleCollection: CollectionConfig = {
You can learn more about writing queries [here](/docs/queries/overview).
<Banner type="warning">
**Note:**
When a relationship field has both **filterOptions** and a custom{' '}
**validate** function, the api will not validate **filterOptions**{' '}
<strong>Note:</strong>
<br />
When a relationship field has both <strong>filterOptions</strong> and a custom{' '}
<strong>validate</strong> function, the api will not validate <strong>filterOptions</strong>{' '}
unless you call the default relationship field validation function imported from{' '}
**payload/fields/validations** in your validate function.
<strong>payload/fields/validations</strong> in your validate function.
</Banner>
### How the data is saved
@@ -360,7 +360,7 @@ However, you **cannot** query on any field values within the related document.
Since we are referencing multiple collections, the field you are querying on may not exist and break the query.
<Banner type="warning">
**Note:**
You **cannot** query on a field within a polymorphic relationship as you would with a non-polymorphic relationship.
<strong>Note:</strong>
<br />
You <strong>cannot</strong> query on a field within a polymorphic relationship as you would with a non-polymorphic relationship.
</Banner>

View File

@@ -18,7 +18,7 @@ keywords: rich text, fields, config, configuration, documentation, Content Manag
caption="Admin panel screenshot of a Rich Text field"
/>
Payload's rich text field is built on an "adapter pattern" which lets you specify which rich text editor you'd like to use.
Payload's rich text field is built on an "adapter pattern" which lets you specify which rich text editor you'd like to use.
Right now, Payload is officially supporting two rich text editors:
@@ -26,7 +26,7 @@ Right now, Payload is officially supporting two rich text editors:
2. [Lexical](/docs/rich-text/lexical) - beta, where things will be moving
<Banner type="success">
**Consistent with Payload's goal of making you learn as little of Payload as possible, customizing and using the Rich Text Editor does not involve learning how to develop for a __Payload__ rich text editor.** Instead, you can invest your time and effort into learning the underlying open-source tools that will allow you to apply your learnings elsewhere as well.
<strong>Consistent with Payload's goal of making you learn as little of Payload as possible, customizing and using the Rich Text Editor does not involve learning how to develop for a <em>Payload</em> rich text editor.</strong> Instead, you can invest your time and effort into learning the underlying open-source tools that will allow you to apply your learnings elsewhere as well.
</Banner>
### Config
@@ -67,4 +67,4 @@ Override the default text direction of the Admin panel for this field. Set to `t
### Editor-specific options
For a ton more editor-specific options, including how to build custom rich text elements directly into your editor, take a look at either the [Slate docs](/docs/rich-text/slate) or the [Lexical docs](/docs/rich-text/lexical) depending on which editor you're using.
For a ton more editor-specific options, including how to build custom rich text elements directly into your editor, take a look at either the [Slate docs](/docs/rich-text/slate) or the [Lexical docs](/docs/rich-text/lexical) depending on which editor you're using.

View File

@@ -12,40 +12,38 @@ keywords: select, multi-select, fields, config, configuration, documentation, Co
</Banner>
<LightDarkImage
srcLight="https://payloadcms.com/images/docs/fields/select.png"
srcDark="https://payloadcms.com/images/docs/fields/select-dark.png"
alt="Shows a Select field in the Payload admin panel"
caption="Admin panel screenshot of a Select field"
srcLight="https://payloadcms.com/images/docs/fields/select.png"
srcDark="https://payloadcms.com/images/docs/fields/select-dark.png"
alt="Shows a Select field in the Payload admin panel"
caption="Admin panel screenshot of a Select field"
/>
### Config
| Option | Description |
|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) |
| **`options`** \* | Array of options to allow the field to store. Can either be an array of strings, or an array of objects containing a `label` string and a `value` string. |
| **`hasMany`** | Boolean when, if set to `true`, allows this field to have many selections instead of only one. |
| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. |
| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. |
| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) |
| **`index`** | Build an [index](/docs/database/overview) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. |
| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. |
| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) |
| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) |
| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. |
| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) |
| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. |
| **`required`** | Require this field to have a value. |
| **`admin`** | Admin-specific configuration. See the [default field admin config](/docs/fields/overview#admin-config) for more details. |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
| **`enumName`** | Custom enum name for this field when using SQL database adapter ([Postgres](/docs/database/postgres)). Auto-generated from name if not defined. |
| **`dbName`** | Custom table name (if `hasMany` set to `true`) for this field when using SQL database adapter ([Postgres](/docs/database/postgres)). Auto-generated from name if not defined. |
| Option | Description |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) |
| **`options`** \* | Array of options to allow the field to store. Can either be an array of strings, or an array of objects containing a `label` string and a `value` string. |
| **`hasMany`** | Boolean when, if set to `true`, allows this field to have many selections instead of only one. |
| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. |
| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. |
| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) |
| **`index`** | Build an [index](/docs/database/overview) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. |
| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. |
| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) |
| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) |
| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. |
| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) |
| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. |
| **`required`** | Require this field to have a value. |
| **`admin`** | Admin-specific configuration. See the [default field admin config](/docs/fields/overview#admin-config) for more details. |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
_\* An asterisk denotes that a property is required._
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
Option values should be strings that do not contain hyphens or special characters due to GraphQL
enumeration naming constraints. Underscores are allowed. If you determine you need your option
values to be non-strings or contain special characters, they will be formatted accordingly before
@@ -54,8 +52,7 @@ _\* An asterisk denotes that a property is required._
### Admin config
In addition to the default [field admin config](/docs/fields/overview#admin-config), the Select field type also allows
for the following admin-specific properties:
In addition to the default [field admin config](/docs/fields/overview#admin-config), the Select field type also allows for the following admin-specific properties:
**`isClearable`**
@@ -63,8 +60,7 @@ Set to `true` if you'd like this field to be clearable within the Admin UI.
**`isSortable`**
Set to `true` if you'd like this field to be sortable within the Admin UI using drag and drop. (Only works
when `hasMany` is set to `true`)
Set to `true` if you'd like this field to be sortable within the Admin UI using drag and drop. (Only works when `hasMany` is set to `true`)
### Example
@@ -105,8 +101,7 @@ export const ExampleCollection: CollectionConfig = {
### Customization
The Select field UI component can be customized by providing a custom React component to the `components` object in the
Base config.
The Select field UI component can be customized by providing a custom React component to the `components` object in the Base config.
```ts
export const CustomSelectField: Field = {
@@ -161,33 +156,27 @@ export const CustomSelectComponent: React.FC<CustomSelectProps> = ({ path, optio
return (
<div>
<label className = "field-label" >
Custom
Select
< /label>
< SelectInput
path = { path }
name = { path }
options = { adjustedOptions }
value = { value }
onChange = {(e)
=>
setValue(e.value)
}
/>
< /div>
)
<label className="field-label">
Custom Select
</label>
<SelectInput
path={path}
name={path}
options={adjustedOptions}
value={value}
onChange={(e) => setValue(e.value)}
/>
</div>
)
}
```
If you are looking to create a dynamic select field, the following tutorial will walk you through the process of
creating a custom select field that fetches its options from an external API.
If you are looking to create a dynamic select field, the following tutorial will walk you through the process of creating a custom select field that fetches its options from an external API.
<VideoDrawer
id='Efn9OxSjA6Y'
label='How to Create a Custom Select Field'
drawerTitle='How to Create a Custom Select Field: A Step-by-Step Guide'
id='Efn9OxSjA6Y'
label='How to Create a Custom Select Field'
drawerTitle='How to Create a Custom Select Field: A Step-by-Step Guide'
/>
If you want to learn more about custom components check out
the [Admin > Custom Component](/docs/admin/components#field-component) docs.
If you want to learn more about custom components check out the [Admin > Custom Component](/docs/admin/components#field-component) docs.

View File

@@ -31,7 +31,6 @@ With this field, you can also inject custom `Cell` components that appear as add
| **`label`** | Human-readable label for this UI field. |
| **`admin.components.Field`** \* | React component to be rendered for this field within the Edit view. [More](/docs/admin/components/#field-component) |
| **`admin.components.Cell`** | React component to be rendered as a Cell within collection List views. [More](/docs/admin/components/#field-component) |
| **`admin.disableListColumn`** | Set `disableListColumn` to `true` to prevent the UI field from appearing in the list view column selector. |
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
_\* An asterisk denotes that a property is required._

View File

@@ -12,8 +12,8 @@ keywords: upload, images media, fields, config, configuration, documentation, Co
</Banner>
<Banner type="warning">
**Important:**
<strong>Important:</strong>
<br />
To use this field, you need to have a Collection configured to allow Uploads. For more
information, [click here](/docs/upload/overview) to read about how to enable Uploads on a
collection by collection basis.
@@ -37,7 +37,7 @@ caption="Admin panel screenshot of an Upload field"
| Option | Description |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) |
| **`*relationTo`** \* | Provide a single collection `slug` to allow this field to accept a relation to. **Note: the related collection must be configured to support Uploads.** |
| **`*relationTo`** \* | Provide a single collection `slug` to allow this field to accept a relation to. <strong>Note: the related collection must be configured to support Uploads.</strong> |
| **`filterOptions`** | A query to filter which options appear in the UI and validate against. [More](#filtering-upload-options). |
| **`maxDepth`** | Sets a number limit on iterations of related documents to populate when queried. [Depth](/docs/getting-started/concepts#depth) |
| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. |
@@ -49,7 +49,6 @@ caption="Admin panel screenshot of an Upload field"
| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) |
| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. |
| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) |
| **`displayPreview`** | Enable displaying preview of the uploaded file. Overrides related Collection's `displayPreview` option. [More](/docs/upload/overview#collection-upload-options). |
| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. |
| **`required`** | Require this field to have a value. |
| **`admin`** | Admin-specific configuration. See the [default field admin config](/docs/fields/overview#admin-config) for more details. |
@@ -110,10 +109,10 @@ const uploadField = {
You can learn more about writing queries [here](/docs/queries/overview).
<Banner type="warning">
**Note:**
When an upload field has both **filterOptions** and a custom{' '}
**validate** function, the api will not validate **filterOptions**{' '}
<strong>Note:</strong>
<br />
When an upload field has both <strong>filterOptions</strong> and a custom{' '}
<strong>validate</strong> function, the api will not validate <strong>filterOptions</strong>{' '}
unless you call the default upload field validation function imported from{' '}
**payload/fields/validations** in your validate function.
<strong>payload/fields/validations</strong> in your validate function.
</Banner>

View File

@@ -135,9 +135,9 @@ If you were to query the Posts endpoint at, say, `http://localhost:3000/api/post
}
```
Notice how the `post.author` is fully populated, but `post.author.department` is left as a document ID? That's because the User collection counted as the first level of `depth` and got populated—but then prevented any further populations from taking place.
Notice how the `user.author` is fully populated, but `user.author.department` is left as a document ID? That's because the User collection counted as the first level of `depth` and got populated—but then prevented any further populations from taking place.
To populate `post.author.department` in it's entirety you could specify `?depth=2` or _higher_.
To populate `user.author.department` in it's entirety you could specify `?depth=2` or _higher_.
```
// ?depth=2
@@ -157,8 +157,8 @@ To populate `post.author.department` in it's entirety you could specify `?depth=
```
<Banner type="warning">
**Note:**
<strong>Note:</strong>
<br />
When access control on collections prevents relationship fields from populating, the API response
will contain the relationship id instead of the full document.
</Banner>

View File

@@ -11,7 +11,7 @@ keywords: documentation, getting started, guide, Content Management System, cms,
Payload requires the following software:
- Any JavaScript package manager (Yarn, NPM, or pnpm)
- Node.js version 16+
- Node.js version 18+
- Any [compatible database](/docs/database/overview) (MongoDB or Postgres)
<Banner type="warning">

View File

@@ -15,8 +15,8 @@ Payload is a headless CMS and application framework. It's meant to provide a mas
development process, but importantly, stay out of your way as your apps get more complex.
<Banner type="success">
**Payload 2.0 has been released!**
<strong>Payload 2.0 has been released!</strong>
<br />
Includes Postgres support, Live Preview, Lexical Editor, and more. <a href="/blog/payload-2-0">Read the announcement</a>.
</Banner>

View File

@@ -72,8 +72,8 @@ The above example outputs all your definitions to a file relative from your payl
#### Adding an NPM script
<Banner type="warning">
**Important**
<strong>Important</strong>
<br />
Payload needs to be able to find your config to generate your GraphQL schema.
</Banner>

View File

@@ -43,12 +43,11 @@ export const PublicUser: CollectionConfig = {
**Payload will automatically open up the following queries:**
| Query Name | Operation |
| ------------------ | ------------------- |
| **`PublicUser`** | `findByID` |
| **`PublicUsers`** | `find` |
| **`countPublicUsers`** | `count` |
| **`mePublicUser`** | `me` auth operation |
| Query Name | Operation |
| ------------------ | ------------------- |
| **`PublicUser`** | `findByID` |
| **`PublicUsers`** | `find` |
| **`mePublicUser`** | `me` auth operation |
**And the following mutations:**
@@ -116,8 +115,8 @@ GraphQL Playground is enabled by default for development purposes, but disabled
You can even log in using the `login[collection-singular-label-here]` mutation to use the Playground as an authenticated user.
<Banner type="success">
**Tip:**
<strong>Tip:</strong>
<br />
To see more regarding how the above queries and mutations are used, visit your GraphQL playground
(by default at
[http://localhost:3000/api/graphql-playground](http://localhost:3000/api/graphql-playground))

View File

@@ -26,8 +26,6 @@ Additionally, `auth`-enabled collections feature the following hooks:
- [afterRefresh](#afterrefresh)
- [afterMe](#afterme)
- [afterForgotPassword](#afterforgotpassword)
- [refresh](#refresh)
- [me](#me)
## Config
@@ -61,8 +59,6 @@ export const ExampleHooks: CollectionConfig = {
afterRefresh: [(args) => {...}],
afterMe: [(args) => {...}],
afterForgotPassword: [(args) => {...}],
refresh: [(args) => {...}],
me: [(args) => {...}],
},
}
```
@@ -296,37 +292,13 @@ For auth-enabled Collections, this hook runs after successful `forgotPassword` o
```ts
import { CollectionAfterForgotPasswordHook } from 'payload/types'
const afterForgotPasswordHook: CollectionAfterForgotPasswordHook = async ({
args, // arguments passed into the operation
context,
collection, // The collection which this hook is being run on
}) => {...}
```
### refresh
For auth-enabled Collections, this hook allows you to optionally replace the default behavior of the `refresh` operation with your own. If you optionally return a value from your hook, the operation will not perform its own logic and continue.
```ts
import type { CollectionRefreshHook } from 'payload/types'
const myRefreshHook: CollectionRefreshHook = async ({
args, // arguments passed into the `refresh` operation
user, // the user as queried from the database
}) => {...}
```
### me
For auth-enabled Collections, this hook allows you to optionally replace the default behavior of the `me` operation with your own. If you optionally return a value from your hook, the operation will not perform its own logic and continue.
```ts
import type { CollectionMeHook } from 'payload/types'
const meHook: CollectionMeHook = async ({
args, // arguments passed into the `me` operation
user, // the user as queried from the database
}) => {...}
const afterLoginHook: CollectionAfterForgotPasswordHook = async ({
req, // full express request
user, // user being logged in
token, // user token
}) => {
return user
}
```
## TypeScript
@@ -349,7 +321,5 @@ import type {
CollectionAfterRefreshHook,
CollectionAfterMeHook,
CollectionAfterForgotPasswordHook,
CollectionRefreshHook,
CollectionMeHook,
} from 'payload/types'
```

Some files were not shown because too many files have changed in this diff Show More