Compare commits

..

520 Commits

Author SHA1 Message Date
James
4432031341 chore(release): v0.10.10 2021-10-07 11:30:23 -04:00
Jarrod Flesch
932628bc14 Merge branch 'master' of github.com:payloadcms/payload 2021-10-07 10:58:39 -04:00
Jarrod Flesch
27117292f3 fix: deepObjectCopy returns Date object instead of empty object 2021-10-07 10:58:33 -04:00
James
bbdeebd1d4 chore(release): v0.10.9 2021-10-05 18:13:04 -04:00
Jarrod Flesch
5056e18734 Merge branch 'master' of github.com:payloadcms/payload 2021-10-05 18:05:53 -04:00
Jarrod Flesch
e3229c55f3 fix: ensures field read access within login operation has id 2021-10-05 18:05:48 -04:00
James
78c3ab6c44 chore(release): v0.10.8 2021-10-04 18:07:57 -04:00
Jarrod Flesch
ffab6c46c1 fix: ensures update field access control receives id 2021-10-04 18:05:55 -04:00
James
8d6372ee4b chore(release): v0.10.7 2021-10-04 11:26:58 -04:00
James
ad2b47e725 docs: clarity 2021-10-04 11:25:12 -04:00
James
bba1f1ff62 Merge branch 'feat/index-sortable-fields' of github.com:payloadcms/payload 2021-10-04 11:22:13 -04:00
James
0a5a6071f0 chore: renames StrictPolicies to StrictAccess 2021-10-04 11:21:40 -04:00
James
1c69441f17 chore: adds tests for relationship population 2021-10-04 11:19:03 -04:00
James
a20110974d fix: ensures non populated relationships still retain IDs 2021-10-04 11:07:47 -04:00
Jarrod Flesch
d5d774877e Merge branch 'master' of github.com:payloadcms/payload into fix/relationship-access-missing-id 2021-10-01 17:08:37 -04:00
Jarrod Flesch
470d4345f9 fix: ensures relationship field access control receives id 2021-10-01 17:07:26 -04:00
Dan Ribbens
ad097820bf feat: add indexSortableField option to create indexes for sortable fields on all collections 2021-09-30 16:05:47 -04:00
James
fda9356749 chore(release): v0.10.6 2021-09-30 12:41:01 -04:00
James
60ff7afee0 Merge branch 'master' of github.com:payloadcms/payload 2021-09-30 12:36:06 -04:00
James
f42205307e fix: relationship + new slate incompatibility 2021-09-30 12:36:01 -04:00
Dan Ribbens
d498e37083 Merge pull request #330 from payloadcms/fix/debug-config-option
fix: allow debug in payload config
2021-09-28 15:54:25 -04:00
James Mikrut
f06808ac80 Update CHANGELOG.md 2021-09-28 14:38:04 -04:00
James
08b8f3b40a chore(release): v0.10.5 2021-09-28 14:36:58 -04:00
James
2e64fcf92e docs: rich text upload element 2021-09-28 14:32:34 -04:00
James
b4334b2339 chore: merge 2021-09-28 14:25:40 -04:00
James
15970550f7 fix: ensures that fields within non-required groups are correctly not required 2021-09-28 14:22:59 -04:00
James
08db431c0c feat: updates slate, finishes rte upload 2021-09-28 13:52:28 -04:00
Dan Ribbens
e0020bfc16 Merge pull request #329 from payloadcms/fix/localized-indexes
fix: index creation on localized field parent
2021-09-27 14:49:21 -04:00
Dan Ribbens
23e81971eb fix: index creation on localized field parent 2021-09-27 14:40:01 -04:00
Dan Ribbens
004ac8dd8f Merge pull request #328 from payloadcms/fix/query-estimate-count
fix: pagination estimatedCount limited to near query
2021-09-27 14:33:35 -04:00
Dan Ribbens
73bd69870c fix: pagination estimatedCount limited to near query 2021-09-27 13:12:00 -04:00
James
6f3edf9fbb feat: adds UploadGallery to rich text upload 2021-09-27 11:25:26 -04:00
James
85c6c303d5 feat: progress to rich text upload 2021-09-24 12:39:56 -04:00
James
aa769500c9 feat: adds rich text editor upload element 2021-09-23 20:42:44 -04:00
Dan Ribbens
65bf13d7c1 fix: allow debug in payload config 2021-09-23 14:56:21 -04:00
James Mikrut
dece5e68f3 Update CHANGELOG.md 2021-09-22 17:08:55 -04:00
James
9247d2986a chore(release): v0.10.4 2021-09-22 16:41:15 -04:00
James
8661115283 fix: allows image resizing if either width or height is larger 2021-09-22 16:38:30 -04:00
James
df36a6e7e6 chore: revision to overwriteExistingFields 2021-09-22 13:23:25 -04:00
James
dbbff4cfa4 feat: allows local update api to replace existing files with newly uploaded ones 2021-09-22 12:05:09 -04:00
James
3c65f63fef chore: changelog 2021-09-20 21:29:27 -04:00
James
c9cbd1cfd5 chore: bumps sass and node-sass 2021-09-20 21:15:49 -04:00
James
8a890fdc15 feat: adjusts empty group population to be virtual only 2021-09-15 18:06:09 -04:00
James
42ca800c88 Merge branch 'master' of github.com:payloadcms/payload 2021-09-15 17:48:50 -04:00
James
39a8e2c20f feat: defaults empty group fields to empty object 2021-09-15 17:48:35 -04:00
James
e39ece4823 feat: defaults empty group fields to empty object 2021-09-15 16:47:43 -04:00
James
8aa9347a84 Merge branch 'master' of github.com:payloadcms/payload 2021-09-15 16:39:53 -04:00
James
901ad498b4 feat: performance improvement while saving large docs 2021-09-15 16:39:43 -04:00
Dan Ribbens
c676631661 Merge pull request #315 from payloadcms/docs/fix-collection-hook-links
docs: fix links in collection hooks
2021-09-15 14:34:45 -04:00
Dan Ribbens
0171550528 test: check array and group items have id 2021-09-15 14:30:52 -04:00
James
7fc8f6dd3c docs: corrects refresh-token rest route 2021-09-15 13:46:55 -04:00
James
02e7fe3f1f fix: properly types optional req in local findByID 2021-09-15 13:46:08 -04:00
James
2b8f925e81 fix: array objects now properly save IDs 2021-09-15 13:45:49 -04:00
James
7e8df100bb feat: exposes Pill component for re-use 2021-09-13 12:56:03 -04:00
Dan Ribbens
d12bb5043a docs: fix links in collection hooks 2021-09-13 12:17:25 -04:00
James
03c0435e3b fix: date field error message position 2021-09-12 19:47:33 -04:00
Elliot DeNolf
fc844270d9 chore: update beta release script 2021-09-12 14:44:59 -04:00
Dan Ribbens
048103ccf2 chore(release): v0.10.0 2021-09-09 16:03:23 -04:00
Dan Ribbens
0334e9bc21 Merge pull request #313 from payloadcms/feat/custom-id
Feat/custom-id
2021-09-09 15:56:59 -04:00
Dan Ribbens
c7558d8652 fix: sanitize custom id number types 2021-09-09 15:46:04 -04:00
Dan Ribbens
4a0bb7bf74 Merge branch 'feat/custom-id' of github.com:payloadcms/payload into feat/custom-id 2021-09-09 11:56:10 -04:00
Dan Ribbens
fe1dc0b191 feat: add config validation for collections with custom id 2021-09-09 11:55:40 -04:00
Dan Ribbens
d0aaf4a412 feat: add config validation for collections with custom id 2021-09-09 11:24:50 -04:00
Jean-Baptiste
4b70a1225f feat: replace the collection idType option with an explicit id field 2021-09-09 11:24:47 -04:00
Jean-Baptiste
29529b2c56 fix: improve id type semantic and restrict possible types to text and number 2021-09-09 11:21:55 -04:00
Dan Ribbens
bc2a6e1575 feat: graphql support for custom id types 2021-09-09 11:20:06 -04:00
Dan Ribbens
114dc1b3fb fix: sort id columns 2021-09-09 11:20:06 -04:00
Dan Ribbens
dc96b90cba fix: admin UI collection id is required 2021-09-09 11:20:06 -04:00
Jean-Baptiste
af5f931340 update docs with id option 2021-09-09 11:20:06 -04:00
Jean-Baptiste
b3e41ae76d update assessment for consistence 2021-09-09 11:20:06 -04:00
Jean-Baptiste
3cc921acc9 feat: support custom ids 2021-09-09 11:20:02 -04:00
James Mikrut
3ffa480399 Merge pull request #308 from payloadcms/feat/field-type-point
Feat/field type point
2021-08-31 13:32:18 -04:00
James
64ad6a30a5 feat: frontend polish to point field 2021-08-31 13:29:17 -04:00
James
c878400876 Merge branch 'fix/hooks-transform-call-order' into feat/field-type-point 2021-08-31 13:24:58 -04:00
James
39f3619d03 Merge branch 'feat/field-type-point' of github.com:payloadcms/payload into feat/field-type-point 2021-08-31 13:11:32 -04:00
James Mikrut
fdd25ddb1a Merge pull request #311 from payloadcms/fix/option-value-empty-string
fix: config validation correctly prevents empty strings for option vals
2021-08-31 13:07:25 -04:00
James
8675481343 feat: allows user to pass req through local findByID 2021-08-31 13:01:26 -04:00
Dan Ribbens
41e7febf6a fix: config validation correctly prevents empty strings for option values 2021-08-31 11:43:07 -04:00
James
96629f1f01 fix: ensures hooks run before access 2021-08-30 17:10:06 -04:00
Dan Ribbens
d42d8f76ef fix: remove media directory to improve test run consistency 2021-08-25 17:41:24 -04:00
Dan Ribbens
34630757b9 docs: point field and near query 2021-08-25 16:55:47 -04:00
James
c187da00b1 fix: ensures proper order while transforming incoming and outgoing data 2021-08-25 15:38:46 -04:00
James
1d8b0e9724 Merge branch 'fix/hooks-transform-call-order' of github.com:payloadcms/payload into fix/hooks-transform-call-order 2021-08-25 14:29:39 -04:00
Dan Ribbens
f80646c598 fix: allow save of collection with an undefined point 2021-08-25 13:28:42 -04:00
Dan Ribbens
30f17509ea feat: point field localization and graphql 2021-08-24 17:28:08 -04:00
Dan Ribbens
7504155e17 feat: add point field type 2021-08-23 23:12:50 -04:00
James
468408ff41 chore(release): v0.9.5 2021-08-23 18:18:23 -04:00
James Mikrut
05eb3194cf Merge pull request #302 from payloadcms/fix/267-absolute-upload-staticDir-windows
fix: windows compatible absolute paths for staticDir
2021-08-23 18:13:50 -04:00
James
b0dc125604 fix: obscure conditional logic bug 2021-08-23 18:13:19 -04:00
Dan Ribbens
b21316b6cc fix: windows compatible absolute paths for staticDir 2021-08-18 14:30:58 -04:00
James
cb422bb4c6 docs: accuracy improvements 2021-08-12 23:05:21 -04:00
James
20a1ed7da8 chore(release): v0.9.4 2021-08-06 12:56:02 -04:00
James
8534eeea85 docs: typo 2021-08-06 12:53:45 -04:00
James
1d4f604270 chore(release): v0.9.3 2021-08-06 12:41:05 -04:00
James
a5ea0ff619 fix: args no longer optional in collection and global hooks 2021-08-06 12:38:31 -04:00
James
3cf01964de chore(release): v0.9.2 2021-08-06 12:26:18 -04:00
James Mikrut
2243070ac7 Merge pull request #272 from payloadcms/feat/disable-local-file-storage
feat: allow completely disabling local file storage
2021-08-06 12:23:37 -04:00
James
9661c6d40a feat: allow completely disabling local file storage 2021-08-06 12:18:20 -04:00
James
3ed8b010e9 Merge branch 'master' of github.com:payloadcms/payload 2021-08-06 11:38:28 -04:00
James
f61643ac32 chore: revises types in demo 2021-08-06 11:38:20 -04:00
James
d0982bf332 chore: adds test for req.payloadUploadSizes 2021-08-06 11:36:51 -04:00
James
4a44d20d90 chore: merges 2021-08-06 11:14:02 -04:00
James Mikrut
69ba06f5fc Merge pull request #250 from payloadcms/fix/row-admin-type
fix: row admin type
2021-08-06 11:12:27 -04:00
James Mikrut
c51ffedb6f Merge pull request #271 from payloadcms/feat/upload-resize-allow-null
feat: allows upload resizing to maintain aspect ratio
2021-08-06 11:12:11 -04:00
James
8a022e3c55 docs: adds detail about maintaining aspect ratio 2021-08-06 11:11:51 -04:00
James
dea54a4ccc feat: allows upload resizing to maintain aspect ratio 2021-08-06 11:08:48 -04:00
James
9c8935fd51 feat: exposes auto-sized uploads on payload req 2021-08-06 10:40:40 -04:00
James
907f8fd94d feat: reduces group heading from h2 to h3 2021-08-04 14:23:23 -04:00
James
bb7e069b2b chore(release): v0.9.1 2021-08-02 22:03:18 -04:00
James
65db8d9fc2 fix: relationship field access control in admin UI 2021-08-02 21:59:10 -04:00
James
4cc0ea1d81 fix: groups with failing conditions being incorrectly required on backend 2021-08-02 21:58:44 -04:00
James
01a191a139 feat: exposes collection after read hook type 2021-08-02 21:57:50 -04:00
James Mikrut
4b51e9d9a1 Update overview.mdx 2021-08-02 17:17:56 -04:00
James Mikrut
02c7ef11be Update CHANGELOG.md 2021-08-02 17:17:02 -04:00
James
387bfea008 chore(release): v0.9.0 2021-08-02 16:45:40 -04:00
James
8af39472e1 feat: removes sanitization of configs before plugins are instantiated 2021-08-02 16:38:52 -04:00
Elliot DeNolf
a105a486e8 chore(release): v0.8.2 2021-08-02 09:40:45 -04:00
James
33983deb37 fix: more advanced conditional logic edge cases 2021-08-02 09:19:25 -04:00
Elliot DeNolf
12cba62930 feat: export error types 2021-08-02 09:15:11 -04:00
James Mikrut
be69b5892a Update CHANGELOG.md 2021-07-29 07:49:03 -04:00
James Mikrut
cb6fbd7160 Update CHANGELOG.md 2021-07-29 07:48:38 -04:00
James
e6575600cb chore(release): v0.8.1 2021-07-29 07:17:30 -04:00
James
a002b7105f feat: improves plugin writability 2021-07-29 07:15:47 -04:00
Dan Ribbens
deef5202c1 fix: row admin type 2021-07-28 14:37:27 -04:00
James
dbc4115644 chore: updates changelog with breaking change 2021-07-27 20:40:40 -04:00
James
d672e704bf chore(release): v0.8.0 2021-07-27 20:33:42 -04:00
James Mikrut
dc1ecdfc53 Merge pull request #246 from payloadcms/feat/expose-validated-config-types
Feat/expose validated config types
2021-07-27 20:32:08 -04:00
James
aa81e04861 docs: typescript configs 2021-07-27 20:21:51 -04:00
James
5a7e5b921d feat: revises naming conventions of config types 2021-07-27 20:13:25 -04:00
James
c649362b95 fix: ensures text component is always controlled 2021-07-27 18:29:46 -04:00
James
f6fc0972e0 chore(release): v0.7.10 2021-07-27 17:57:59 -04:00
James
a1b3414dd0 chore: ensures tests can run locally on mac 2021-07-27 17:55:57 -04:00
James
a2fa30fad2 fix: jest debug testing 2021-07-27 17:55:14 -04:00
James Mikrut
2e42a34bc4 Merge pull request #244 from payloadcms/fix/conditional-field-children
feat: improves conditional logic performance and edge cases
2021-07-27 14:41:22 -04:00
James
9c4ff004a8 chore: merges master 2021-07-27 13:28:27 -04:00
Dan Ribbens
8f90caeb10 chore(release): v0.7.9 2021-07-27 13:15:35 -04:00
Dan Ribbens
6bd16a5cc7 chore: update package dependencies 2021-07-27 13:10:49 -04:00
Dan Ribbens
1344f3da3f Merge pull request #241 from payloadcms/feature/field-description
feat: field descriptions
2021-07-27 13:02:23 -04:00
Dan Ribbens
fe0098ccd9 feat: add component support to collection and global description 2021-07-27 12:53:43 -04:00
Dan Ribbens
e0933f612a feat: add component support to field description 2021-07-27 12:53:43 -04:00
Dan Ribbens
29a1108518 feat: add descriptions to every allowed field type, globals and collections 2021-07-27 12:53:43 -04:00
Dan Ribbens
4544711f0e feat: add admin description to collections and globals 2021-07-27 12:53:43 -04:00
Dan Ribbens
dac60a024b feat: add customizable admin field descriptions 2021-07-27 12:53:43 -04:00
Dan Ribbens
2ff0434656 Merge pull request #227 from payloadcms/chore/update-mongodb-memory-server
chore: bump mongodb-memory-server
2021-07-27 12:53:00 -04:00
Dan Ribbens
19880cfeb8 Merge pull request #237 from payloadcms/feature/config-validation-collection-field-naming
feat: config validation collection field naming
2021-07-27 12:51:37 -04:00
Dan Ribbens
bb63b4aad1 feat: add global slug and field names to schema validation errors 2021-07-26 23:21:19 -04:00
Dan Ribbens
ebfb72c8fa feat: add collection slug to schema validation errors 2021-07-26 23:21:19 -04:00
James
fedeaeafc9 fix: skipValidation logic 2021-07-26 22:45:31 -04:00
James
d43390f2a4 feat: improves conditional logic performance and edge cases 2021-07-26 22:25:11 -04:00
James
ea358a66e8 feat: improves group styling when there is no label 2021-07-26 14:33:26 -04:00
James
4d1249dd03 fix: missing richtext gutter 2021-07-26 14:33:03 -04:00
James
998122b071 chore(release): v0.7.8 2021-07-23 12:09:45 -04:00
James
cbac8887dd feat: fixes group label schema validation 2021-07-23 12:08:27 -04:00
James
bd0b1df560 chore(release): v0.7.7 2021-07-23 10:00:28 -04:00
James
266ccb3744 feat: only attempts to find config when payload is initialized 2021-07-23 09:56:29 -04:00
James
d418599038 Merge branch 'master' of github.com:payloadcms/payload 2021-07-23 09:50:07 -04:00
James
603a11c4d5 docs: renames plugins overview 2021-07-23 09:50:03 -04:00
James Mikrut
51419feb46 Merge pull request #232 from payloadcms/docs/fix-broken-links
docs: fix collections admin link
2021-07-22 09:11:41 -04:00
James Mikrut
f3cd3ae826 Merge pull request #238 from payloadcms/fix/#59
docs: accurately documents the props for the datepicker field
2021-07-22 09:11:26 -04:00
Jarrod Flesch
dcd8052498 fix: accurately documents the props for the datepicker field 2021-07-21 18:09:14 -04:00
Dan Ribbens
7e52de7daf docs: fix collections admin link 2021-07-15 15:04:47 -04:00
Dan Ribbens
d2e3cba22a chore: bump mongodb-memory-server to 7.2.0 and fix test runner 2021-07-10 17:02:11 -04:00
James
fe54837e73 chore: bumps mongodb-memory-server to dev dependencies 2021-07-06 20:53:58 -04:00
James
a7ea32acd6 chore(release): v0.7.6 2021-07-06 20:48:56 -04:00
James
f04ac74ecb chore: bumps mongodb-memory-server to dev dependency 2021-07-06 20:46:46 -04:00
James
b5642492f6 chore: updates mongodb-memory-server 2021-07-06 20:35:48 -04:00
James
3c7b93ba43 chore(release): v0.7.5 2021-07-06 20:23:01 -04:00
James Mikrut
f95b851c9b Merge pull request #221 from payloadcms/feat/richtext-list-optimizations
Feat/richtext list optimizations
2021-07-06 20:19:20 -04:00
James Mikrut
7b43c997bd Merge pull request #222 from payloadcms/docs/plugins
feat: adds plugins infrastructure
2021-07-06 20:19:02 -04:00
James
6b255315e0 feat: adds plugins infrastructure 2021-07-06 20:17:12 -04:00
James
91141ad62f feat: enables backspace to deactivate richtext list elements 2021-07-06 18:51:09 -04:00
James
538851325d fix: crash on bullet list de-selection 2021-07-06 18:28:22 -04:00
James
007591272f fix: updates demo richtext elements with proper SCSS 2021-07-06 15:15:08 -04:00
James
6a12ffc5fd docs: readability 2021-07-01 17:15:30 -04:00
James
fa4d043e74 Merge branch 'docs/spelling' of github.com:payloadcms/payload 2021-07-01 17:05:12 -04:00
James
08b4c25c70 Merge branch 'docs/relationship-field-variations' of github.com:payloadcms/payload 2021-07-01 17:04:57 -04:00
James
4d3d18132b chore(release): v0.7.4 2021-07-01 16:18:12 -04:00
James
84e31aed14 fix: adds proper scss stylesheets to payload/scss 2021-07-01 16:16:22 -04:00
Jessica Boezwinkle
55344a3644 docs: spelling error in rich text doc 2021-07-01 16:05:34 -04:00
Dan Ribbens
acfcd20bfa docs: relationship field where query examples 2021-07-01 15:54:05 -04:00
Dan Ribbens
b5d272fdbe docs: update relationship field with example variations 2021-07-01 14:50:11 -04:00
James
99d9e193ce chore(release): v0.7.3 2021-07-01 14:48:02 -04:00
James
4359178f7a docs: scss reusability 2021-07-01 14:45:31 -04:00
James
929b21d68b merge: field and scss exports 2021-07-01 14:43:56 -04:00
James
c81c638958 Merge branch 'fix/style-vars-imports' of github.com:payloadcms/payload 2021-07-01 14:39:51 -04:00
Dan Ribbens
5bea9ae126 feat: export all field prop types for custom components 2021-06-30 16:55:45 -04:00
Dan Ribbens
ea80fd68b1 fix: changes scss imports to allow vars imports to payload projects 2021-06-29 09:43:18 -04:00
James
e99359ef0d chore(release): v0.7.2 2021-06-22 17:17:17 -04:00
James Mikrut
19a224cdac Merge pull request #208 from payloadcms/feat/maxdepth-field-property
feat: adds maxDepth to relationships and upload fields
2021-06-22 17:14:38 -04:00
James
d6bc6f9f0e fix: safely stringifies ObjectIDs while populating relationships 2021-06-22 17:12:16 -04:00
James
59e66c4c91 Merge branch 'master' of github.com:payloadcms/payload 2021-06-22 16:36:38 -04:00
James
4933b34f6b fix: parses incoming numbers through query string for use in where clauses 2021-06-22 15:15:15 -04:00
Dan Ribbens
470866ae37 chore: adds test case for relation field maxDepth 2021-06-22 14:29:02 -04:00
Dan Ribbens
95c165018e fix: respect maxDepth 0 2021-06-22 14:14:00 -04:00
Dan Ribbens
880dabdcad feat: adds maxDepth to relationships and upload fields 2021-06-22 13:28:27 -04:00
Dan Ribbens
c2e6aae545 chore(release): v0.7.1 2021-06-21 13:55:40 -04:00
Dan Ribbens
3af2554eac fix: babel config file error 2021-06-21 13:52:38 -04:00
Dan Ribbens
045479b5ec chore(release): v0.7.0 2021-06-21 13:34:55 -04:00
James Mikrut
67c1e280eb feat: exposes babel config via payload/babel (#203)
* feat: exposes babel config via payload/config

* docs: adds info about re-using babel.config.js
2021-06-21 12:59:17 -04:00
Dan Ribbens
fb60bc79a1 feat: user preferences (#195)
* feat: adds preferences to rest api and graphql

* feat: admin panel saves user preferences on locales

* feat: admin panel saves user column preferences for collection lists

* feat: adds new id field to blocks and array items

* feat: exposes new DocumentInfo context and usePreferences hooks to admin panel

* docs: preferences api documentation and useage details

Co-authored-by: James <james@trbl.design>
2021-06-21 12:49:10 -04:00
Elliot DeNolf
dd40ab07fa fix: handle all scenarios in select cell 2021-06-08 09:17:28 -04:00
James Mikrut
530eb8bc70 Merge pull request #184 from payloadcms/chore/package-json-repository
* chore: add repository to package.json
* chore: add homepage to package.json
2021-05-24 08:56:17 -04:00
James
9ada08fafc chore(release): v0.6.10 2021-05-23 11:59:52 -04:00
James
b187c9ea65 chore: ensures backward node compatibility 2021-05-23 11:55:13 -04:00
James
c6ccc3477f chore: migrates sass features 2021-05-23 10:57:45 -04:00
Dan Ribbens
ee080f0d8b chore: add homepage to package.json 2021-05-19 13:45:13 -04:00
Dan Ribbens
db59da5950 chore: add repository to package.json 2021-05-19 13:34:40 -04:00
James Mikrut
39d23d65e5 Update CHANGELOG.md 2021-05-16 13:09:23 -04:00
James
deec08b566 chore(release): v0.6.9 2021-05-16 13:07:03 -04:00
James Mikrut
a2e57b09f2 fix: misc responsive improvements, date clipping in sidebar (#165), express-fileupload schema validation (#180)
* fix: misc responsive improvements
* fix: date clipping in sidebar
* fix: revises popup
* fix: admin _verified field not displaying proper field value
* fix: properly typed express-fileupload config options
2021-05-16 13:04:29 -04:00
Elliot DeNolf
fe7e2d54d2 chore(release): v0.6.8 2021-05-11 22:56:13 -04:00
Dan Ribbens
14106a36ad chore: bump node-sass (#175)
Co-authored-by: Elliot DeNolf <denolfe@gmail.com>
2021-05-11 22:50:20 -04:00
Elliot DeNolf
a5fcdf03ba feat: add mimeTypes validation for uploads 2021-05-11 22:21:03 -04:00
Elliot DeNolf
1c6f32f288 feat: restrict upload mime types in file picker 2021-05-11 22:21:03 -04:00
PatrikKozak
46c1a36fdb feat: disables user scalable in mobile (#177) 2021-05-10 14:53:19 -04:00
James
f9319bd055 chore: better organizes preview types 2021-05-10 09:45:43 -04:00
James
98c3315462 chore: updates demo to reflect preview changes 2021-05-10 09:25:46 -04:00
James
2d67448d8a feat: exposes locale within preview function 2021-05-10 09:24:00 -04:00
James
1612bc8d3a chore(release): v0.6.7 2021-05-06 20:50:01 -04:00
James
c8f1bd19e2 docs: adds * locale to docs 2021-05-06 19:58:06 -04:00
James Mikrut
99466fa41e feat: exposes component types 2021-05-06 19:57:06 -04:00
James
9aebeaf579 feat: allows group field gutter to be disabled 2021-05-04 18:48:51 -04:00
Ontopic
e791c5b7b3 feat: add ability to hide gutter for RichText fields
* Adding ability to hide gutter on RichText field

* Adding documentation for hideGutter

Co-authored-by: anon <no-reply@google.com>
2021-05-04 18:37:26 -04:00
Elliot DeNolf
e565fa6f1c feat: shrink image thumbnails on larger screens 2021-04-29 18:30:11 -04:00
Elliot DeNolf
670ccf2f58 feat: support global date format 2021-04-29 18:29:56 -04:00
Elliot DeNolf
cae24db0e1 chore(release): v0.6.6 2021-04-27 10:18:31 -04:00
Elliot DeNolf
8cfc039cd0 fix: support image resizing on M1 chip 2021-04-27 10:11:16 -04:00
Elliot DeNolf
382089b484 fix: handle rich text saving as empty string 2021-04-27 10:00:21 -04:00
Dan Ribbens
6f188b1fa6 fix: graphql returns compatible error format 2021-04-27 09:51:52 -04:00
Dan Ribbens
6caa696c37 chore: add graphql tests for error handling 2021-04-27 09:51:52 -04:00
Jarrod Flesch
2643e1a100 fix: removes incoming.data.length check, since data is typed as a keyed array when it is an instance of APIError 2021-04-27 09:51:52 -04:00
Dan Ribbens
a85bf9e836 fix: update operation can save password changes 2021-04-27 09:49:43 -04:00
Ontopic
f9906e1cdc docs: fix afterChange example 2021-04-27 09:49:15 -04:00
Elliot DeNolf
49ed6279c9 chore: add release-it rc script 2021-04-23 08:25:40 -04:00
James
5f8cad8389 chore(release): v0.6.5 2021-04-22 08:38:28 -04:00
James Mikrut
f17c6e4010 feat: builds plugin infrastructure (#149) 2021-04-22 08:36:54 -04:00
James
7b7071955e chore(release): v0.6.4 2021-04-21 12:23:36 -04:00
James
74430ea151 fix: allows _verificationToken to come back via showHiddenFields 2021-04-21 12:22:09 -04:00
James
d23f7f980d chore(release): v0.6.3 2021-04-21 11:36:19 -04:00
James
0eddbb0ea8 Merge branch 'master' of github.com:payloadcms/payload 2021-04-21 11:34:51 -04:00
James
9c95c75030 fix: safely parses incoming stringified richtext json 2021-04-21 09:52:10 -04:00
Elliot DeNolf
519c021525 fix: make admin field properties in joi schema match TS types 2021-04-20 10:13:20 -04:00
Elliot DeNolf
fa49811377 fix: properly label arrays/blocks with plural and singular 2021-04-20 09:07:58 -04:00
James
f25e9aca61 chore(release): v0.6.2 2021-04-19 19:51:52 -04:00
James
ddf25fbb65 feat: modifies relationship field to react to changing relationTo 2021-04-19 19:49:49 -04:00
James
21dc861461 chore(release): v0.6.1 2021-04-19 19:10:04 -04:00
James
280f809421 fix: graphql localized relationship bugs 2021-04-19 18:48:52 -04:00
James
035f6c63bb Merge branch 'master' of github.com:payloadcms/payload 2021-04-19 10:40:40 -04:00
James
16ca22b4cc fix: moves enableRichTextRelationship to proper spot 2021-04-19 10:40:31 -04:00
James
5f2073ae68 fix: cleans up duplicative columns 2021-04-19 10:23:20 -04:00
James
99704707dd feat: sets enableRichTextRelationship to true by default 2021-04-19 10:23:07 -04:00
James Mikrut
3678cecb69 Update CHANGELOG.md 2021-04-18 21:37:01 -04:00
James
5a52d4d4bb chore: updates changelog 2021-04-18 21:29:07 -04:00
James
7c2955ba70 chore(release): v0.6.0 2021-04-18 21:26:18 -04:00
James
4359a70a8b fix: ensures api keys are properly populated in admin 2021-04-18 20:58:33 -04:00
James
75a5b04705 fix: ensures first options are loaded only once 2021-04-18 20:40:24 -04:00
James
4b1979540d fix: clears richtext element on enter, refocuses on toolbar button click 2021-04-18 16:04:37 -04:00
James
20d7a01919 feat: improves margins in rich text 2021-04-18 15:47:53 -04:00
James
7db23f8ebb fix: upload useAsTitle set to filename by default 2021-04-18 15:43:35 -04:00
James Mikrut
353042467f feat: dynamically populates richtext relationships
* feat: adds relationship field to test searchable input

* fix: searching on relationship fields properly fetches results

* chore: more dry relationship field

* feat: sets default access control to requiring a user to be logged in

* feat: dynamically populates richtext relationships

* feat: allows depth param in graphql richText field

* feat: ensures relationship input is initialized with up to 3 related collections
2021-04-18 15:29:54 -04:00
James Mikrut
b86c3daa99 fix: searching on relationship fields properly fetches results
* feat: adds relationship field to test searchable input

* fix: searching on relationship fields properly fetches results

* chore: more dry relationship field
2021-04-18 15:27:34 -04:00
Elliot DeNolf
b383eb65c6 feat: autolabel fields when label is omitted (#42)
* feat: autolabel fields when omitted

* feat: handle autolabel in graphql mutation build

* feat: autolabel blocks

* test: add required slug field to blocks

* feat: handle graphql names when label is false

* feat: adds relationship field to test searchable input

* feat: handle block cell type labeling pluralization

* docs: remove all explicit labeling, no longer needed

* fix: falsey column labels, allows false array labels

* fix: client tests

* fix: auto-labels globals

* docs: globals auto-labeling and hooks clarification

* fix; proper object type naming

Co-authored-by: James <james@trbl.design>
2021-04-16 22:37:08 -04:00
Elliot DeNolf
21b2bd4b67 feat: improve uniqueness error handling 2021-04-16 18:37:50 -04:00
Elliot DeNolf
4ee4fae53b docs: remove incorrect code tags 2021-04-16 18:37:20 -04:00
James
2459c12f84 chore(release): v0.5.10 2021-04-14 13:44:08 -04:00
James Mikrut
e3f249b0de Merge pull request #137 from payloadcms/fix/graphql-me
fix: feeds collectionSlug through me auth for graphql
2021-04-14 13:42:24 -04:00
Jacob Fletcher
9ee2f9c0dc fix: feeds collectionSlug through me auth for graphql resolver 2021-04-14 12:41:40 -04:00
James
204b755201 chore(release): v0.5.9 2021-04-13 20:03:39 -04:00
James
27df7a4afc chore: bump config provider 2021-04-13 20:02:29 -04:00
James
fc5e5645f2 chore(release): v0.5.8 2021-04-13 14:56:38 -04:00
James
20f1e6cb04 fix: revises graphql import syntax 2021-04-13 14:55:06 -04:00
James
f2e3c1b1a8 chore(release): v0.5.7 2021-04-13 13:14:05 -04:00
James
224f175c7f chore: manually bumps version 2021-04-13 13:11:59 -04:00
Elliot DeNolf
776b9c9c30 feat: remove mimetype from upload cell type 2021-04-13 13:09:36 -04:00
Elliot DeNolf
414bc01b05 fix: make upload cell mimetype inline 2021-04-13 13:09:36 -04:00
James
a78fc974b8 fix: custom query / mutation types 2021-04-13 13:03:57 -04:00
James
5f56994b02 Merge branch 'master' of github.com:payloadcms/payload 2021-04-13 12:28:15 -04:00
James
282775c69a Merge branch 'feat/remember-conditional-values' of github.com:payloadcms/payload 2021-04-13 12:26:31 -04:00
James
523fd7b050 Merge branch 'fix/array-labeling' of github.com:payloadcms/payload 2021-04-13 12:25:57 -04:00
James Mikrut
c02c5a3f84 Merge pull request #135 from payloadcms/feat/auto-verify-first-register
feat: auto verifies first user registration
2021-04-13 12:24:33 -04:00
James
c977a7b4c5 chore: bumps type dependencies 2021-04-13 12:23:45 -04:00
James
0094837635 feat: prevents DraggableSections from re-mounting on doc save 2021-04-13 12:15:37 -04:00
Jacob Fletcher
e58b152d40 fix: clears verificationToken when _verified is true 2021-04-13 12:10:10 -04:00
Jacob Fletcher
01b0bf1bb3 chore: removes useUnmountEffect hook 2021-04-13 12:10:10 -04:00
Jacob Fletcher
8f720c000d feat: auto verifies first user registration 2021-04-13 12:10:01 -04:00
Jacob Fletcher
4d5db0520c Merge branch 'master' of github.com:payloadcms/payload into fix/config-joi-schema 2021-04-13 09:42:10 -04:00
Jacob Fletcher
afc9454465 fix: updates config schema for graphQL mutations and queries 2021-04-13 09:41:33 -04:00
Elliot DeNolf
cd02b1cef4 Merge pull request #132 from sampittko/patch-1
docs: fix typo in field types overview
2021-04-10 14:42:16 -04:00
Samuel Pitoňák
1008eada65 docs: fix typo in field types overview 2021-04-10 16:46:31 +02:00
Elliot DeNolf
ddf5df290c fix: handle add/remove labels for all usage of Array field type 2021-04-09 10:34:08 -04:00
Elliot DeNolf
000dee85bd fix: pagination calculation for current range 2021-04-06 23:32:13 -04:00
James
91d37fb41d feat: optimize save within Edit 2021-04-02 13:28:40 -04:00
James
31c41c22ec fix: ensures email is still prefilled in auth configs 2021-04-02 12:59:15 -04:00
James
dff72fbf2f fix: ensures failed conditions send path to form 2021-04-02 11:53:03 -04:00
James
988d0a4b08 feat: remembers conditional field values after removing / readding 2021-04-02 11:15:28 -04:00
James
cca71a5793 chore(release): v0.5.5 2021-04-02 09:59:13 -04:00
James
ecd277da7d feat: allows soft breaks in rich text 2021-04-02 09:57:39 -04:00
James
81ee84b38b chore(release): v0.5.4 2021-04-02 08:52:00 -04:00
James
fee60bd4d2 chore: bumps version 2021-04-02 08:50:38 -04:00
James
9a7c0e3dbd fix: ensures arrays and blocks reset row count on initialState change 2021-04-02 08:48:12 -04:00
James
27cebccd4a Merge branch 'master' of github.com:payloadcms/payload 2021-04-01 16:49:27 -04:00
James
23c45f137a fix: unique indices 2021-04-01 16:48:02 -04:00
Elliot DeNolf
a413859902 chore: adjust issue templates 2021-03-31 20:51:46 -04:00
James
bfb3d12290 chore(release): v0.5.2 2021-03-31 19:13:34 -04:00
James Mikrut
785609b66e Merge pull request #120 from payloadcms/fix/richtext-relationship-modal
fix: modal issues with richtext relationship
2021-03-31 19:11:21 -04:00
James
8ea4407f04 fix: modal issues with richtext relationship 2021-03-31 12:15:03 -04:00
James
3c9d71df6f chore(release): v0.5.1 2021-03-29 14:31:44 -04:00
James
c8f99da853 Merge branch 'master' of github.com:payloadcms/payload 2021-03-29 14:24:45 -04:00
James
23e1fc3f73 fix: base auth / upload fields no longer cause validation issues 2021-03-29 14:24:34 -04:00
James Mikrut
eb6fe42259 Update CHANGELOG.md 2021-03-29 08:55:06 -04:00
James
3b0f3eca2c chore(release): v0.5.0 2021-03-29 08:53:11 -04:00
James Mikrut
dce581acd7 Merge pull request #116 from payloadcms/fix/admin-thumbnail-absolute-url
fix: allows absolute urls within adminThumbnail
2021-03-29 08:43:19 -04:00
James Mikrut
79c2f1ea5e Merge pull request #110 from payloadcms/feat/global-api-tweak
Suggestion: Payloads Local api should use 'slug' instead of 'global' for Global operations
2021-03-29 08:41:38 -04:00
James Mikrut
471727b769 Merge pull request #113 from payloadcms/feat/consistent-readonly
feat: applies readOnly consistently within create and update ops
2021-03-29 08:41:16 -04:00
James Mikrut
ff7400f2b1 Merge pull request #108 from payloadcms/chore/update-package-maintainers-author
chore: update maintainers and author in package.json
2021-03-29 08:41:04 -04:00
James Mikrut
4c58e3e10d Merge pull request #112 from payloadcms/fix/moving-nested-arrays
fix: moving nested arrays now properly persists row count
2021-03-29 08:40:55 -04:00
James Mikrut
d4742a6233 Merge pull request #114 from payloadcms/feat/richtext-blur-selection
feat: saves cursor position when relationship element is added to richText field
2021-03-29 08:40:44 -04:00
James
51b46d44b0 fix: allows absolute urls within adminThumbnail 2021-03-29 08:39:41 -04:00
Elliot DeNolf
5b42a9c76e Merge pull request #101 from payloadcms/ci-more-node-versions
ci: add node 14 and 15
2021-03-25 21:09:26 -04:00
James
d24b3f72ce feat: saves cursor position when relationship element is added to richText 2021-03-24 20:53:40 -04:00
James
6edf947c26 Merge branch 'fix/moving-nested-arrays' of github.com:payloadcms/payload into fix/moving-nested-arrays 2021-03-24 16:05:48 -04:00
James
c4a66c2cd9 fix: handles empty indices within array field data 2021-03-24 16:05:20 -04:00
James
d47e2c5786 fix: handles empty indices within array field data 2021-03-24 15:57:06 -04:00
James
50b99370d2 fix: validation consistency within admin 2021-03-24 12:38:50 -04:00
James
c4a5f2aea2 featapplies readOnly consistently within create and update ops 2021-03-23 22:46:49 -04:00
James
5f9a5c859e fix: moving nested arrays now properly persists row count 2021-03-23 22:40:53 -04:00
Jarrod Flesch
c71ba2b079 feat: changes global find and update payload api from global to slug as the key to find/update with 2021-03-22 09:15:55 -04:00
Dan Ribbens
8117425de8 chore: update maintainers and author in package.json 2021-03-16 19:09:07 -04:00
James
39000bdcb2 chore(release): v0.4.7 2021-03-15 19:06:46 -04:00
James
ab9bf1a4c6 chore: bumps config-provider 2021-03-15 19:03:11 -04:00
James
f5fdec6bf8 chore(release): v0.4.6 2021-03-14 16:30:12 -04:00
James
e76dc76684 chore:update author 2021-03-14 16:26:35 -04:00
James Mikrut
1aa59a3918 Merge pull request #104 from payloadcms/feat/admin-thumbnail-function
Feat/admin thumbnail function
2021-03-14 15:59:49 -04:00
James
5e1ddb552e feat: only runs adminThumbnail func if image type 2021-03-14 15:53:00 -04:00
James
521b49afbf docs: adminThumbnail feature 2021-03-14 15:50:44 -04:00
James
b6a9fe4bcf feat: allows admin thumbnail to be set programmatically 2021-03-14 15:44:35 -04:00
James Mikrut
3dfd8314f1 Merge pull request #103 from payloadcms/feat/provide-field-access-data
Feat/provide field access data
2021-03-14 13:43:40 -04:00
James Mikrut
3e8ad0ab60 Merge pull request #96 from payloadcms/docs/fix-broken-links
docs: fix broken links graphql playground and collections preview
2021-03-14 13:43:31 -04:00
James
339f7503a4 feat: provides field access control with document data 2021-03-14 13:40:45 -04:00
James
36aae5c37f feat: exports collection field hook types from payload/types 2021-03-14 13:25:56 -04:00
James
65c81c7c2a docs: spelling 2021-03-14 12:59:19 -04:00
James
39b30da10f docs: corrections to field hooks 2021-03-14 12:59:12 -04:00
James
3c42e6e6af feat: reorders uploads to provide beforeChange hooks with upload data 2021-03-13 14:17:00 -05:00
James
71a15b5e6d docs: clarity around afterRead S3 hook 2021-03-13 13:55:01 -05:00
Elliot DeNolf
1adca7b09d ci: add node 14 and 15 2021-03-13 12:16:09 -05:00
Dan Ribbens
2f18647f87 docs: fix broken links graphql playground and collections preview 2021-03-11 00:02:50 -05:00
Dan Ribbens
f35cfae566 chore: update changelog 2021-03-10 22:18:37 -05:00
Dan Ribbens
cd9c02094a 0.4.5 2021-03-10 22:18:06 -05:00
Dan Ribbens
4d04a40b84 Merge pull request #95 from payloadcms/fix/config-validation-allow-admin-dashboard
fix: config validation allow admin dashboard
2021-03-10 22:06:35 -05:00
Dan Ribbens
30b9bd0f9c Merge pull request #88 from payloadcms/chore/update-docs-admin
chore: fix docs admin folder casing
2021-03-10 22:06:04 -05:00
Dan Ribbens
2d1d1b4f32 fix: config validation allow admin dashboard 2021-03-10 22:02:50 -05:00
Dan Ribbens
f060d2d8a4 chore: changelog v0.4.4 2021-03-09 14:15:33 -05:00
Dan Ribbens
b33bca32b9 0.4.4 2021-03-09 14:14:58 -05:00
Dan Ribbens
f0f698fa73 Merge pull request #91 from payloadcms/fix/verification-token
fix: email verification template missing token
2021-03-09 14:09:20 -05:00
Dan Ribbens
93ed664920 fix: email verification template missing token 2021-03-09 13:30:16 -05:00
Dan Ribbens
3afefbe592 chore: fix docs admin folder casing 2021-03-04 11:52:33 -05:00
James
33e0136201 chore: merges master 2021-03-04 10:15:45 -05:00
Dan Ribbens
1e59d8d730 chore: bump version 2021-03-04 09:58:36 -05:00
Dan Ribbens
ae4c704a1b chore: update changelog 2021-03-04 09:36:26 -05:00
Dan Ribbens
580e3fe653 0.4.1 2021-03-04 09:34:40 -05:00
Dan Ribbens
a897631251 Merge pull request #87 from payloadcms/docs/fix-broken-links
docs: fixed broken links throughout docs
2021-03-04 08:12:58 -05:00
Dan Ribbens
fbf82fc205 docs: fixed broken links throughout docs 2021-03-04 08:01:20 -05:00
James
4cc34ad203 docs: fixes broken link 2021-03-03 12:28:55 -05:00
Dan Ribbens
1617556158 Merge pull request #84 from payloadcms/chore/update-license-20210228
chore: update license document
2021-03-01 09:25:58 -05:00
James
23c0f14fec 0.4.2 2021-03-01 09:13:03 -05:00
James
aadcd5a8f8 chore: bumps dependencies 2021-03-01 09:12:50 -05:00
James
ded8c3cd32 0.4.1 2021-03-01 08:40:19 -05:00
James
fef1b98cf1 docs: fixes a few links 2021-03-01 08:39:31 -05:00
James
568c6bb7b2 docs: revises licensing 2021-03-01 08:39:23 -05:00
James
f19f688770 chore: updates changelog 2021-02-28 20:03:53 -05:00
James
7e1ce9ce61 0.4.0 2021-02-28 19:19:28 -05:00
James
3f982703ef chore: bumps config-provider version 2021-02-28 19:19:05 -05:00
James Mikrut
4162010853 Merge pull request #82 from payloadcms/feat/new-billing-support
Feat/new billing support
2021-02-28 19:10:56 -05:00
James Mikrut
30db1d1c39 Merge pull request #81 from payloadcms/feat/simplify-update
Feat/simplify update
2021-02-28 19:10:07 -05:00
Dan Ribbens
cc70f85c5a chore: update license document 2021-02-28 18:12:32 -05:00
James Mikrut
566cc9caec Merge pull request #83 from payloadcms/fix/preview-button
fix: reverts preview to only returning string
2021-02-28 14:28:16 -05:00
James
8197d060d3 fix: preview types 2021-02-28 14:24:50 -05:00
James
ca14e66a58 fix: reverts preview to only returning string 2021-02-28 14:18:34 -05:00
James
b563f9a039 chore: bumps config provider 2021-02-28 11:26:42 -05:00
James
c97ddeb2d9 feat: implements unauthorized user view 2021-02-28 11:17:33 -05:00
James
e268e25719 feat: simplifies collection update operation 2021-02-27 21:24:19 -05:00
James
4de5605931 feat: removes requirement of returning value from field hooks 2021-02-27 20:14:41 -05:00
James
b2037ecf6f chore: update changelog 2021-02-23 10:54:25 -05:00
James
75ee5f83f1 0.3.0 2021-02-23 10:50:23 -05:00
James Mikrut
6ecf834cfc Merge pull request #80 from payloadcms/fix/update-hidden-fields
fix: removes overwrite from update operation
2021-02-23 10:46:04 -05:00
James
40f5901526 fix: forces depth to 0 in update operation 2021-02-23 10:38:56 -05:00
James Mikrut
b1c8ac94a7 Merge pull request #79 from payloadcms/fix/scss-export
fix: properly exposes scss for reuse
2021-02-23 10:28:36 -05:00
James
a8e2cc11af fix: removes overwrite from update operation 2021-02-23 10:15:09 -05:00
James
c1b2301650 fix: properly exposes scss for reuse 2021-02-23 08:54:36 -05:00
Dan Ribbens
a4ee7981c6 0.2.13 2021-02-20 20:40:09 -05:00
Dan Ribbens
7c13ab22d5 chore: update changelog 2021-02-20 20:39:52 -05:00
James Mikrut
ad5f070286 Merge pull request #74 from payloadcms/feat/detach-localization-mongoose
Feat/detach localization from Mongoose
2021-02-20 18:19:59 -05:00
James Mikrut
c2c65326a1 Merge pull request #69 from payloadcms/fix/mongoose-connection-error-log
fix: log mongoose connect error message
2021-02-20 18:19:50 -05:00
James Mikrut
30dbf782d6 Merge pull request #76 from payloadcms/docs/remove-upload-hasMany
docs: removes incorrect hasMany from upload field type
2021-02-20 18:19:32 -05:00
James Mikrut
a1cbfd5cad Merge pull request #75 from payloadcms/fix/preview-button
Fix/preview button
2021-02-20 18:19:22 -05:00
James Mikrut
d343add43e Merge pull request #78 from payloadcms/fix/block-conditional
fix: infinite loop caused within block component
2021-02-20 18:19:11 -05:00
James
9e42d119e4 fix: infinite loop caused within block component 2021-02-20 18:16:40 -05:00
James
e549298ad5 docs: removes incorrect hasMany from upload field type 2021-02-19 09:46:24 -05:00
James
2bc5c59fec fix: sets sparse true if field localized and unique 2021-02-19 09:02:12 -05:00
James
72a5886191 fix: casts incoming number field data as string 2021-02-19 09:02:01 -05:00
Jacob Fletcher
6b6297fb2d feat: supports newTab in Button, updates generatePreviewURL api to forward through PreviewButton 2021-02-18 19:26:43 -05:00
Jacob Fletcher
9b9d0f24b5 fix: returns entire doc to generatePreviewURL callback of PreviewButton 2021-02-18 19:06:07 -05:00
James
162ec74445 feat: detaches localization from mongoose entirely 2021-02-17 22:31:53 -05:00
Dan Ribbens
8e022cd48c test: update collection rich text 2021-02-16 17:23:00 -05:00
Dan Ribbens
e36c7d269c fix: log mongoose connect error message 2021-02-14 20:49:47 -05:00
Dan Ribbens
c5d1e5cbf5 0.2.12 2021-02-10 16:43:16 -05:00
Dan Ribbens
a8190154d1 chore: update changelog 2021-02-10 16:42:41 -05:00
Dan Ribbens
d307aa5d38 Merge pull request #65 from payloadcms/fix/upload-file-size
fix: file size in local operations
2021-02-10 16:37:27 -05:00
Dan Ribbens
3cbf82d33a Merge pull request #66 from payloadcms/fix/uploads-cors
fix: middleware for cors set up on static files
2021-02-10 16:36:06 -05:00
Dan Ribbens
55e0de1719 fix: middleware for cors set up on static files 2021-02-09 15:39:41 -05:00
Dan Ribbens
0feb7b7379 fix: file size in local operations 2021-02-09 15:12:29 -05:00
Dan Ribbens
9d51af3bf8 fix: windows compatible upload filename paths 2021-02-05 17:21:51 -05:00
Dan Ribbens
973f6f94c6 chore: update changelog v0.2.11 2021-02-05 16:28:49 -05:00
Dan Ribbens
6c3fb84310 0.2.11 2021-02-05 16:21:53 -05:00
James Mikrut
4a33223645 Merge pull request #43 from payloadcms/fix/add-file-to-local-operations
fix: add file to create and update local operations
2021-02-05 15:16:03 -06:00
James Mikrut
2c87b67661 Merge pull request #60 from payloadcms/fix/localized-within-blocks
Fix/localized within blocks
2021-02-05 15:15:49 -06:00
James Mikrut
0899299ebf Merge pull request #57 from payloadcms/docs/updates-meta-descriptions
Feat: adds meta descriptions to docs
2021-02-05 15:14:48 -06:00
James
1a590287ea feat: allows upload through Local API 2021-02-05 16:09:53 -05:00
James
fd01715b5b Merge branch 'fix/add-file-to-local-operations' of github.com:payloadcms/payload into fix/add-file-to-local-operations 2021-02-05 15:20:29 -05:00
James
300536033f fix: forces fallbackLocale to null in update ops 2021-02-05 14:47:09 -05:00
Dan Ribbens
79c3ca8611 fix: update operation handles localized arrays as merge and not overwrite 2021-02-05 11:35:14 -05:00
James
e50fc1f314 fix: localized fields within blocks 2021-02-05 10:33:25 -05:00
Dan Ribbens
2e54872d66 0.2.10 2021-02-04 14:13:26 -05:00
Dan Ribbens
4f494e5444 chore: update changelog v0.2.10 2021-02-04 14:11:53 -05:00
Dan Ribbens
8916e8af45 Merge pull request #58 from payloadcms/fix/scss-variable-defaults
fix: flag scss variables with default
2021-02-04 12:38:04 -05:00
Dan Ribbens
399ddbe14b Merge pull request #56 from payloadcms/feature/mongoose-connection-options
feat: add support for setting mongoose connection options
2021-02-04 12:37:33 -05:00
Dan Ribbens
bb9f5f7a16 fix: flag scss variables with default 2021-02-04 12:10:48 -05:00
Jessica Boezwinkle
3999400049 fix: removes outdated link from docs-config-overview 2021-02-04 11:41:56 -05:00
Jessica Boezwinkle
1ed189cfb9 fix: reverts ESLint syntax changes to mdx files 2021-02-04 11:36:09 -05:00
Dan Ribbens
82c489841c feat: add support for setting mongoose connection options 2021-02-04 11:28:46 -05:00
Jessica Boezwinkle
7c5d582757 Merge branch 'master' of https://github.com/payloadcms/payload into docs/updates-meta-descriptions 2021-02-04 11:07:48 -05:00
Jessica Boezwinkle
da61feb73b feat: adds meta descriptions to docs 2021-02-04 11:04:18 -05:00
James Mikrut
3facbf99d8 Merge pull request #55 from payloadcms/fix/relationship-hasmany-false
fix: relationship component hasMany bug
2021-02-03 16:59:35 -06:00
James
d5407060d0 fix: relationship component hasMany bug 2021-02-03 17:55:19 -05:00
Dan Ribbens
3bd0de0a0b Merge pull request #53 from payloadcms/fix/hide-force-unlock-on-create-admin-ui
fix: hide force unlock in admin ui when creating auth collection item
2021-02-03 14:58:14 -05:00
Dan Ribbens
1ad98ed4a4 fix: hide force unlock in admin ui when creating auth collection item 2021-02-03 14:51:50 -05:00
Dan Ribbens
4f4e70c99e Merge pull request #50 from payloadcms/feature/create-first-user-confirm-password
feat: admin ui create first user add confirm password field
2021-02-03 13:38:46 -05:00
Dan Ribbens
60453fec9e feat: admin ui create first user add confirm password field 2021-02-03 11:13:55 -05:00
Dan Ribbens
51c021d3be fix: add file to create and update local operations 2021-01-29 12:54:40 -05:00
Dan Ribbens
1358a35580 0.2.9 2021-01-27 01:00:28 -05:00
Dan Ribbens
3d1ee33521 Merge pull request #41 from payloadcms/fix/validation-type-allow-promise
fix: field valiation type can return promise
2021-01-27 00:58:53 -05:00
Dan Ribbens
06ddab1249 fix: field valiation type can return promise 2021-01-27 00:54:41 -05:00
Dan Ribbens
1b6f1b5a77 0.2.8 2021-01-26 21:09:21 -05:00
Dan Ribbens
0c9a6e9449 Merge pull request #39 from payloadcms/chore/package-keywords
chore: add bugs and keywords to package.json
2021-01-26 21:05:08 -05:00
Dan Ribbens
37f5b32833 chore: add bugs and keywords to package.json 2021-01-26 17:29:04 -05:00
Elliot DeNolf
e0b1aa2f4d chore: update changelog 2021-01-25 22:30:01 -05:00
Elliot DeNolf
853963ff61 0.2.6 2021-01-25 15:43:53 -05:00
Elliot DeNolf
ebb1a602be chore: fix package.json version 2021-01-25 15:35:03 -05:00
Elliot DeNolf
928230cc5d chore: add blank line to CHANGELOG.md 2021-01-25 15:30:58 -05:00
Elliot DeNolf
7998c4e36c chore: add CHANGELOG.md 2021-01-25 15:22:23 -05:00
Elliot DeNolf
a263df5bf4 chore: add registry url to package.json 2021-01-25 15:19:35 -05:00
Elliot DeNolf
ed37064e09 chore: full build for pretest 2021-01-25 15:12:33 -05:00
Elliot DeNolf
468df67384 chore: release-it publishConfig changes 2021-01-25 15:08:34 -05:00
Elliot DeNolf
fca7a4c31e chore: release-it skip npm checks 2021-01-25 14:55:38 -05:00
Elliot DeNolf
fd539e0a35 Merge pull request #35 from payloadcms/fix/field-gutter-styles
fix: field gutter padding
2021-01-25 14:41:45 -05:00
James
90d20786c3 fix: field gutter padding 2021-01-25 14:20:04 -05:00
Elliot DeNolf
c9b8a68b43 Merge pull request #34 from payloadcms/release-it-changelog 2021-01-25 09:33:34 -05:00
Elliot DeNolf
cc35c3d012 chore: adjust release-it configuration 2021-01-25 09:27:45 -05:00
Elliot DeNolf
3a2fe5ae96 chore: add release-it and needed scripts 2021-01-25 09:16:06 -05:00
James
8218343b6c fix: richtext sticky toolbar within block 2021-01-24 15:03:03 -05:00
James
72427f8f39 0.2.4 2021-01-24 13:50:11 -05:00
James Mikrut
01a3bf930e Merge pull request #30 from payloadcms/fix/blocks-css
fix: block field styles
2021-01-24 13:45:58 -05:00
James
36f0bd81eb fix: block field styles 2021-01-24 13:12:53 -05:00
James
f1fdad5023 0.2.3 2021-01-24 12:37:22 -05:00
James Mikrut
90f222ccfb Merge pull request #29 from payloadcms/fix/modal-height
fix: ensures modal heights are 100% of viewport
2021-01-24 12:36:31 -05:00
James
7edab5d354 fix: ensures modal heights are 100% of viewport 2021-01-24 12:35:05 -05:00
James
c84288c0d9 0.2.2 2021-01-24 12:00:49 -05:00
James Mikrut
5d0175e007 Merge pull request #28 from payloadcms/feat/restrict-serverurl-path
Feat/restrict serverurl path
2021-01-24 11:57:40 -05:00
James
174fa99ecd chore: removes old config schema validation 2021-01-24 11:52:22 -05:00
James
75056e2e13 feat: adds better serverURL validation 2021-01-24 11:49:23 -05:00
James
fce56a0e82 Merge branch 'master' of github.com:payloadcms/payload into feat/restrict-serverurl-path 2021-01-24 11:26:25 -05:00
Elliot DeNolf
7914106953 Merge pull request #27 from payloadcms/server-url-fix 2021-01-24 11:26:05 -05:00
Elliot DeNolf
e638efa847 docs: revert serverURL changes 2021-01-24 11:23:11 -05:00
Elliot DeNolf
f558bd2733 fix: revert serverURL config change 2021-01-24 11:13:33 -05:00
Elliot DeNolf
bd446b60b8 Revert "docs: configuration overview describe serverURL and removed from code examples where not needed"
This reverts commit 5af3520aca.
2021-01-24 11:12:58 -05:00
James
e538598e81 docs: fixes broken link 2021-01-24 10:47:35 -05:00
James
f995ec1682 chore: moves config paths from user-facing to internal type 2021-01-24 10:47:29 -05:00
James
625ff078fe 0.2.1 2021-01-24 10:33:31 -05:00
James Mikrut
1760d41729 Merge pull request #25 from payloadcms/feat/expose-types
feat: exposes further types
2021-01-24 10:32:47 -05:00
James
e056348850 feat: exposes further types 2021-01-24 10:29:57 -05:00
Elliot DeNolf
53f7c60267 0.2.0 2021-01-23 16:06:21 -05:00
Elliot DeNolf
2f4be13018 Merge pull request #23 from payloadcms/tsconfig-target
fix: target es2019, optional chaining not supported for Node < 14
2021-01-23 16:01:36 -05:00
Elliot DeNolf
52a0096d3b fix: target es2019, optional chaining not supported for Node < 14 2021-01-23 15:58:50 -05:00
Elliot DeNolf
c8d656f1d9 Merge pull request #10 from payloadcms/feature/allow-admin-verify 2021-01-23 15:54:47 -05:00
Elliot DeNolf
08c6628fbd Merge pull request #20 from payloadcms/fix/filter-operators
fix: migrates Condition UI value/operator pattern
2021-01-23 15:53:29 -05:00
Elliot DeNolf
4102ca37dc Merge pull request #19 from payloadcms/fix/button-css-order
fix: button css specificity
2021-01-23 15:52:53 -05:00
Elliot DeNolf
5bfddbf71c Merge pull request #9 from alexander-chi/patch-1
Update fields.mdx to add missing comma
2021-01-23 15:51:01 -05:00
Elliot DeNolf
02a89626f0 Merge pull request #22 from payloadcms/feature/contributing
feat: adds contributing guidelines
2021-01-23 15:49:46 -05:00
James
de5bf6ea28 feat: adds contributing guidelines 2021-01-23 12:43:42 -05:00
Elliot DeNolf
cd3f0af79b chore: add pr template 2021-01-22 21:54:46 -05:00
James
dd31818051 docs: typo in graphql 2021-01-22 17:15:39 -05:00
James
2139eb410f feat: auto-removes verificationToken upon manual user verify 2021-01-22 17:13:27 -05:00
James
d23cc20b3d fix: migrates Condition UI value/operator pattern 2021-01-22 16:17:13 -05:00
James
d8b52337b2 fix: button css specificity 2021-01-22 15:49:39 -05:00
Dan Ribbens
9126268a32 Merge pull request #18 from payloadcms/0.1.147
0.1.147
2021-01-19 14:46:57 -05:00
Dan Ribbens
ca89368782 release: v0.1.147 2021-01-19 14:42:38 -05:00
Dan Ribbens
b41028cf37 Merge remote-tracking branch 'origin/fix/sendemail-error-catch' 2021-01-19 14:23:33 -05:00
Dan Ribbens
0f9c6b6ff2 Merge remote-tracking branch 'origin/feat/serverurl-not-required' 2021-01-19 14:16:27 -05:00
Elliot DeNolf
e2c7742265 0.1.146 2021-01-17 22:45:52 -05:00
Elliot DeNolf
1f40afb2fc Merge pull request #15 from payloadcms/fix/14/localized-groups
fix: localized groups
2021-01-17 22:43:18 -05:00
Elliot DeNolf
e4ef946020 Merge pull request #16 from payloadcms/fix-13-textarea-validation 2021-01-17 22:43:04 -05:00
Elliot DeNolf
5d7b9af23e test: add field validations for text, textarea, password 2021-01-17 22:39:57 -05:00
Elliot DeNolf
ba31397ac1 fix: textarea handle undefined 2021-01-17 22:39:50 -05:00
James
f38e0fce98 fix: localized groups 2021-01-17 21:20:38 -05:00
Elliot DeNolf
c12d4757a4 chore: add issue templates 2021-01-17 14:50:49 -05:00
Elliot DeNolf
191a71ab67 chore: use og-image for readme 2021-01-17 10:39:44 -05:00
Elliot DeNolf
a4e7cd1fb9 0.1.145 2021-01-16 21:37:42 -05:00
Elliot DeNolf
5e60b8617e fix: minLength field validation error messages 2021-01-16 21:24:03 -05:00
Elliot DeNolf
2c98087c6f fix: add minLength and maxLength to textarea field validations 2021-01-16 21:23:26 -05:00
James
a6a23e3b15 feat: allows admins to autoverify via admin 2021-01-16 18:23:26 -05:00
Alexander Chi
6e9f2afd61 Update fields.mdx to add missing comma 2021-01-16 22:38:26 +00:00
Dan Ribbens
5af3520aca docs: configuration overview describe serverURL and removed from code examples where not needed 2021-01-16 16:51:21 -05:00
Dan Ribbens
4770f24adb feat: serverURL no longer required in config 2021-01-16 16:48:09 -05:00
Elliot DeNolf
b57239e2e7 0.1.144 2021-01-16 09:58:09 -05:00
Elliot DeNolf
ba02ad66c7 chore: add build:watch script 2021-01-15 23:54:26 -05:00
Elliot DeNolf
45681d632a ci: update pretest build step 2021-01-15 23:53:01 -05:00
Elliot DeNolf
b2d05c781d fix: add default user to collections before checking for valid relationships 2021-01-15 23:39:16 -05:00
Elliot DeNolf
c303711813 fix: handle user collection 'auth: true' 2021-01-15 15:51:17 -05:00
Dan Ribbens
ea47736274 fix: better error handler when sendMail fails 2021-01-14 16:00:09 -05:00
James
45708771b0 docs: fixes broken link 2021-01-13 21:15:19 -05:00
471 changed files with 15456 additions and 6836 deletions

View File

@@ -42,7 +42,8 @@ module.exports = {
},
],
rules: {
"import/no-extraneous-dependencies": ["error", { "packageDir": "./" }],
'no-sparse-arrays': 'off',
'import/no-extraneous-dependencies': ["error", { "packageDir": "./" }],
'react/jsx-filename-extension': [2, { extensions: ['.js', '.jsx', '.ts', '.tsx'] }],
'import/prefer-default-export': 'off',
'react/prop-types': 'off',

33
.github/ISSUE_TEMPLATE/BUG_REPORT.md vendored Normal file
View File

@@ -0,0 +1,33 @@
---
name: Bug Report
about: Create a bug report for Payload
labels: 'bug'
---
# Bug Report
<!--- Provide a general summary of the issue in the Title above -->
## Expected Behavior
<!--- Tell us what should happen -->
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
## Steps to Reproduce
<!--- Steps to reproduce this bug. Include any code, if relevant -->
1.
2.
3.
4.
## Detailed Description
<!--- Provide any other additional details -->
<!--- Payload version, browser, etc -->

View File

@@ -0,0 +1,13 @@
---
name: Documentation Issue
about: Suggest fix to Payload documentation
labels: 'documentation'
---
# Documentation Issue
<!--- Please provide a summary of the documentation issue -->
## Additional Details
<!--- Provide any other additional details -->

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Feature Request
url: https://github.com/payloadcms/payload/discussions
about: Suggest an idea to improve Payload in our GitHub Discussions
- name: Question about Payload
url: https://github.com/payloadcms/payload/discussions
about: Please ask Payload-related questions in our GitHub Discussions

20
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,20 @@
## Description
<!-- Please include a summary of the pull request and any related issues it fixes. Please also include relevant motivation and context. -->
- [ ] I have read and understand the CONTRIBUTING.md document in this repository
## Type of change
<!-- Please delete options that are not relevant. -->
- [ ] 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)
- [ ] This change requires a documentation update
## Checklist:
- [ ] 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

@@ -3,11 +3,11 @@ name: build
on: [push]
jobs:
build:
build_yarn:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x, 12.x]
node-version: [12.x, 14.x, 15.x, 16.x]
steps:
- uses: actions/checkout@v2
@@ -35,3 +35,30 @@ jobs:
- run: yarn test:int # In-memory db + api tests
env:
CI: true
install_npm:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org
scope: '@payloadcms'
always-auth: true
- name: Cache node modules
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-${{ env.cache-name }}-
${{ runner.os }}-npm-
${{ runner.os }}-
- run: npm install --legacy-peer-deps
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

25
.release-it.beta.json Normal file
View File

@@ -0,0 +1,25 @@
{
"preReleaseId": "beta",
"git": {
"requireCleanWorkingDir": false,
"commit": false,
"push": false,
"tag": false
},
"github": {
"release": false
},
"npm": {
"skipChecks": true,
"tag": "beta"
},
"hooks": {
"before:init": ["yarn", "yarn clean", "yarn test"]
},
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular",
"infile": "CHANGELOG.md"
}
}
}

21
.release-it.json Normal file
View File

@@ -0,0 +1,21 @@
{
"git": {
"commitMessage": "chore(release): v${version}",
"requireCleanWorkingDir": true
},
"github": {
"release": true
},
"npm": {
"skipChecks": true
},
"hooks": {
"before:init": ["yarn", "yarn clean", "yarn test"]
},
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular",
"infile": "CHANGELOG.md"
}
}
}

3
.vscode/launch.json vendored
View File

@@ -14,10 +14,11 @@
"--runInBand"
],
"env": {
"PAYLOAD_CONFIG_PATH": "demo/payload.config.js"
"PAYLOAD_CONFIG_PATH": "demo/payload.config.ts"
},
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/babel-node",
"port": 9229,
"skipFiles": [
"<node_internals>/**"

1200
CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -14,10 +14,9 @@
</p>
<a href="https://payloadcms.com">
<img src="https://payloadcms.com/images/admin.jpg" alt="Payload headless CMS Admin panel built with React" />
<img src="https://payloadcms.com/images/og-image.jpg" alt="Payload headless CMS Admin panel built with React" />
</a>
### Quick Start
```
@@ -52,14 +51,14 @@ Check out the [Payload website](https://payloadcms.com/docs/getting-started/what
If you know JavaScript, you know Payload. Payload is a _code-first_ CMS, which allows us to do a lot of things right:
- Payload gives you everything you need, but then steps back and lets you build what you want in JavaScript or TypeScript - with no unnecessary complexity brought by GUIs. You'll understand how your CMS works, because you will have wrote it exactly how you want it.
- Payload gives you everything you need, but then steps back and lets you build what you want in JavaScript or TypeScript - with no unnecessary complexity brought by GUIs. You'll understand how your CMS works, because you will have written it exactly how you want it.
- Bring your own Express server and do whatever you need on top of Payload. Payload doesn't impose anything on you or your app.
- Completely control the Admin panel by using your own React components. Swap out fields or even entire views with ease.
- Use your data however and wherever you need thanks to auto-generated, yet fully extensible REST, GraphQL and Local Node APIs.
### Free for development use
### Free forever for personal use and small projects
Payload is 100% free for use on local environments such as `localhost` and staging sites such as `staging.mycoolsite.com`. When it's time to go to production, Payload charges a low and flat fee that doesn't change whatsoever based on your usage.
Payload is 100% free for personal projects or small use cases where only one admin user is required. You can also get started without an account whatsoever while running on `localhost`.
## Installation

3
babel.js Normal file
View File

@@ -0,0 +1,3 @@
const babelConfig = require('./dist/babel.config');
exports.config = babelConfig;

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props, RenderArrayProps } from '../../dist/admin/components/forms/field-types/Array/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props, RenderBlockProps } from '../../dist/admin/components/forms/field-types/Blocks/types';

View File

@@ -0,0 +1 @@
export { Props } from '../../dist/admin/components/views/collections/List/Cell/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Checkbox/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Code/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/DateTime/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Email/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Group/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Number/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Password/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../../dist/admin/components/forms/field-types/RadioGroup/RadioInput/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../../dist/admin/components/forms/field-types/RadioGroup/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props, Option, ValueWithRelation } from '../../dist/admin/components/forms/field-types/Relationship/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/RichText/types';

2
components/fields/Row.ts Normal file
View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Row/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props, Option } from '../../dist/admin/components/forms/field-types/Select/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Text/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Textarea/types';

View File

@@ -0,0 +1,2 @@
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/forms/field-types/Upload/types';

View File

@@ -15,5 +15,6 @@ export { default as Group } from '../dist/admin/components/forms/field-types/Gro
export { default as Select } from '../dist/admin/components/forms/field-types/Select';
export { default as Checkbox } from '../dist/admin/components/forms/field-types/Checkbox';
export { default as Submit } from '../dist/admin/components/forms/Submit';
export { default as Label } from '../dist/admin/components/forms/Label';
export { default as reduceFieldsToValues } from '../dist/admin/components/forms/Form/reduceFieldsToValues';

1
components/index.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
export * from '../dist/admin/components';

View File

@@ -0,0 +1 @@
export { usePreferences } from '../dist/admin/components/utilities/Preferences';

View File

@@ -1,2 +0,0 @@
export { default as Edit } from '../dist/admin/components/views/collections/Edit/Default';
export { default as List } from '../dist/admin/components/views/collections/List/Default';

3
components/views/Cell.ts Normal file
View File

@@ -0,0 +1,3 @@
export { default as Cell } from '../../dist/admin/components/views/collections/List/Cell';
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/views/collections/List/Cell/types';

3
components/views/Edit.ts Normal file
View File

@@ -0,0 +1,3 @@
export { default as Edit } from '../../dist/admin/components/views/collections/Edit/Default';
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/views/collections/Edit/types';

3
components/views/List.ts Normal file
View File

@@ -0,0 +1,3 @@
export { default as List } from '../../dist/admin/components/views/collections/List/Default';
// eslint-disable-next-line import/named
export { Props } from '../../dist/admin/components/views/collections/Edit/types';

33
contributing.md Normal file
View File

@@ -0,0 +1,33 @@
# Contributing to Payload CMS
Below you'll find a set of guidelines for how to contribute to Payload CMS.
## Payload is proprietary software
Even though you can read Payload's source code, it's technically not "open source". Payload requires an active license to be used in all production purposes. That said, we do not expect PRs from the public, but we still welcome pull requests of any kind.
## Opening issues
Before you submit an issue, please check all existing [open and closed issues](https://github.com/payloadcms/payload/issues) to see if your issue has previously been resolved or is already known. If there is already an issue logged, feel free to upvote it by adding a :thumbsup: [reaction](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments). If you would like to submit a new issue, please fill out our Issue Template to the best of your ability so we can accurately understand your report.
## Security issues & vulnerabilities
If you come across an issue related to security, or a potential attack vector within Payload or one of its dependencies, please DO NOT create a publicly viewable issue. Instead, please contact us directly at [`dev@payloadcms.com`](mailto:dev@payloadcms.com). We will do everything we can to respond to the issue as soon as possible.
If you find a vulnerability within the core Payload repository, and we determine that it is remediable and of significant nature, we will be happy to pay you a reward for your findings and diligence. [`Contact us`](mailto:dev@payloadcms.com) to find out more.
## Documentation edits
Payload documentation can be found directly within its codebase and you can feel free to make changes / improvements to any of it through opening a PR. We utilize these files directly in our website and will periodically deploy documentation updates as necessary.
## Building additional features
If you're an incredibly awesome person and want to help us make Payload even better through new features or additions, we would be thrilled to work with you. If your proposed feature is accepted by our team and is significant enough, pending our discretion, we'd be happy to hook you up with a pro-bono license.
To help us work on new features, you can reach out to our Development team at [`dev@payloadcms.com`](mailto:dev@payloadcms.com). Be as complete and descriptive as possible regarding your vision and we'll go from there!
## Pull Requests
For all Pull Requests, you should be extremely descriptive about both your problem and proposed solution. If there are any affected open or closed issues, please leave the issue number in your PR message.
By opening a Pull Request against Payload's codebase, you automatically give the entirety of the contribution within your PR to Payload CMS, LLC and retain no personal ownership whatsoever afterward. For more information, please read the full [Payload license](https://github.com/payloadcms/payload/blob/master/license.md).

View File

@@ -1,4 +1,4 @@
@import '../../../../../../../scss/vars.scss';
@import '../../../../../../../src/admin/scss/styles.scss';
.button-rich-text-button {
.btn {

View File

@@ -1,8 +1,7 @@
import React, { Fragment, useCallback } from 'react';
import PropTypes from 'prop-types';
import { Modal, useModal } from '@faceless-ui/modal';
import { Transforms } from 'slate';
import { useSlate } from 'slate-react';
import { useSlate, ReactEditor } from 'slate-react';
import MinimalTemplate from '../../../../../../../src/admin/components/templates/Minimal';
import { ElementButton } from '../../../../../../../components/rich-text';
import X from '../../../../../../../src/admin/components/icons/X';
@@ -17,7 +16,7 @@ const initialFormData = {
style: 'primary',
};
const insertButton = (editor, { href, label, style, newTab = false }) => {
const insertButton = (editor, { href, label, style, newTab = false }: any) => {
const text = { text: ' ' };
const button = {
type: 'button',
@@ -32,10 +31,20 @@ const insertButton = (editor, { href, label, style, newTab = false }) => {
const nodes = [button, { children: [{ text: '' }] }];
if (editor.blurSelection) {
Transforms.select(editor, editor.blurSelection);
}
Transforms.insertNodes(editor, nodes);
const currentPath = editor.selection.anchor.path[0];
const newSelection = { anchor: { path: [currentPath + 1, 0], offset: 0 }, focus: { path: [currentPath + 1, 0], offset: 0 } };
Transforms.select(editor, newSelection);
ReactEditor.focus(editor);
};
const ToolbarButton: React.FC = ({ path }) => {
const ToolbarButton: React.FC<{path: string}> = ({ path }) => {
const { open, closeAll } = useModal();
const editor = useSlate();
@@ -112,8 +121,4 @@ const ToolbarButton: React.FC = ({ path }) => {
);
};
ToolbarButton.propTypes = {
path: PropTypes.string.isRequired,
};
export default ToolbarButton;

View File

@@ -1,4 +1,4 @@
@import '../../../../../../../scss/vars.scss';
@import '../../../../../../../src/admin/scss/styles.scss';
.rich-text-button {
margin: $baseline 0;

View File

@@ -1,4 +1,4 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import roles from '../access/roles';
import checkRole from '../access/checkRole';
@@ -7,7 +7,7 @@ const access = ({ req: { user } }) => {
return result;
};
const Admin: PayloadCollectionConfig = {
const Admin: CollectionConfig = {
slug: 'admins',
labels: {
singular: 'Admin',
@@ -44,23 +44,17 @@ const Admin: PayloadCollectionConfig = {
saveToJWT: true,
hasMany: true,
},
{
name: 'publicUser',
type: 'relationship',
hasMany: true,
relationTo: 'public-users',
},
{
name: 'apiKey',
type: 'text',
access: {
read: ({ req: { user } }) => {
if (checkRole(['admin'], user)) {
return true;
}
if (user) {
return {
email: user.email,
};
}
return false;
},
read: ({ req: { user } }) => checkRole(['admin'], user),
},
},
],

View File

@@ -1,11 +1,12 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import checkRole from '../access/checkRole';
import Email from '../blocks/Email';
import Quote from '../blocks/Quote';
import NumberBlock from '../blocks/Number';
import CallToAction from '../blocks/CallToAction';
import CollectionDescription from '../customComponents/CollectionDescription';
const AllFields: PayloadCollectionConfig = {
const AllFields: CollectionConfig = {
slug: 'all-fields',
labels: {
singular: 'All Fields',
@@ -13,13 +14,16 @@ const AllFields: PayloadCollectionConfig = {
},
admin: {
useAsTitle: 'text',
preview: (doc, token) => {
if (doc && doc.text) {
return `http://localhost:3000/previewable-posts/${doc.text.value}?preview=true&token=${token}`;
preview: (doc, { token }) => {
const { text } = doc;
if (doc && text) {
return `http://localhost:3000/previewable-posts/${text}?preview=true&token=${token}`;
}
return null;
},
description: CollectionDescription,
},
access: {
read: () => true,
@@ -38,11 +42,33 @@ const AllFields: PayloadCollectionConfig = {
read: ({ req: { user } }) => Boolean(user),
},
},
{
name: 'descriptionText',
type: 'text',
label: 'Text with text description',
defaultValue: 'Default Value',
admin: {
description: 'This text describes the field',
},
},
{
name: 'descriptionFunction',
type: 'text',
label: 'Text with function description',
defaultValue: 'Default Value',
maxLength: 20,
admin: {
description: ({ value }) => (typeof value === 'string' ? `${20 - value.length} characters left` : ''),
},
},
{
name: 'image',
type: 'upload',
label: 'Image',
relationTo: 'media',
admin: {
description: 'No selfies',
},
},
{
name: 'select',
@@ -85,20 +111,11 @@ const AllFields: PayloadCollectionConfig = {
required: true,
hasMany: true,
},
{
name: 'dateFieldExample',
label: 'Day and Time',
type: 'date',
admin: {
date: {
timeIntervals: 30,
},
},
},
{
name: 'dayOnlyDateFieldExample',
label: 'Day Only',
type: 'date',
required: true,
admin: {
date: {
pickerAppearance: 'dayOnly',
@@ -234,6 +251,9 @@ const AllFields: PayloadCollectionConfig = {
label: 'Relationship to One Collection',
name: 'relationship',
relationTo: 'conditions',
admin: {
description: 'Relates to description',
},
},
{
type: 'relationship',
@@ -252,24 +272,8 @@ const AllFields: PayloadCollectionConfig = {
type: 'textarea',
label: 'Textarea',
name: 'textarea',
},
{
name: 'slug',
type: 'text',
label: 'Slug',
admin: {
position: 'sidebar',
},
localized: true,
unique: true,
required: true,
},
{
name: 'checkbox',
type: 'checkbox',
label: 'Checkbox',
admin: {
position: 'sidebar',
description: 'Hello textarea description',
},
},
{
@@ -298,6 +302,36 @@ const AllFields: PayloadCollectionConfig = {
],
},
},
{
name: 'slug',
type: 'text',
label: 'Slug',
admin: {
position: 'sidebar',
},
localized: true,
unique: true,
required: true,
},
{
name: 'checkbox',
type: 'checkbox',
label: 'Checkbox',
admin: {
position: 'sidebar',
},
},
{
name: 'dateFieldExample',
label: 'Day and Time',
type: 'date',
admin: {
position: 'sidebar',
date: {
timeIntervals: 30,
},
},
},
],
timestamps: true,
};

View File

@@ -1,12 +1,102 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const AutoLabel: PayloadCollectionConfig = {
const AutoLabel: CollectionConfig = {
slug: 'auto-label',
fields: [{
name: 'text',
type: 'text',
label: 'Text',
}],
admin: {
useAsTitle: 'autoLabelField',
enableRichTextRelationship: true,
},
fields: [
{
name: 'autoLabelField',
type: 'text',
},
{
name: 'noLabel',
type: 'text',
label: false,
},
{
name: 'labelOverride',
type: 'text',
label: 'Custom Label',
},
{
name: 'testRelationship',
type: 'relationship',
relationTo: 'all-fields',
},
{
name: 'specialBlock',
type: 'blocks',
minRows: 1,
maxRows: 20,
// Will auto-label
// labels: {
// singular: 'Special Block',
// plural: 'Special Blocks',
// },
blocks: [
{
slug: 'number',
// Will auto-label
// labels: {
// singular: 'Number',
// plural: 'Numbers',
// },
fields: [
{
name: 'testNumber',
type: 'number',
},
],
},
],
},
{
name: 'noLabelBlock',
type: 'blocks',
label: false,
minRows: 1,
maxRows: 20,
blocks: [
{
slug: 'number',
// labels: {
// singular: 'Number',
// plural: 'Numbers',
// },
fields: [
{
name: 'testNumber',
type: 'number',
},
],
},
],
},
{
name: 'items',
type: 'array',
fields: [
{
name: 'itemName',
type: 'text',
},
],
},
{
name: 'noLabelArray',
type: 'array',
label: false,
fields: [
{
type: 'text',
name: 'textField',
},
],
},
],
};
export default AutoLabel;

View File

@@ -1,10 +1,10 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import Email from '../blocks/Email';
import Quote from '../blocks/Quote';
import NumberBlock from '../blocks/Number';
import CallToAction from '../blocks/CallToAction';
const Blocks: PayloadCollectionConfig = {
const Blocks: CollectionConfig = {
slug: 'blocks',
labels: {
singular: 'Blocks',

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const Code: PayloadCollectionConfig = {
const Code: CollectionConfig = {
slug: 'code',
labels: {
singular: 'Code',
@@ -14,6 +14,7 @@ const Code: PayloadCollectionConfig = {
required: true,
admin: {
language: 'js',
description: 'javascript example',
},
},
],

View File

@@ -1,6 +1,10 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import Email from '../blocks/Email';
import Quote from '../blocks/Quote';
import NumberBlock from '../blocks/Number';
import CallToAction from '../blocks/CallToAction';
const Conditions: PayloadCollectionConfig = {
const Conditions: CollectionConfig = {
slug: 'conditions',
labels: {
singular: 'Conditions',
@@ -49,6 +53,20 @@ const Conditions: PayloadCollectionConfig = {
condition: (_, siblings) => (siblings.number > 20 && siblings.enableTest === true) || (siblings.number < 20 && siblings.enableTest === false),
},
},
{
name: 'blocks',
label: 'Blocks',
labels: {
singular: 'Block',
plural: 'Blocks',
},
type: 'blocks',
blocks: [Email, NumberBlock, Quote, CallToAction],
required: true,
admin: {
condition: (_, siblings) => siblings?.enableTest === true,
},
},
],
};

View File

@@ -1,4 +1,4 @@
import { PayloadCollectionConfig } from '../../../src/collections/config/types';
import { CollectionConfig } from '../../../src/collections/config/types';
import DescriptionField from './components/fields/Description/Field';
import DescriptionCell from './components/fields/Description/Cell';
import DescriptionFilter from './components/fields/Description/Filter';
@@ -7,8 +7,9 @@ import GroupField from './components/fields/Group/Field';
import NestedGroupField from './components/fields/NestedGroupCustomField/Field';
import NestedText1Field from './components/fields/NestedText1/Field';
import ListView from './components/views/List';
import CustomDescriptionComponent from '../../customComponents/Description';
const CustomComponents: PayloadCollectionConfig = {
const CustomComponents: CollectionConfig = {
slug: 'custom-components',
labels: {
singular: 'Custom Component',
@@ -38,6 +39,14 @@ const CustomComponents: PayloadCollectionConfig = {
},
},
},
{
name: 'componentDescription',
label: 'Component ViewDescription',
type: 'text',
admin: {
description: CustomDescriptionComponent,
},
},
{
name: 'array',
label: 'Array',

View File

@@ -0,0 +1,22 @@
import { CollectionConfig } from '../../src/collections/config/types';
const CustomID: CollectionConfig = {
slug: 'custom-id',
labels: {
singular: 'CustomID',
plural: 'CustomIDs',
},
fields: [
{
name: 'id',
type: 'number',
},
{
name: 'name',
type: 'text',
required: true,
},
],
};
export default CustomID;

View File

@@ -1,11 +1,11 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import checkRole from '../access/checkRole';
import Email from '../blocks/Email';
import Quote from '../blocks/Quote';
import NumberBlock from '../blocks/Number';
import CallToAction from '../blocks/CallToAction';
const DefaultValues: PayloadCollectionConfig = {
const DefaultValues: CollectionConfig = {
slug: 'default-values',
labels: {
singular: 'Default Value Test',

View File

@@ -1,4 +1,4 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import checkRole from '../access/checkRole';
const access = ({ req: { user } }) => {
@@ -19,7 +19,7 @@ const access = ({ req: { user } }) => {
return false;
};
const Files: PayloadCollectionConfig = {
const Files: CollectionConfig = {
slug: 'files',
labels: {
singular: 'File',

View File

@@ -0,0 +1,81 @@
/* eslint-disable no-param-reassign */
import { CollectionConfig } from '../../src/collections/config/types';
const validateFieldTransformAction = (hook: string, value) => {
if (value !== undefined && value !== null && !Array.isArray(value)) {
console.error(hook, value);
throw new Error('Field transformAction should convert value to array [x, y] and not { coordinates: [x, y] }');
}
return value;
};
const Geolocation: CollectionConfig = {
slug: 'geolocation',
labels: {
singular: 'Geolocation',
plural: 'Geolocations',
},
access: {
read: () => true,
},
hooks: {
beforeRead: [
(operation) => operation.doc,
],
beforeChange: [
(operation) => {
// eslint-disable-next-line no-param-reassign,operator-assignment
operation.data.beforeChange = !operation.data.location?.coordinates;
return operation.data;
},
],
afterRead: [
(operation) => {
const { doc } = operation;
doc.afterReadHook = !doc.location?.coordinates;
return doc;
},
],
afterChange: [
(operation) => {
const { doc } = operation;
doc.afterChangeHook = !doc.location?.coordinates;
return doc;
},
],
afterDelete: [
(operation) => {
const { doc } = operation;
operation.doc.afterDeleteHook = !doc.location?.coordinates;
return doc;
},
],
},
fields: [
{
name: 'location',
type: 'point',
label: 'Location',
hooks: {
beforeValidate: [({ value }) => validateFieldTransformAction('beforeValidate', value)],
beforeChange: [({ value }) => validateFieldTransformAction('beforeChange', value)],
afterChange: [({ value }) => validateFieldTransformAction('afterChange', value)],
afterRead: [({ value }) => validateFieldTransformAction('afterRead', value)],
},
},
{
name: 'localizedPoint',
type: 'point',
label: 'Localized Point',
localized: true,
hooks: {
beforeValidate: [({ value }) => validateFieldTransformAction('beforeValidate', value)],
beforeChange: [({ value }) => validateFieldTransformAction('beforeChange', value)],
afterChange: [({ value }) => validateFieldTransformAction('afterChange', value)],
afterRead: [({ value }) => validateFieldTransformAction('afterRead', value)],
},
},
],
};
export default Geolocation;

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const HiddenFields: PayloadCollectionConfig = {
const HiddenFields: CollectionConfig = {
slug: 'hidden-fields',
labels: {
singular: 'Hidden Fields',

View File

@@ -1,8 +1,8 @@
/* eslint-disable no-param-reassign */
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const Hooks: PayloadCollectionConfig = {
const Hooks: CollectionConfig = {
slug: 'hooks',
labels: {
singular: 'Hook',
@@ -28,7 +28,7 @@ const Hooks: PayloadCollectionConfig = {
beforeChange: [
(operation) => {
if (operation.req.headers.hook === 'beforeChange') {
operation.req.body.description += '-beforeChangeSuffix';
operation.data.description += '-beforeChangeSuffix';
}
return operation.data;
},

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const LocalOperations: PayloadCollectionConfig = {
const LocalOperations: CollectionConfig = {
slug: 'local-operations',
labels: {
singular: 'Local Operation',
@@ -15,7 +15,7 @@ const LocalOperations: PayloadCollectionConfig = {
});
const blocksGlobal = await req.payload.findGlobal({
global: 'blocks-global',
slug: 'blocks-global',
});
formattedData.localizedPosts = localizedPosts;

View File

@@ -1,6 +1,34 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import { PayloadRequest } from '../../src/express/types';
import { Block } from '../../src/fields/config/types';
const LocalizedPosts: PayloadCollectionConfig = {
const validateLocalizationTransform = (hook: string, value, req: PayloadRequest) => {
if (req.locale !== 'all' && value !== undefined && typeof value !== 'string') {
console.error(hook, value);
throw new Error('Locale transformation should happen before hook is called');
}
return value;
};
const RichTextBlock: Block = {
slug: 'richTextBlock',
labels: {
singular: 'Rich Text Block',
plural: 'Rich Text Blocks',
},
fields: [
{
name: 'content',
localized: true,
type: 'richText',
admin: {
hideGutter: true,
},
},
],
};
const LocalizedPosts: CollectionConfig = {
slug: 'localized-posts',
labels: {
singular: 'Localized Post',
@@ -27,6 +55,12 @@ const LocalizedPosts: PayloadCollectionConfig = {
required: true,
unique: true,
localized: true,
hooks: {
beforeValidate: [({ value, req }) => validateLocalizationTransform('beforeValidate', value, req)],
beforeChange: [({ value, req }) => validateLocalizationTransform('beforeChange', value, req)],
afterChange: [({ value, req }) => validateLocalizationTransform('afterChange', value, req)],
afterRead: [({ value, req }) => validateLocalizationTransform('afterRead', value, req)],
},
},
{
name: 'summary',
@@ -41,6 +75,11 @@ const LocalizedPosts: PayloadCollectionConfig = {
required: true,
localized: true,
},
{
type: 'richText',
name: 'richText',
label: 'Rich Text',
},
{
name: 'priority',
label: 'Priority',
@@ -48,6 +87,54 @@ const LocalizedPosts: PayloadCollectionConfig = {
required: true,
localized: true,
},
{
name: 'localizedGroup',
label: 'Localized Group',
type: 'group',
localized: true,
fields: [
{
type: 'text',
name: 'text',
label: 'Text',
},
],
},
{
name: 'nonLocalizedGroup',
label: 'Non-Localized Group',
type: 'group',
fields: [
{
type: 'text',
name: 'text',
label: 'Text',
localized: true,
},
],
},
{
type: 'array',
label: 'Non-Localized Array',
name: 'nonLocalizedArray',
maxRows: 3,
fields: [
{
type: 'text',
name: 'localizedEmbeddedText',
label: 'Localized Embedded Text',
localized: true,
},
],
},
{
label: 'Blocks',
name: 'richTextBlocks',
type: 'blocks',
blocks: [
RichTextBlock,
],
},
],
timestamps: true,
};

View File

@@ -1,6 +1,18 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import { FieldAccess } from '../../src/fields/config/types';
import checkRole from '../access/checkRole';
const LocalizedArrays: PayloadCollectionConfig = {
const PublicReadabilityAccess: FieldAccess = ({ req: { user }, siblingData }) => {
if (checkRole(['admin'], user)) {
return true;
}
if (siblingData?.allowPublicReadability) return true;
return false;
};
const LocalizedArrays: CollectionConfig = {
slug: 'localized-arrays',
labels: {
singular: 'Localized Array',
@@ -12,7 +24,7 @@ const LocalizedArrays: PayloadCollectionConfig = {
fields: [
{
type: 'array',
label: 'Array',
label: false,
name: 'array',
localized: true,
required: true,
@@ -22,16 +34,31 @@ const LocalizedArrays: PayloadCollectionConfig = {
{
type: 'row',
fields: [
{
name: 'allowPublicReadability',
label: 'Allow Public Readability',
type: 'checkbox',
},
{
name: 'arrayText1',
label: 'Array Text 1',
type: 'text',
required: true,
}, {
admin: {
width: '50%',
},
access: {
read: PublicReadabilityAccess,
},
},
{
name: 'arrayText2',
label: 'Array Text 2',
type: 'text',
required: true,
admin: {
width: '50%',
},
},
],
},

View File

@@ -1,6 +1,17 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig, BeforeChangeHook } from '../../src/collections/config/types';
const Media: PayloadCollectionConfig = {
const checkForUploadSizesHook: BeforeChangeHook = ({ req: { payloadUploadSizes }, data }) => {
if (typeof payloadUploadSizes === 'object') {
return {
...data,
foundUploadSizes: true,
};
}
return data;
};
const Media: CollectionConfig = {
slug: 'media',
labels: {
singular: 'Media',
@@ -11,12 +22,24 @@ const Media: PayloadCollectionConfig = {
},
admin: {
enableRichTextRelationship: true,
description: 'No selfies please',
},
hooks: {
beforeChange: [
checkForUploadSizesHook,
],
},
upload: {
staticURL: '/media',
staticDir: './media',
adminThumbnail: 'mobile',
adminThumbnail: ({ doc }) => `/media/${doc.filename}`,
imageSizes: [
{
name: 'maintainedAspectRatio',
width: 1024,
height: null,
crop: 'center',
},
{
name: 'tablet',
width: 640,
@@ -44,6 +67,10 @@ const Media: PayloadCollectionConfig = {
required: true,
localized: true,
},
{
name: 'foundUploadSizes',
type: 'checkbox',
},
],
timestamps: true,
};

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const NestedArray: PayloadCollectionConfig = {
const NestedArray: CollectionConfig = {
slug: 'nested-arrays',
labels: {
singular: 'Nested Array',
@@ -57,7 +57,6 @@ const NestedArray: PayloadCollectionConfig = {
name: 'grandchildIdentifier',
label: 'Grandchild Identifier',
type: 'text',
required: true,
},
],
},

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const Preview: PayloadCollectionConfig = {
const Preview: CollectionConfig = {
slug: 'previewable-post',
labels: {
singular: 'Previewable Post',
@@ -8,9 +8,10 @@ const Preview: PayloadCollectionConfig = {
},
admin: {
useAsTitle: 'title',
preview: (doc, token) => {
if (doc.title) {
return `http://localhost:3000/previewable-posts/${doc.title.value}?preview=true&token=${token}`;
preview: (doc, { token }) => {
const { title } = doc;
if (title) {
return `http://localhost:3000/previewable-posts/${title}?preview=true&token=${token}`;
}
return null;

View File

@@ -1,9 +1,9 @@
import checkRole from '../access/checkRole';
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const access = ({ req: { user } }) => checkRole(['admin'], user);
const PublicUsers: PayloadCollectionConfig = {
const PublicUsers: CollectionConfig = {
slug: 'public-users',
labels: {
singular: 'Public User',

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const RelationshipA: PayloadCollectionConfig = {
const RelationshipA: CollectionConfig = {
slug: 'relationship-a',
access: {
read: () => true,
@@ -17,19 +17,43 @@ const RelationshipA: PayloadCollectionConfig = {
relationTo: 'relationship-b',
localized: true,
},
// {
// name: 'LocalizedPost',
// label: 'Localized Post',
// type: 'relationship',
// relationTo: 'localized-posts',
// hasMany: true,
// localized: true,
// },
{
name: 'LocalizedPost',
label: 'Localized Post',
type: 'relationship',
relationTo: 'localized-posts',
hasMany: true,
localized: true,
},
{
name: 'postLocalizedMultiple',
label: 'Localized Post Multiple',
type: 'relationship',
relationTo: ['localized-posts', 'all-fields'],
relationTo: ['localized-posts', 'all-fields', 'custom-id'],
hasMany: true,
localized: true,
},
{
name: 'postManyRelationships',
label: 'Post Many Relationships',
type: 'relationship',
relationTo: ['relationship-b'],
localized: true,
hasMany: false,
},
{
name: 'postMaxDepth',
maxDepth: 0,
label: 'Post With MaxDepth',
type: 'relationship',
relationTo: 'relationship-b',
hasMany: false,
},
{
name: 'customID',
label: 'CustomID Relation',
type: 'relationship',
relationTo: 'custom-id',
hasMany: true,
localized: true,
},

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const RelationshipB: PayloadCollectionConfig = {
const RelationshipB: CollectionConfig = {
slug: 'relationship-b',
access: {
read: () => true,
@@ -18,6 +18,26 @@ const RelationshipB: PayloadCollectionConfig = {
localized: false,
hasMany: true,
},
{
name: 'postManyRelationships',
label: 'Post Many Relationships',
type: 'relationship',
relationTo: ['relationship-a', 'media'],
localized: true,
hasMany: false,
},
{
name: 'localizedPosts',
label: 'Localized Posts',
type: 'relationship',
hasMany: true,
relationTo: ['localized-posts', 'previewable-post'],
},
{
name: 'strictAccess',
type: 'relationship',
relationTo: 'strict-access',
},
],
timestamps: true,
};

View File

@@ -1,13 +1,16 @@
import Button from '../client/components/richText/elements/Button';
import PurpleBackground from '../client/components/richText/leaves/PurpleBackground';
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const RichText: PayloadCollectionConfig = {
const RichText: CollectionConfig = {
slug: 'rich-text',
labels: {
singular: 'Rich Text',
plural: 'Rich Texts',
},
access: {
read: () => true,
},
fields: [
{
name: 'defaultRichText',

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const Select: PayloadCollectionConfig = {
const Select: CollectionConfig = {
slug: 'select',
labels: {
singular: 'Select',
@@ -23,6 +23,31 @@ const Select: PayloadCollectionConfig = {
label: 'Select From',
required: true,
},
{
name: 'SelectHasMany',
type: 'select',
options: [{
value: 'one',
label: 'One',
}, {
value: 'two',
label: 'Two',
}, {
value: 'three',
label: 'Three',
}],
label: 'Select HasMany',
required: true,
hasMany: true,
},
{
name: 'SelectJustStrings',
type: 'select',
options: ['blue', 'green', 'yellow'],
label: 'Select Just Strings',
required: true,
hasMany: true,
},
{
name: 'Radio',
type: 'radio',

View File

@@ -1,14 +1,14 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
import checkRole from '../access/checkRole';
const StrictAccess: PayloadCollectionConfig = {
const StrictAccess: CollectionConfig = {
slug: 'strict-access',
labels: {
singular: 'Strict Access',
plural: 'Strict Access',
},
admin: {
useAsTitle: 'email',
useAsTitle: 'address',
},
access: {
create: () => true,

View File

@@ -0,0 +1,25 @@
import { CollectionConfig } from '../../src/collections/config/types';
const Uniques: CollectionConfig = {
slug: 'uniques',
labels: {
singular: 'Unique',
plural: 'Uniques',
},
fields: [
{
name: 'title',
type: 'text',
label: 'Title',
required: true,
unique: true,
},
{
name: 'description',
type: 'textarea',
label: 'Description',
},
],
};
export default Uniques;

View File

@@ -0,0 +1,35 @@
import { CollectionConfig } from '../../src/collections/config/types';
const UnstoredMedia: CollectionConfig = {
slug: 'unstored-media',
labels: {
singular: 'Unstored Media',
plural: 'Unstored Media',
},
access: {
read: () => true,
},
upload: {
staticURL: '/unstored-media',
disableLocalStorage: true,
imageSizes: [
{
name: 'tablet',
width: 640,
height: 480,
crop: 'left top',
},
],
},
fields: [
{
name: 'alt',
label: 'Alt Text',
type: 'text',
required: true,
localized: true,
},
],
};
export default UnstoredMedia;

View File

@@ -1,6 +1,6 @@
import { PayloadCollectionConfig } from '../../src/collections/config/types';
import { CollectionConfig } from '../../src/collections/config/types';
const Validations: PayloadCollectionConfig = {
const Validations: CollectionConfig = {
slug: 'validations',
labels: {
singular: 'Validation',

View File

@@ -0,0 +1,9 @@
import React from 'react';
const CollectionDescription: React.FC = () => (
<div>
Collection description
</div>
);
export default CollectionDescription;

View File

@@ -0,0 +1,11 @@
import React from 'react';
const CustomDescriptionComponent: React.FC = ({ value }) => (
<div>
Character count:
{' '}
{ value?.length || 0 }
</div>
);
export default CustomDescriptionComponent;

View File

@@ -0,0 +1,5 @@
import React from 'react';
const CustomAccountView: React.FC = () => <div>fake account view</div>;
export default CustomAccountView;

View File

@@ -0,0 +1,5 @@
import React from 'react';
const CustomDashboardView: React.FC = () => <div>fake dashboard view</div>;
export default CustomDashboardView;

View File

@@ -1,7 +1,7 @@
import checkRole from '../access/checkRole';
import Quote from '../blocks/Quote';
import CallToAction from '../blocks/CallToAction';
import { PayloadGlobalConfig } from '../../src/globals/config/types';
import { GlobalConfig } from '../../src/globals/config/types';
export default {
slug: 'blocks-global',
@@ -19,4 +19,4 @@ export default {
localized: true,
},
],
} as PayloadGlobalConfig;
} as GlobalConfig;

View File

@@ -1,4 +1,4 @@
import { PayloadGlobalConfig } from '../../src/globals/config/types';
import { GlobalConfig } from '../../src/globals/config/types';
import checkRole from '../access/checkRole';
export default {
@@ -32,4 +32,4 @@ export default {
required: true,
},
],
} as PayloadGlobalConfig;
} as GlobalConfig;

View File

@@ -1,13 +1,15 @@
import { PayloadGlobalConfig } from '../../src/globals/config/types';
import { GlobalConfig } from '../../src/globals/config/types';
import checkRole from '../access/checkRole';
export default {
slug: 'navigation-array',
label: 'Navigation Array',
access: {
update: ({ req: { user } }) => checkRole(['admin', 'user'], user),
read: () => true,
},
admin: {
description: 'A description for the editor',
},
fields: [
{
name: 'array',
@@ -25,4 +27,4 @@ export default {
}],
},
],
} as PayloadGlobalConfig;
} as GlobalConfig;

View File

@@ -9,6 +9,7 @@ import Conditions from './collections/Conditions';
import CustomComponents from './collections/CustomComponents';
import File from './collections/File';
import Blocks from './collections/Blocks';
import CustomID from './collections/CustomID';
import DefaultValues from './collections/DefaultValues';
import HiddenFields from './collections/HiddenFields';
import Hooks from './collections/Hooks';
@@ -23,12 +24,15 @@ import RelationshipA from './collections/RelationshipA';
import RelationshipB from './collections/RelationshipB';
import RichText from './collections/RichText';
import Select from './collections/Select';
import StrictPolicies from './collections/StrictPolicies';
import StrictAccess from './collections/StrictAccess';
import Validations from './collections/Validations';
import Uniques from './collections/Uniques';
import Geolocation from './collections/Geolocation';
import BlocksGlobal from './globals/BlocksGlobal';
import NavigationArray from './globals/NavigationArray';
import GlobalWithStrictAccess from './globals/GlobalWithStrictAccess';
import UnstoredMedia from './collections/UnstoredMedia';
export default buildConfig({
cookiePrefix: 'payload',
@@ -47,6 +51,10 @@ export default buildConfig({
// Nav: () => (
// <div>Hello</div>
// ),
views: {
// Dashboard: CustomDashboardView,
// Account: CustomAccountView,
},
},
webpack: (config) => config,
},
@@ -57,6 +65,7 @@ export default buildConfig({
Code,
Conditions,
CustomComponents,
CustomID,
File,
DefaultValues,
Blocks,
@@ -73,8 +82,11 @@ export default buildConfig({
RelationshipB,
RichText,
Select,
StrictPolicies,
StrictAccess,
Validations,
Uniques,
UnstoredMedia,
Geolocation,
],
globals: [
NavigationArray,
@@ -100,9 +112,7 @@ export default buildConfig({
defaultDepth: 2,
graphQL: {
maxComplexity: 1000,
mutations: {},
queries: {},
disablePlaygroundInProduction: true,
disablePlaygroundInProduction: false,
disable: false,
},
// rateLimit: {
@@ -120,6 +130,7 @@ export default buildConfig({
defaultLocale: 'en',
fallback: true,
},
// indexSortableFields: true,
hooks: {
afterError: (err) => {
console.error('global error config handler', err);

View File

@@ -2,7 +2,7 @@
title: Collection Access Control
label: Collections
order: 20
desc: Payload is a headless CMS and application framework.
desc: With Collection-level Access Control you can define which users can create, read, update or delete Collections.
keywords: collections, access control, permissions, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: Field-level Access Control
label: Fields
order: 30
desc: Payload is a headless CMS and application framework.
desc: Field-level Access Control is specified within a field's config, and allows you to define which users can create, read or update Fields.
keywords: fields, access control, permissions, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -23,8 +23,7 @@ export default {
fields: [
{
name: 'title',
label: 'Title',
type: 'text'
type: 'text',
// highlight-start
access: {
create: ({ req: { user } }) => { ... },
@@ -43,9 +42,11 @@ Returns a boolean which allows or denies the ability to set a field's value when
**Available argument properties:**
| Option | Description |
| --------- | ----------- |
| **`req`** | The Express `request` object containing the currently authenticated `user` |
| Option | Description |
| ----------------- | ----------- |
| **`req`** | The Express `request` object containing the currently authenticated `user` |
| **`data`** | The full data passed to create the document. |
| **`siblingData`** | Immediately adjacent field data passed to create the document. |
### Read
@@ -53,10 +54,12 @@ Returns a boolean which allows or denies the ability to read a field's value. If
**Available argument properties:**
| Option | Description |
| --------- | ----------- |
| **`req`** | The Express `request` object containing the currently authenticated `user` |
| **`id`** | `id` of the document being read |
| Option | Description |
| ----------------- | ----------- |
| **`req`** | The Express `request` object containing the currently authenticated `user` |
| **`id`** | `id` of the document being read |
| **`data`** | The full data of the document being read. |
| **`siblingData`** | Immediately adjacent field data of the document being read. |
### Update
@@ -64,7 +67,9 @@ Returns a boolean which allows or denies the ability to update a field's value.
**Available argument properties:**
| Option | Description |
| --------- | ----------- |
| **`req`** | The Express `request` object containing the currently authenticated `user` |
| **`id`** | `id` of the document being updated |
| Option | Description |
| ----------------- | ----------- |
| **`req`** | The Express `request` object containing the currently authenticated `user` |
| **`id`** | `id` of the document being updated |
| **`data`** | The full data passed to update the document. |
| **`siblingData`** | Immediately adjacent field data passed to update the document with. |

View File

@@ -2,7 +2,7 @@
title: Globals Access Control
label: Globals
order: 40
desc: Payload is a headless CMS and application framework.
desc: Global-level Access Control is specified within each Global's `access` property and allows you to define which users can read or update Globals.
keywords: globals, access control, permissions, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: Access Control
label: Overview
order: 10
desc: Payload is a headless CMS and application framework.
desc: Payload makes it simple to define and manage access control. By declaring roles, you can set permissions and restrict what your users can interact with.
keywords: overview, access control, permissions, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: Swap in your own React components
label: Custom Components
order: 20
desc: Payload is a headless CMS and application framework.
desc: Fully customize your Admin Panel by swapping in your own React components. Add fields, remove views, update routes and change functions to sculpt your perfect Dashboard.
keywords: admin, components, custom, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -106,3 +106,13 @@ const CustomTextField = ({ path }) => {
)
}
```
### 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-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:
```
@import '~payload/scss';
```

View File

@@ -2,7 +2,7 @@
title: Customizing CSS & SCSS
label: Customizing CSS
order: 30
desc: Payload is a headless CMS and application framework.
desc: Customize your Payload admin panel further by adding your own CSS or SCSS style sheet to the configuration, powerful theme and design options are waiting for you.
keywords: admin, css, scss, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: The Admin Panel
label: Overview
order: 10
desc: Payload is a headless CMS and application framework.
desc: Manage your data and customize the Admin Panel by swapping in your own React components. Create, modify or remove views, fields, styles and much more.
keywords: admin, components, custom, customize, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -30,6 +30,7 @@ All options for the Admin panel are defined in your base Payload config file.
| `indexHTML` | Optionally replace the entirety of the `index.html` file used by the Admin panel. Reference the [base index.html file](https://github.com/payloadcms/payload/blob/master/src/admin/index.html) to ensure your replacement has the appropriate HTML elements. |
| `css` | Absolute path to a stylesheet that you can use to override / customize the Admin panel styling. [More](/docs/admin/customizing-css). |
| `scss` | Absolute path to a Sass variables / mixins stylesheet meant to override Payload styles to make for an easy re-skinning of the Admin panel. [More](/docs/admin/customizing-css#overriding-scss-variables). |
| `dateFormat` | Global date format that will be used for all dates in the Admin panel. Any valid [date-fns](https://date-fns.org/) format pattern can be used.
| `components` | Component overrides that affect the entirety of the Admin panel. [More](/docs/admin/components) |
| `webpack` | Customize the Webpack config that's used to generate the Admin panel. [More](/docs/admin/webpack) |
@@ -38,7 +39,7 @@ All options for the Admin panel are defined in your base Payload config file.
<Banner type="warning">
<strong>Important:</strong><br />
The Payload Admin panel can only be used by one Collection that supports <a href="/docs/authentication/">Authentication</a>.
The Payload Admin panel can only be used by one Collection that supports <a href="/docs/authentication/overview">Authentication</a>.
</Banner>
To specify which Collection to use to log in to the Admin panel, pass the `admin` options a `user` key equal to the slug of the Collection that you'd like to use.
@@ -70,6 +71,6 @@ This is totally possible. For the above scenario, by specifying `admin: { user:
If you would like to restrict which users from a single Collection can access the Admin panel, you can use the `admin` access control function. [Click here](/docs/access-control/overview#admin) to learn more.
### License enforcement
## License enforcement
Payload requires a valid license key to be used on production domains. You can use it as much as you'd like locally and on staging / UAT domains, but when you deploy to production, you'll need a license key to activate Payload's Admin panel. For more information, [click here](/docs/production/licensing).

157
docs/admin/preferences.mdx Normal file
View File

@@ -0,0 +1,157 @@
---
title: Managing User Preferences
label: Preferences
order: 40
desc: Store the preferences of your users as they interact with the Admin panel.
keywords: admin, preferences, custom, customize, documentation, Content Management System, cms, headless, javascript, node, react, express
---
As your users interact with your Admin panel, you might want to store their preferences in a persistent manner, so that when they revisit the Admin panel, they can pick right back up where they left off.
Out of the box, Payload handles the persistence of your users' preferences in a handful of ways, including:
1. Collection `List` view active columns, and their order, that users define
1. Their last active locale
1. The "collapsed" state of blocks, on a document level, as users edit or interact with documents
<Banner type="warning">
<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>
### Use cases
This API is used significantly for internal operations of the Admin panel, as mentioned above. But, if you're building your own React components for use in the Admin panel, you can allow users to set their own preferences in correspondence to their usage of your components. For example:
- If you have built a "color picker", you could "remember" the last used colors that the user has set for easy access next time
- If you've built a custom `Nav` component, and you've built in an "accordion-style" UI, you might want to store the `collapsed` state of each Nav collapsible item. This way, if an editor returns to the panel, their `Nav` state is persisted automatically
- You might want to store `recentlyAccessed` documents to give admin editors an easy shortcut back to their recently accessed documents on the `Dashboard` or similar
- Many other use cases exist. Invent your own! Give your editors an intelligent and persistent editing experience.
### Database
Payload automatically creates an internally used `_preferences` collection that stores user preferences. Each document in the `_preferences` collection contains the following shape:
| Key | Value |
| -------------------- | -------------|
| `id` | A unique ID for each preference stored. |
| `key` | A unique `key` that corresponds to the preference. |
| `user` | The ID of the `user` that is storing its preference. |
| `userCollection` | The `slug` of the collection that the `user` is logged in as. |
| `value` | The value of the preference. Can be any data shape that you need. |
| `createdAt` | A timestamp of when the preference was created. |
| `updatedAt` | A timestamp set to the last time the preference was updated.
### APIs
Preferences are available to both [GraphQL](/docs/graphql/overview#preferences) and [REST](/docs/rest-api/overview#) APIs.
### Adding or reading Preferences in your own components
The Payload admin panel offers a `usePreferences` hook. The hook is only meant for use within the admin panel itself. It provides you with two methods:
##### `getPreference`
This async method provides an easy way to retrieve a user's preferences by `key`. It will return a promise containing the resulting preference value.
**Arguments**
- `key`: the `key` of your preference to retrieve.
##### `setPreference`
Also async, this method provides you with an easy way to set a user preference. It returns `void`.
**Arguments:**
- `key`: the `key` of your preference to set.
- `value`: the `value` of your preference that you're looking to set.
## Example
Here is an example for how you can utilize `usePreferences` within your custom Admin panel components. Note - this example is not fully useful and is more just a reference for how to utilize the Preferences API. In this case, we are demonstrating how to set and retrieve a user's last used colors history within a `ColorPicker` or similar type component.
```
import React, { Fragment, useState, useEffect, useCallback } from 'react';
import { usePreferences } from 'payload/components/preferences';
const lastUsedColorsPreferenceKey = 'last-used-colors';
const CustomComponent = (props) => {
const { getPreference, setPreference } = usePreferences();
// Store the last used colors in local state
const [lastUsedColors, setLastUsedColors] = useState([]);
// Callback to add a color to the last used colors
const updateLastUsedColors = useCallback((color) => {
// First, check if color already exists in last used colors.
// If it already exists, there is no need to update preferences
const colorAlreadyExists = lastUsedColors.indexOf(color) > -1;
if (!colorAlreadyExists) {
const newLastUsedColors = [
...lastUsedColors,
color,
];
setLastUsedColors(newLastUsedColors);
setPreference(lastUsedColorsPreferenceKey, newLastUsedColors);
}
}, [lastUsedColors, setPreference]);
// Retrieve preferences on component mount
// This will only be run one time, because the `getPreference` method never changes
useEffect(() => {
const asyncGetPreference = async () => {
const lastUsedColorsFromPreferences = await getPreference(lastUsedColorsPreferenceKey);
setLastUsedColors(lastUsedColorsFromPreferences);
};
asyncGetPreference();
}, [getPreference]);
return (
<div>
<button
type="button"
onClick={() => updateLastUsedColors('red')}
>
Use red
</button>
<button
type="button"
onClick={() => updateLastUsedColors('blue')}
>
Use blue
</button>
<button
type="button"
onClick={() => updateLastUsedColors('purple')}
>
Use purple
</button>
<button
type="button"
onClick={() => updateLastUsedColors('yellow')}
>
Use yellow
</button>
{lastUsedColors && (
<Fragment>
<h5>Last used colors:</h5>
<ul>
{lastUsedColors?.map((color) => (
<li key={color}>
{color}
</li>
))}
</ul>
</Fragment>
)}
</div>
);
};
export default CustomComponent;
```

View File

@@ -1,8 +1,8 @@
---
title: Webpack
label: Webpack
order: 40
desc: Payload is a headless CMS and application framework.
order: 50
desc: The Payload admin panel uses Webpack 5 and supports many common functionalities such as SCSS and Typescript out of the box to give you more freedom.
keywords: admin, webpack, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: Authentication Config
label: Config
order: 20
desc: Payload is a headless CMS and application framework.
desc: Enable and customize options in the Authentication config for features including Forgot Password, Login Attempts, API key usage and more.
keywords: authentication, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: Authentication Operations
label: Operations
order: 30
desc: Payload is a headless CMS and application framework.
desc: Enabling Authentication automatically makes key operations available such as Login, Logout, Verify, Unlock, Reset Password and more.
keywords: authentication, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -194,7 +194,7 @@ If successful, this operation will automatically renew the user's HTTP-only cook
**Example REST API token refresh**:
```js
const res = await fetch('http://localhost:3000/api/[collection-slug]/refresh', {
const res = await fetch('http://localhost:3000/api/[collection-slug]/refresh-token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',

View File

@@ -2,7 +2,7 @@
title: Authentication Overview
label: Overview
order: 10
desc: Payload is a headless CMS and application framework.
desc: Payload provides highly secure user Authentication out of the box, and you can fully customize, override, or remove the default Authentication support.
keywords: authentication, config, configuration, overview, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -22,7 +22,7 @@ Authentication is used within the Payload Admin panel itself as well as througho
- P2P app or social site where users need to log in and manage their profiles
- Online game where players need to track their progress over time
By default, Payload provides you with a `User` collection that supports Authentication, which is used to access the Admin panel. But, you can add support to one or many Collections of your own. For more information on how to customize, override, or remove the default `User` collection, [click here](/docs/admin#the-admin-user-collection).
By default, Payload provides you with a `User` collection that supports Authentication, which is used to access the Admin panel. But, you can add support to one or many Collections of your own. For more information on how to customize, override, or remove the default `User` collection, [click here](/docs/admin/overview#the-admin-user-collection).
### Enabling Auth on a collection

View File

@@ -2,7 +2,7 @@
title: Using the Payload Auth Middleware
label: Using the Middleware
order: 40
desc: Payload is a headless CMS and application framework.
desc: Make full use of Payload's built-in authentication with your own custom Express endpoints by adding Payload's authentication middleware.
keywords: authentication, middleware, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: Collection Configs
label: Collections
order: 20
desc: Payload is a headless CMS and application framework.
desc: Structure your Collections for your needs by defining fields, adding slugs and labels, establishing access control, tying in hooks, setting timestamps and more.
keywords: collections, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -16,12 +16,13 @@ It's often best practice to write your Collections in separate files and then im
| ---------------- | -------------|
| **`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. |
| **`admin`** | Admin-specific configuration. See below for [more detail](/docs/collections#admin). |
| **`labels`** | Singular and plural labels for use in identifying this Collection throughout Payload. Auto-generated from slug if not defined. |
| **`description`**| Text or React component to display below the Collection label in the List view to give editors more information. |
| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-options). |
| **`hooks`** | Entry points to "tie in" to Collection actions at specific points. [More](/docs/hooks/overview#collection-hooks) |
| **`access`** | Provide access control functions to define exactly who should be able to do what with Documents in this Collection. [More](/docs/access-control/overview/#collections) |
| **`auth`** | Specify options if you would like this Collection to feature authentication. For more, consult the [Authentication](/docs/authentication/config) documentation. |
| **`upload`** | Specify options if you would like this Collection to support file uploads. For more, consult the [Uploads](/docs/uploads/overview) documentation. |
| **`upload`** | Specify options if you would like this Collection to support file uploads. For more, consult the [Uploads](/docs/upload/overview) documentation. |
| **`timestamps`** | Set to false to disable documents' automatically generated `createdAt` and `updatedAt` timestamps. |
*\* An asterisk denotes that a property is required.*
@@ -29,12 +30,8 @@ It's often best practice to write your Collections in separate files and then im
#### Simple collection example
```js
const Order = {
const Orders = {
slug: 'orders',
labels: {
singular: 'Order',
plural: 'Orders',
},
fields: [
{
name: 'total',
@@ -64,8 +61,8 @@ You can customize the way that the Admin panel behaves on a collection-by-collec
| `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. |
| `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. |
| `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 this field to `true` to enable the collection to be selected within it. |
| `preview` | Function to generate preview URLS within the Admin panel that can point to your app. [More](/docs/collections#preview). |
| `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). |
| `components` | Swap in your own React components to be used within this collection. [More](/docs/admin/components#collections) |
### Preview
@@ -74,7 +71,10 @@ Collection `admin` options can accept a `preview` function that will be used to
If the function is specified, a Preview button will automatically appear in the corresponding collection's Edit view. Clicking the Preview button will link to the URL that is generated by the function.
The preview function accepts the document being edited as an argument.
**The preview function accepts two arguments:**
1. The document being edited
1. An `options` object, containing `locale` and `token` properties. The `token` is the currently logged in user's JWT.
**Example collection with preview function:**
@@ -89,9 +89,9 @@ The preview function accepts the document being edited as an argument.
}
]
admin: {
preview: (doc) => {
preview: (doc, { locale }) => {
if (doc?.slug) {
return `https://bigbird.com/preview/posts/${doc.slug}`,
return `https://bigbird.com/preview/posts/${doc.slug}?locale=${locale}`,
}
return null;
@@ -110,4 +110,22 @@ Hooks are a powerful way to extend collection functionality and execute your own
### Field types
Collections 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/config) to learn more about field types.
Collections 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
You can import collection types as follows:
```js
import { CollectionConfig } from 'payload/types';
// This is the type used for incoming collection configs.
// Only the bare minimum properties are marked as required.
```
```js
import { SanitizedCollectionConfig } from 'payload/types';
// This is the type used after an incoming collection config is fully sanitized.
// Generally, this is only used internally by Payload.
```

View File

@@ -2,7 +2,7 @@
title: Express
label: Express
order: 60
desc: Payload is a headless CMS and application framework.
desc: Payload utilizes Express middleware packages, you can customize how they work by passing in configuration options.
keywords: config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---

View File

@@ -2,7 +2,7 @@
title: Global Configs
label: Globals
order: 30
desc: Payload is a headless CMS and application framework.
desc: Set up your Global config for your needs by defining fields, adding slugs and labels, establishing access control, tying in hooks and more.
keywords: globals, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -16,7 +16,8 @@ As with Collection configs, it's often best practice to write your Globals in se
| ---------------- | -------------|
| **`slug`** * | Unique, URL-friendly string that will act as an identifier for this Global. |
| **`fields`** * | Array of field types that will determine the structure and functionality of the data stored within this Global. [Click here](/docs/fields/overview) for a full list of field types as well as how to configure them. |
| **`label`** | Singular label for use in identifying this Global throughout Payload. |
| **`label`** | Singular label for use in identifying this Global throughout Payload. Auto-generated from slug if not defined. |
| **`description`**| Text or React component to display below the Global header to give editors more information. |
| **`admin`** | Admin-specific configuration. See below for [more detail](/docs/configuration/globals#admin-options). |
| **`hooks`** | Entry points to "tie in" to collection actions at specific points. [More](/docs/hooks/overview#global-hooks) |
| **`access`** | Provide access control functions to define exactly who should be able to do what with this Global. [More](/docs/access-control/overview/#globals) |
@@ -28,7 +29,6 @@ As with Collection configs, it's often best practice to write your Globals in se
```js
const Nav = {
slug: 'nav',
label: 'Nav',
fields: [
{
name: 'items',
@@ -38,7 +38,6 @@ const Nav = {
fields: [
{
name: 'page',
label: 'Page',
type: 'relationship',
relationTo: 'pages', // "pages" is the slug of an existing collection
required: true,
@@ -71,4 +70,22 @@ Globals also fully support a smaller subset of Hooks. To learn more, go to the [
### 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/config) 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
You can import global types as follows:
```js
import { GlobalConfig } from 'payload/types';
// This is the type used for incoming global configs.
// Only the bare minimum properties are marked as required.
```
```js
import { SanitizedGlobalConfig } from 'payload/types';
// This is the type used after an incoming global config is fully sanitized.
// Generally, this is only used internally by Payload.
```

View File

@@ -2,7 +2,7 @@
title: Localization
label: Localization
order: 50
desc: Payload is a headless CMS and application framework.
desc: Add and maintain as many locales as you need by adding Localization to your Payload config, set options for default locale, fallbacks, fields and more.
keywords: localization, internationalization, i18n, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -55,7 +55,6 @@ Payload localization works on a **field** level—not a document level. In addit
```js
{
name: 'title',
label: 'Page Title',
type: 'text',
// highlight-start
localized: true,
@@ -98,7 +97,7 @@ fetch('https://localhost:3000/api/pages?locale=es&fallback-locale=none');
In the GraphQL API, you can specify `locale` and `fallbackLocale` args to all relevant queries and mutations.
The `locale` arg will only accept valid locales, but locales will be formatted automatically as valid GraphQL enum values (dashes or special characters will be converted to underscores, spaces will be removed, etc.). If you are curious to see how locales are auto-formatted, you can use the [GraphQL playground](/docs/graphql/playground).
The `locale` arg will only accept valid locales, but locales will be formatted automatically as valid GraphQL enum values (dashes or special characters will be converted to underscores, spaces will be removed, etc.). If you are curious to see how locales are auto-formatted, you can use the [GraphQL playground](/docs/graphql/overview#graphql-playground).
The `fallbackLocale` arg will accept valid locales as well as `none` to disable falling back.
@@ -131,3 +130,7 @@ const posts = await payload.find({
fallbackLocale: false,
})
```
<Banner type="alert">
<strong>Tip:</strong><br/>The REST and Local APIs can return all localization data in one request by passing 'all' or '*' as 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

@@ -2,7 +2,7 @@
title: The Payload Config
label: Overview
order: 10
desc: Payload is a headless CMS and application framework.
desc: The Payload config is central to everything that Payload does, from adding custom React components, to modifying collections, controlling localization and much more.
keywords: overview, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -18,23 +18,26 @@ Payload is a *config-based*, code-first CMS and application framework. The Paylo
| Option | Description |
| -------------------- | -------------|
| `serverURL` | A _required_ string used to define the absolute URL of your app including the protocol, for example `https://'example.com`. No paths allowed, only protocol, domain and (optionally) port |
| `collections` | An array of all Collections that Payload will manage. To read more about how to define your collection configs, [click here](/docs/configuration/collections). |
| `globals` | An array of all Globals that Payload will manage. For more on Globals and their configs, [click here](/docs/configuration/globals). |
| `admin` | Base Payload admin configuration. Specify custom components, control metadata, set the Admin user collection, and [more](/docs/admin/overview#options). |
| `admin` | Base Payload admin configuration. Specify custom components, control metadata, set the Admin user collection, and [more](/docs/admin/overview#admin-options). |
| `localization` | Opt-in and control how Payload handles the translation of your content into multiple locales. [More](/docs/configuration/localization) |
| `graphQL` | Manage GraphQL-specific functionality here. Define your own queries and mutations, manage query complexity limits, and [more](/docs/graphql/overview#config). |
| `graphQL` | Manage GraphQL-specific functionality here. Define your own queries and mutations, manage query complexity limits, and [more](/docs/graphql/overview). |
| `cookiePrefix` | A string that will be prefixed to all cookies that Payload sets. |
| `cors` | Either a whitelist array of URLS to allow CORS requests from, or a wildcard string (`'*'`) to accept incoming requests from any domain. |
| `csrf` | A whitelist array of URLs to allow Payload cookies to be accepted from as a form of CSRF protection. [More](/docs/authentication/overview#csrf-protection) |
| `defaultDepth` | If a user does not specify `depth` while requesting a resource, this depth will be used. [More](/docs/getting-started/concepts#depth) |
| `maxDepth` | The maximum allowed depth to be permitted application-wide. This setting helps prevent against malicious queries. Defaults to `10`. |
| `upload` | Base Payload upload configuration. [More](/docs/admin/upload#global). |
| `indexSortableFields`| Automatically index all sortable top-level fields in the database to improve sort performance and add database compatibility for Azure Cosmos and similar. |
| `upload` | Base Payload upload configuration. [More](/docs/upload/overview#payload-wide-upload-options). |
| `routes` | Control the routing structure that Payload binds itself to. Specify `admin`, `api`, `graphQL`, and `graphQLPlayground`. |
| `email` | Base email settings to allow Payload to generate email such as Forgot Password requests and other requirements. [More](/docs/email/overview#config) |
| `email` | Base email settings to allow Payload to generate email such as Forgot Password requests and other requirements. [More](/docs/email/overview#configuration) |
| `express` | Express-specific middleware options such as compression and JSON parsing. [More](/docs/configuration/express). |
| `debug` | Enable to expose more detailed error information. |
| `rateLimit` | Control IP-based rate limiting for all Payload resources. Used to prevent DDoS attacks and [more](/docs/production/preventing-abuse#rate-limiting). |
| `rateLimit` | Control IP-based rate limiting for all Payload resources. Used to prevent DDoS attacks and [more](/docs/production/preventing-abuse#rate-limiting-requests). |
| `hooks` | Tap into Payload-wide hooks. [More](/docs/hooks/overview) |
| `plugins` | An array of Payload plugins. [More](/docs/plugins/overview) |
#### Simple example
@@ -49,13 +52,11 @@ const config = buildConfig({
fields: [
{
name: 'title',
label: 'Title',
type: 'text',
required: true,
},
{
name: 'content',
label: 'Content',
type: 'richText',
required: true,
}
@@ -65,16 +66,13 @@ const config = buildConfig({
globals: [
{
slug: 'header',
label: 'Header',
fields: [
{
name: 'nav',
label: 'Nav',
type: 'array',
fields: [
{
name: 'page',
label: 'Page',
type: 'relationship',
relationTo: 'pages',
},
@@ -140,3 +138,29 @@ But, you can specify where your Payload config is located as well as what it's n
The Payload config itself, as well as all files that it requires or imports, are run through Babel. TypeScript and all common ES6 features are fully supported. To see the Babel config that is used to parse Payload configs, check out the Payload source code [here](https://github.com/payloadcms/payload/blob/master/src/babel.config.js).
Payload comes with `isomorphic-fetch` installed which means that even in Node, you can use the `fetch` API just as you would within the browser. No need to import `axios` or similar, unless you want to!
#### Re-using the Payload `babel.config.js`
If for any reason you need to re-use the built-in Payload `babel.config.js`, you can do so by importing it as follows:
```
import { config } from 'payload/babel';
```
### TypeScript
You can import config types as follows:
```js
import { Config } from 'payload/config';
// This is the type used for an incoming Payload config.
// Only the bare minimum properties are marked as required.
```
```js
import { SanitizedConfig } from 'payload/config';
// This is the type used after an incoming Payload config is fully sanitized.
// Generally, this is only used internally by Payload.
```

View File

@@ -2,7 +2,7 @@
title: Email Functionality
label: Overview
order: 10
desc: Payload is a headless CMS and application framework.
desc: Payload uses NodeMailer to allow you to send emails smoothly from your app. Set up email functions such as password resets, order confirmations and more.
keywords: email, overview, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -19,7 +19,7 @@ in the `email` property object of your payload init call. Payload will make use
**Three ways to set it up**
1. **Default**: When email is not needed, a mock email handler will be created and used when nothing is provided. This is ideal for development environments and can be changed later when ready to [go to production](/docs/production).
1. **Default**: When email is not needed, a mock email handler will be created and used when nothing is provided. This is ideal for development environments and can be changed later when ready to [go to production](/docs/production/deployment).
1. **Recommended**: Set the `transportOptions` and Payload will do the set up for you.
1. **Advanced**: The `transport` object can be assigned a nodemailer transport object set up in your server scripts and given for Payload to use.
@@ -139,4 +139,4 @@ The mock email handler is used when payload is started with neither `transport`
### Using multiple mail providers
Payload supports the use of a single transporter of email, but there is nothing stopping you from having more. Consider a use case where sending bulk email is handled differently than transactional email and could be done using a [hook](/docs/hooks/config).
Payload supports the use of a single transporter of email, but there is nothing stopping you from having more. Consider a use case where sending bulk email is handled differently than transactional email and could be done using a [hook](/docs/hooks/overview).

View File

@@ -2,7 +2,7 @@
title: Array Field
label: Array
order: 20
desc: Payload is a headless CMS and application framework.
desc: Array fields are intended for sets of repeating fields, that you define. Learn how to use array fields, see examples and options.
keywords: array, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -24,7 +24,7 @@ keywords: array, fields, config, configuration, documentation, Content Managemen
| Option | Description |
| ---------------- | ----------- |
| **`name`** * | To be used as the property name when stored and retrieved from the database. |
| **`label`** | Used as a heading in the Admin panel and to name the generated GraphQL type. |
| **`label`** | Used as a heading in the Admin panel and to name the generated GraphQL type. Auto-generated from name if not defined. |
| **`fields`** * | Array of field types to correspond to each row of the Array. |
| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) |
| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. |
@@ -59,14 +59,12 @@ keywords: array, fields, config, configuration, documentation, Content Managemen
fields: [ // required
{
name: 'image',
label: 'Image',
type: 'upload',
relationTo: 'media',
required: true,
},
{
name: 'caption',
label: 'Caption',
type: 'text',
}
]

View File

@@ -2,7 +2,7 @@
title: Blocks Field
label: Blocks
order: 30
desc: Payload is a headless CMS and application framework.
desc: The Blocks field type is a great layout build and can be used to construct any flexible content model. Learn how to use Block fields, see examples and options.
keywords: blocks, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express
---
@@ -53,7 +53,7 @@ Blocks are defined as separate configs of their own.
| ---------------- | ----------- |
| **`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. Also used to name corresponding GraphQL schema types. |
| **`labels`** | Customize the block labels that appear in the Admin dashboard. Also used to name corresponding GraphQL schema types. Auto-generated from slug if not defined. |
| **`imageURL`** | Provide a custom image thumbnail to help editors identify this block in the Admin UI. |
| **`imageAltText`** | Customize this block's image thumbnail alt text. |
@@ -79,14 +79,12 @@ const QuoteBlock = {
imageAltText: 'A nice thumbnail image to show what this block looks like',
fields: [ // required
{
name: 'text',
label: 'Quote Text',
name: 'quoteHeader',
type: 'text',
required: true,
},
{
name: 'text',
label: 'Quotee',
name: 'quoteText',
type: 'text',
},
]
@@ -98,13 +96,8 @@ const ExampleCollection = {
{
name: 'layout', // required
type: 'blocks', // required
label: 'layout',
minRows: 1,
maxRows: 20,
labels: {
singular: 'Layout',
plural: 'Layouts',
},
blocks: [ // required
QuoteBlock
]

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