payload 0.15.3 → 0.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/admin/components/elements/WhereBuilder/field-types.d.ts +2 -2
- package/dist/admin/components/elements/WhereBuilder/field-types.js +11 -7
- package/dist/admin/components/forms/DraggableSection/index.js +2 -3
- package/dist/admin/components/forms/Form/buildStateFromSchema.d.ts +10 -1
- package/dist/admin/components/forms/Form/buildStateFromSchema.js +14 -6
- package/dist/admin/components/forms/Form/getDataByPath.js +6 -11
- package/dist/admin/components/forms/Form/getSiblingData.js +12 -14
- package/dist/admin/components/forms/Form/index.js +23 -6
- package/dist/admin/components/forms/Form/reduceFieldsToValues.d.ts +1 -1
- package/dist/admin/components/forms/Form/reduceFieldsToValues.js +1 -2
- package/dist/admin/components/forms/Form/types.d.ts +3 -2
- package/dist/admin/components/forms/RenderFields/index.d.ts +1 -2
- package/dist/admin/components/forms/RenderFields/index.js +6 -16
- package/dist/admin/components/forms/RenderFields/types.d.ts +0 -5
- package/dist/admin/components/forms/field-types/Array/Array.js +18 -9
- package/dist/admin/components/forms/field-types/Blocks/Blocks.js +21 -15
- package/dist/admin/components/forms/field-types/Checkbox/index.js +3 -4
- package/dist/admin/components/forms/field-types/Code/Code.js +4 -5
- package/dist/admin/components/forms/field-types/DateTime/index.js +2 -3
- package/dist/admin/components/forms/field-types/Email/index.js +2 -3
- package/dist/admin/components/forms/field-types/Number/index.js +3 -4
- package/dist/admin/components/forms/field-types/Password/index.js +2 -2
- package/dist/admin/components/forms/field-types/Point/index.js +2 -3
- package/dist/admin/components/forms/field-types/RadioGroup/index.js +3 -4
- package/dist/admin/components/forms/field-types/Relationship/index.js +49 -17
- package/dist/admin/components/forms/field-types/RichText/RichText.js +3 -4
- package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.js +4 -2
- package/dist/admin/components/forms/field-types/Row/index.js +7 -2
- package/dist/admin/components/forms/field-types/Select/index.js +4 -5
- package/dist/admin/components/forms/field-types/Text/index.js +6 -3
- package/dist/admin/components/forms/field-types/Textarea/index.js +4 -5
- package/dist/admin/components/forms/field-types/Upload/Add/index.js +1 -1
- package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -1
- package/dist/admin/components/forms/field-types/Upload/Input.js +3 -1
- package/dist/admin/components/forms/field-types/Upload/SelectExisting/index.js +27 -4
- package/dist/admin/components/forms/field-types/Upload/SelectExisting/types.d.ts +3 -0
- package/dist/admin/components/forms/field-types/Upload/index.js +4 -5
- package/dist/admin/components/forms/field-types/getFilterOptionsQuery.d.ts +5 -0
- package/dist/admin/components/forms/field-types/getFilterOptionsQuery.js +11 -0
- package/dist/admin/components/forms/useField/index.js +39 -8
- package/dist/admin/components/utilities/OperationProvider/index.d.ts +4 -0
- package/dist/admin/components/utilities/OperationProvider/index.js +3 -0
- package/dist/admin/components/views/Account/Default.js +41 -39
- package/dist/admin/components/views/Account/index.js +4 -2
- package/dist/admin/components/views/CreateFirstUser/index.js +1 -1
- package/dist/admin/components/views/Global/Default.js +45 -43
- package/dist/admin/components/views/Global/index.js +5 -5
- package/dist/admin/components/views/collections/Edit/Auth/APIKey.js +1 -1
- package/dist/admin/components/views/collections/Edit/Default.js +55 -53
- package/dist/admin/components/views/collections/Edit/index.js +5 -5
- package/dist/collections/tests/pointField.spec.js +26 -15
- package/dist/collections/tests/relationships.spec.js +21 -1
- package/dist/config/load.d.ts +3 -1
- package/dist/config/load.js +5 -3
- package/dist/config/types.d.ts +3 -0
- package/dist/config/types.js +1 -1
- package/dist/config/validate.d.ts +2 -1
- package/dist/config/validate.js +2 -4
- package/dist/email/build.d.ts +2 -1
- package/dist/email/build.js +7 -9
- package/dist/express/middleware/errorHandler.spec.js +2 -2
- package/dist/fields/config/sanitize.js +2 -2
- package/dist/fields/config/schema.js +3 -1
- package/dist/fields/config/types.d.ts +25 -1
- package/dist/fields/config/types.js +1 -1
- package/dist/fields/performFieldOperations.js +3 -3
- package/dist/fields/traverseFields.js +15 -5
- package/dist/fields/validationPromise.d.ts +10 -3
- package/dist/fields/validationPromise.js +16 -5
- package/dist/fields/validations.d.ts +33 -35
- package/dist/fields/validations.js +130 -76
- package/dist/fields/validations.spec.js +115 -43
- package/dist/graphql/schema/fieldToSchemaMap.js +7 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -5
- package/dist/mongoose/buildQuery.js +2 -2
- package/dist/mongoose/connect.d.ts +2 -1
- package/dist/mongoose/connect.js +2 -4
- package/dist/mongoose/sanitizeFormattedValue.js +12 -3
- package/dist/utilities/logger.d.ts +1 -1
- package/dist/utilities/logger.js +10 -6
- package/dist/webpack/getBaseConfig.js +2 -1
- package/docs/fields/overview.mdx +39 -3
- package/docs/fields/relationship.mdx +45 -0
- package/docs/fields/upload.mdx +1 -0
- package/docs/getting-started/installation.mdx +14 -10
- package/docs/queries/overview.mdx +2 -1
- package/package.json +1 -1
|
@@ -14,6 +14,7 @@ import LeaveWithoutSaving from '../../modals/LeaveWithoutSaving';
|
|
|
14
14
|
import Meta from '../../utilities/Meta';
|
|
15
15
|
import Auth from '../collections/Edit/Auth';
|
|
16
16
|
import Loading from '../../elements/Loading';
|
|
17
|
+
import { OperationContext } from '../../utilities/OperationProvider';
|
|
17
18
|
import './index.scss';
|
|
18
19
|
const baseClass = 'account';
|
|
19
20
|
const DefaultAccount = (props) => {
|
|
@@ -26,44 +27,45 @@ const DefaultAccount = (props) => {
|
|
|
26
27
|
].filter(Boolean).join(' ');
|
|
27
28
|
return (React.createElement("div", { className: classes },
|
|
28
29
|
isLoading && (React.createElement(Loading, null)),
|
|
29
|
-
!isLoading && (React.createElement(
|
|
30
|
-
React.createElement(
|
|
31
|
-
React.createElement(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
React.createElement("
|
|
36
|
-
React.createElement("
|
|
37
|
-
React.createElement(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
React.createElement("div", { className: `${baseClass}__sidebar` },
|
|
42
|
-
React.createElement("div", { className: `${baseClass}__sidebar
|
|
43
|
-
React.createElement("
|
|
44
|
-
React.createElement("
|
|
45
|
-
React.createElement(
|
|
46
|
-
|
|
47
|
-
React.createElement(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
React.createElement(
|
|
51
|
-
|
|
52
|
-
React.createElement("
|
|
53
|
-
React.createElement("
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
React.createElement("
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
React.createElement("
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
React.createElement("
|
|
67
|
-
|
|
30
|
+
!isLoading && (React.createElement(OperationContext.Provider, { value: "update" },
|
|
31
|
+
React.createElement(Form, { className: `${baseClass}__form`, method: "put", action: action, initialState: initialState, disabled: !hasSavePermission },
|
|
32
|
+
React.createElement("div", { className: `${baseClass}__main` },
|
|
33
|
+
React.createElement(Meta, { title: "Account", description: "Account of current user", keywords: "Account, Dashboard, Payload, CMS" }),
|
|
34
|
+
React.createElement(Eyebrow, null),
|
|
35
|
+
!(((_a = collection.versions) === null || _a === void 0 ? void 0 : _a.drafts) && ((_c = (_b = collection.versions) === null || _b === void 0 ? void 0 : _b.drafts) === null || _c === void 0 ? void 0 : _c.autosave)) && (React.createElement(LeaveWithoutSaving, null)),
|
|
36
|
+
React.createElement("div", { className: `${baseClass}__edit` },
|
|
37
|
+
React.createElement("header", { className: `${baseClass}__header` },
|
|
38
|
+
React.createElement("h1", null,
|
|
39
|
+
React.createElement(RenderTitle, { ...{ data, useAsTitle, fallback: '[Untitled]' } }))),
|
|
40
|
+
React.createElement(Auth, { useAPIKey: auth.useAPIKey, collection: collection, email: data === null || data === void 0 ? void 0 : data.email, operation: "update" }),
|
|
41
|
+
React.createElement(RenderFields, { permissions: permissions.fields, readOnly: !hasSavePermission, filter: (field) => { var _a; return ((_a = field === null || field === void 0 ? void 0 : field.admin) === null || _a === void 0 ? void 0 : _a.position) !== 'sidebar'; }, fieldTypes: fieldTypes, fieldSchema: fields }))),
|
|
42
|
+
React.createElement("div", { className: `${baseClass}__sidebar-wrap` },
|
|
43
|
+
React.createElement("div", { className: `${baseClass}__sidebar` },
|
|
44
|
+
React.createElement("div", { className: `${baseClass}__sidebar-sticky-wrap` },
|
|
45
|
+
React.createElement("ul", { className: `${baseClass}__collection-actions` }, ((_d = permissions === null || permissions === void 0 ? void 0 : permissions.create) === null || _d === void 0 ? void 0 : _d.permission) && (React.createElement(React.Fragment, null,
|
|
46
|
+
React.createElement("li", null,
|
|
47
|
+
React.createElement(Link, { to: `${admin}/collections/${slug}/create` }, "Create New"))))),
|
|
48
|
+
React.createElement("div", { className: `${baseClass}__document-actions${preview ? ` ${baseClass}__document-actions--with-preview` : ''}` },
|
|
49
|
+
React.createElement(PreviewButton, { generatePreviewURL: preview, data: data }),
|
|
50
|
+
hasSavePermission && (React.createElement(FormSubmit, null, "Save"))),
|
|
51
|
+
React.createElement("div", { className: `${baseClass}__sidebar-fields` },
|
|
52
|
+
React.createElement(RenderFields, { permissions: permissions.fields, readOnly: !hasSavePermission, filter: (field) => { var _a; return ((_a = field === null || field === void 0 ? void 0 : field.admin) === null || _a === void 0 ? void 0 : _a.position) === 'sidebar'; }, fieldTypes: fieldTypes, fieldSchema: fields })),
|
|
53
|
+
React.createElement("ul", { className: `${baseClass}__meta` },
|
|
54
|
+
React.createElement("li", { className: `${baseClass}__api-url` },
|
|
55
|
+
React.createElement("span", { className: `${baseClass}__label` },
|
|
56
|
+
"API URL",
|
|
57
|
+
' ',
|
|
58
|
+
React.createElement(CopyToClipboard, { value: apiURL })),
|
|
59
|
+
React.createElement("a", { href: apiURL, target: "_blank", rel: "noopener noreferrer" }, apiURL)),
|
|
60
|
+
React.createElement("li", null,
|
|
61
|
+
React.createElement("div", { className: `${baseClass}__label` }, "ID"),
|
|
62
|
+
React.createElement("div", null, data === null || data === void 0 ? void 0 : data.id)),
|
|
63
|
+
timestamps && (React.createElement(React.Fragment, null,
|
|
64
|
+
data.updatedAt && (React.createElement("li", null,
|
|
65
|
+
React.createElement("div", { className: `${baseClass}__label` }, "Last Modified"),
|
|
66
|
+
React.createElement("div", null, format(new Date(data.updatedAt), dateFormat)))),
|
|
67
|
+
data.createdAt && (React.createElement("li", null,
|
|
68
|
+
React.createElement("div", { className: `${baseClass}__label` }, "Created"),
|
|
69
|
+
React.createElement("div", null, format(new Date(data.createdAt), dateFormat)))))))))))))));
|
|
68
70
|
};
|
|
69
71
|
export default DefaultAccount;
|
|
@@ -8,6 +8,7 @@ import DefaultAccount from './Default';
|
|
|
8
8
|
import buildStateFromSchema from '../../forms/Form/buildStateFromSchema';
|
|
9
9
|
import RenderCustomComponent from '../../utilities/RenderCustomComponent';
|
|
10
10
|
import { NegativeFieldGutterProvider } from '../../forms/FieldTypeGutter/context';
|
|
11
|
+
import { useDocumentInfo } from '../../utilities/DocumentInfo';
|
|
11
12
|
const AccountView = () => {
|
|
12
13
|
var _a, _b;
|
|
13
14
|
const { state: locationState } = useLocation();
|
|
@@ -15,6 +16,7 @@ const AccountView = () => {
|
|
|
15
16
|
const { setStepNav } = useStepNav();
|
|
16
17
|
const { user, permissions } = useAuth();
|
|
17
18
|
const [initialState, setInitialState] = useState({});
|
|
19
|
+
const { id } = useDocumentInfo();
|
|
18
20
|
const { serverURL, routes: { api }, collections, admin: { user: adminUser, components: { views: { Account: CustomAccount, } = {
|
|
19
21
|
Account: undefined,
|
|
20
22
|
}, } = {}, } = {
|
|
@@ -36,11 +38,11 @@ const AccountView = () => {
|
|
|
36
38
|
}, [setStepNav]);
|
|
37
39
|
useEffect(() => {
|
|
38
40
|
const awaitInitialState = async () => {
|
|
39
|
-
const state = await buildStateFromSchema(fields, dataToRender);
|
|
41
|
+
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender, operation: 'update', id, user });
|
|
40
42
|
setInitialState(state);
|
|
41
43
|
};
|
|
42
44
|
awaitInitialState();
|
|
43
|
-
}, [dataToRender, fields]);
|
|
45
|
+
}, [dataToRender, fields, id, user]);
|
|
44
46
|
return (React.createElement(NegativeFieldGutterProvider, { allow: true },
|
|
45
47
|
React.createElement(RenderCustomComponent, { DefaultComponent: DefaultAccount, CustomComponent: CustomAccount, componentProps: {
|
|
46
48
|
action,
|
|
@@ -43,7 +43,7 @@ const CreateFirstUser = (props) => {
|
|
|
43
43
|
React.createElement("h1", null, "Welcome"),
|
|
44
44
|
React.createElement("p", null, "To begin, create your first user."),
|
|
45
45
|
React.createElement(Meta, { title: "Create First User", description: "Create first user", keywords: "Create, Payload, CMS" }),
|
|
46
|
-
React.createElement(Form, { onSuccess: onSuccess, method: "post", redirect: admin, action: `${serverURL}${api}/${userSlug}/first-register
|
|
46
|
+
React.createElement(Form, { onSuccess: onSuccess, method: "post", redirect: admin, action: `${serverURL}${api}/${userSlug}/first-register`, validationOperation: "create" },
|
|
47
47
|
React.createElement(NegativeFieldGutterProvider, { allow: true },
|
|
48
48
|
React.createElement(RenderFields, { fieldSchema: [
|
|
49
49
|
...fields,
|
|
@@ -19,6 +19,7 @@ import Publish from '../../elements/Publish';
|
|
|
19
19
|
import Status from '../../elements/Status';
|
|
20
20
|
import Autosave from '../../elements/Autosave';
|
|
21
21
|
import './index.scss';
|
|
22
|
+
import { OperationContext } from '../../utilities/OperationProvider';
|
|
22
23
|
const baseClass = 'global-edit';
|
|
23
24
|
const DefaultGlobalView = (props) => {
|
|
24
25
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
@@ -29,48 +30,49 @@ const DefaultGlobalView = (props) => {
|
|
|
29
30
|
const hasSavePermission = (_a = permissions === null || permissions === void 0 ? void 0 : permissions.update) === null || _a === void 0 ? void 0 : _a.permission;
|
|
30
31
|
return (React.createElement("div", { className: baseClass },
|
|
31
32
|
isLoading && (React.createElement(Loading, null)),
|
|
32
|
-
!isLoading && (React.createElement(
|
|
33
|
-
React.createElement(
|
|
34
|
-
React.createElement(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
React.createElement("
|
|
39
|
-
React.createElement("
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
React.createElement(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
React.createElement("div", { className: `${baseClass}__sidebar` },
|
|
48
|
-
React.createElement("div", { className: `${baseClass}__sidebar
|
|
49
|
-
React.createElement("div", { className: `${baseClass}
|
|
50
|
-
(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
React.createElement(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
React.createElement("
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
React.createElement("
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
React.createElement("
|
|
74
|
-
|
|
33
|
+
!isLoading && (React.createElement(OperationContext.Provider, { value: "update" },
|
|
34
|
+
React.createElement(Form, { className: `${baseClass}__form`, method: "post", action: action, onSuccess: onSave, disabled: !hasSavePermission, initialState: initialState },
|
|
35
|
+
React.createElement("div", { className: `${baseClass}__main` },
|
|
36
|
+
React.createElement(Meta, { title: label, description: label, keywords: `${label}, Payload, CMS` }),
|
|
37
|
+
React.createElement(Eyebrow, null),
|
|
38
|
+
!(((_b = global.versions) === null || _b === void 0 ? void 0 : _b.drafts) && ((_d = (_c = global.versions) === null || _c === void 0 ? void 0 : _c.drafts) === null || _d === void 0 ? void 0 : _d.autosave)) && (React.createElement(LeaveWithoutSaving, null)),
|
|
39
|
+
React.createElement("div", { className: `${baseClass}__edit` },
|
|
40
|
+
React.createElement("header", { className: `${baseClass}__header` },
|
|
41
|
+
React.createElement("h1", null,
|
|
42
|
+
"Edit",
|
|
43
|
+
' ',
|
|
44
|
+
label),
|
|
45
|
+
description && (React.createElement("div", { className: `${baseClass}__sub-header` },
|
|
46
|
+
React.createElement(ViewDescription, { description: description })))),
|
|
47
|
+
React.createElement(RenderFields, { readOnly: !hasSavePermission, permissions: permissions.fields, filter: (field) => (!field.admin.position || (field.admin.position && field.admin.position !== 'sidebar')), fieldTypes: fieldTypes, fieldSchema: fields }))),
|
|
48
|
+
React.createElement("div", { className: `${baseClass}__sidebar-wrap` },
|
|
49
|
+
React.createElement("div", { className: `${baseClass}__sidebar` },
|
|
50
|
+
React.createElement("div", { className: `${baseClass}__sidebar-sticky-wrap` },
|
|
51
|
+
React.createElement("div", { className: `${baseClass}__document-actions${((((_e = global.versions) === null || _e === void 0 ? void 0 : _e.drafts) && !((_g = (_f = global.versions) === null || _f === void 0 ? void 0 : _f.drafts) === null || _g === void 0 ? void 0 : _g.autosave)) || preview) ? ` ${baseClass}__document-actions--has-2` : ''}` },
|
|
52
|
+
(preview && (!((_h = global.versions) === null || _h === void 0 ? void 0 : _h.drafts) || ((_k = (_j = global.versions) === null || _j === void 0 ? void 0 : _j.drafts) === null || _k === void 0 ? void 0 : _k.autosave))) && (React.createElement(PreviewButton, { generatePreviewURL: preview, data: data })),
|
|
53
|
+
hasSavePermission && (React.createElement(React.Fragment, null,
|
|
54
|
+
((_l = global.versions) === null || _l === void 0 ? void 0 : _l.drafts) && (React.createElement(React.Fragment, null,
|
|
55
|
+
!global.versions.drafts.autosave && (React.createElement(SaveDraft, null)),
|
|
56
|
+
React.createElement(Publish, null))),
|
|
57
|
+
!((_m = global.versions) === null || _m === void 0 ? void 0 : _m.drafts) && (React.createElement(FormSubmit, null, "Save"))))),
|
|
58
|
+
React.createElement("div", { className: `${baseClass}__sidebar-fields` },
|
|
59
|
+
(preview && (((_o = global.versions) === null || _o === void 0 ? void 0 : _o.drafts) && !((_q = (_p = global.versions) === null || _p === void 0 ? void 0 : _p.drafts) === null || _q === void 0 ? void 0 : _q.autosave))) && (React.createElement(PreviewButton, { generatePreviewURL: preview, data: data })),
|
|
60
|
+
((_r = global.versions) === null || _r === void 0 ? void 0 : _r.drafts) && (React.createElement(React.Fragment, null,
|
|
61
|
+
React.createElement(Status, null),
|
|
62
|
+
(global.versions.drafts.autosave && hasSavePermission) && (React.createElement(Autosave, { publishedDocUpdatedAt: (publishedDoc === null || publishedDoc === void 0 ? void 0 : publishedDoc.updatedAt) || (data === null || data === void 0 ? void 0 : data.createdAt), global: global })))),
|
|
63
|
+
React.createElement(RenderFields, { readOnly: !hasSavePermission, permissions: permissions.fields, filter: (field) => field.admin.position === 'sidebar', fieldTypes: fieldTypes, fieldSchema: fields })),
|
|
64
|
+
React.createElement("ul", { className: `${baseClass}__meta` },
|
|
65
|
+
versions && (React.createElement("li", null,
|
|
66
|
+
React.createElement("div", { className: `${baseClass}__label` }, "Versions"),
|
|
67
|
+
React.createElement(VersionsCount, { global: global }))),
|
|
68
|
+
(data && !hideAPIURL) && (React.createElement("li", { className: `${baseClass}__api-url` },
|
|
69
|
+
React.createElement("span", { className: `${baseClass}__label` },
|
|
70
|
+
"API URL",
|
|
71
|
+
' ',
|
|
72
|
+
React.createElement(CopyToClipboard, { value: apiURL })),
|
|
73
|
+
React.createElement("a", { href: apiURL, target: "_blank", rel: "noopener noreferrer" }, apiURL))),
|
|
74
|
+
data.updatedAt && (React.createElement("li", null,
|
|
75
|
+
React.createElement("div", { className: `${baseClass}__label` }, "Last Modified"),
|
|
76
|
+
React.createElement("div", null, format(new Date(data.updatedAt), dateFormat)))))))))))));
|
|
75
77
|
};
|
|
76
78
|
export default DefaultGlobalView;
|
|
@@ -14,7 +14,7 @@ const GlobalView = (props) => {
|
|
|
14
14
|
const { state: locationState } = useLocation();
|
|
15
15
|
const locale = useLocale();
|
|
16
16
|
const { setStepNav } = useStepNav();
|
|
17
|
-
const { permissions } = useAuth();
|
|
17
|
+
const { permissions, user } = useAuth();
|
|
18
18
|
const [initialState, setInitialState] = useState({});
|
|
19
19
|
const { getVersions } = useDocumentInfo();
|
|
20
20
|
const { serverURL, routes: { api, }, } = useConfig();
|
|
@@ -22,9 +22,9 @@ const GlobalView = (props) => {
|
|
|
22
22
|
const { slug, label, fields, admin: { components: { views: { Edit: CustomEdit, } = {}, } = {}, } = {}, } = global;
|
|
23
23
|
const onSave = useCallback(async (json) => {
|
|
24
24
|
getVersions();
|
|
25
|
-
const state = await buildStateFromSchema(fields, json.result);
|
|
25
|
+
const state = await buildStateFromSchema({ fieldSchema: fields, data: json.result, operation: 'update', user });
|
|
26
26
|
setInitialState(state);
|
|
27
|
-
}, [getVersions, fields]);
|
|
27
|
+
}, [getVersions, fields, user]);
|
|
28
28
|
const [{ data, isLoading }] = usePayloadAPI(`${serverURL}${api}/globals/${slug}`, { initialParams: { 'fallback-locale': 'null', depth: 0, draft: 'true' } });
|
|
29
29
|
const dataToRender = (locationState === null || locationState === void 0 ? void 0 : locationState.data) || data;
|
|
30
30
|
useEffect(() => {
|
|
@@ -35,11 +35,11 @@ const GlobalView = (props) => {
|
|
|
35
35
|
}, [setStepNav, label]);
|
|
36
36
|
useEffect(() => {
|
|
37
37
|
const awaitInitialState = async () => {
|
|
38
|
-
const state = await buildStateFromSchema(fields, dataToRender);
|
|
38
|
+
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender, user, operation: 'update' });
|
|
39
39
|
setInitialState(state);
|
|
40
40
|
};
|
|
41
41
|
awaitInitialState();
|
|
42
|
-
}, [dataToRender, fields]);
|
|
42
|
+
}, [dataToRender, fields, user]);
|
|
43
43
|
const globalPermissions = (_a = permissions === null || permissions === void 0 ? void 0 : permissions.globals) === null || _a === void 0 ? void 0 : _a[slug];
|
|
44
44
|
return (React.createElement(NegativeFieldGutterProvider, { allow: true },
|
|
45
45
|
React.createElement(RenderCustomComponent, { DefaultComponent: DefaultGlobal, CustomComponent: CustomEdit, componentProps: {
|
|
@@ -8,7 +8,7 @@ import { useWatchForm } from '../../../../forms/Form/context';
|
|
|
8
8
|
import GenerateConfirmation from '../../../../elements/GenerateConfirmation';
|
|
9
9
|
const path = 'apiKey';
|
|
10
10
|
const baseClass = 'api-key';
|
|
11
|
-
const validate = (val) => text(val, { minLength: 24, maxLength: 48 });
|
|
11
|
+
const validate = (val) => text(val, { minLength: 24, maxLength: 48, data: {}, siblingData: {} });
|
|
12
12
|
const APIKey = () => {
|
|
13
13
|
const [initialAPIKey, setInitialAPIKey] = useState(null);
|
|
14
14
|
const [highlightedField, setHighlightedField] = useState(false);
|
|
@@ -23,6 +23,7 @@ import Status from '../../../elements/Status';
|
|
|
23
23
|
import Publish from '../../../elements/Publish';
|
|
24
24
|
import SaveDraft from '../../../elements/SaveDraft';
|
|
25
25
|
import { useDocumentInfo } from '../../../utilities/DocumentInfo';
|
|
26
|
+
import { OperationContext } from '../../../utilities/OperationProvider';
|
|
26
27
|
import './index.scss';
|
|
27
28
|
const baseClass = 'collection-edit';
|
|
28
29
|
const DefaultEditView = (props) => {
|
|
@@ -39,58 +40,59 @@ const DefaultEditView = (props) => {
|
|
|
39
40
|
const operation = isEditing ? 'update' : 'create';
|
|
40
41
|
return (React.createElement("div", { className: classes },
|
|
41
42
|
isLoading && (React.createElement(Loading, null)),
|
|
42
|
-
!isLoading && (React.createElement(
|
|
43
|
-
React.createElement(
|
|
44
|
-
React.createElement(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
React.createElement("
|
|
49
|
-
React.createElement("
|
|
50
|
-
React.createElement(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
React.createElement("div", { className: `${baseClass}__sidebar` },
|
|
56
|
-
React.createElement("div", { className: `${baseClass}__sidebar
|
|
57
|
-
React.createElement("
|
|
58
|
-
(
|
|
59
|
-
React.createElement(
|
|
60
|
-
React.createElement(
|
|
61
|
-
|
|
62
|
-
React.createElement(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
React.createElement(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
React.createElement("
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
React.createElement("
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
React.createElement("
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
43
|
+
!isLoading && (React.createElement(OperationContext.Provider, { value: operation },
|
|
44
|
+
React.createElement(Form, { className: `${baseClass}__form`, method: id ? 'put' : 'post', action: action, onSuccess: onSave, disabled: !hasSavePermission, initialState: initialState },
|
|
45
|
+
React.createElement("div", { className: `${baseClass}__main` },
|
|
46
|
+
React.createElement(Meta, { title: `${isEditing ? 'Editing' : 'Creating'} - ${collection.labels.singular}`, description: `${isEditing ? 'Editing' : 'Creating'} - ${collection.labels.singular}`, keywords: `${collection.labels.singular}, Payload, CMS` }),
|
|
47
|
+
React.createElement(Eyebrow, null),
|
|
48
|
+
!(((_a = collection.versions) === null || _a === void 0 ? void 0 : _a.drafts) && ((_c = (_b = collection.versions) === null || _b === void 0 ? void 0 : _b.drafts) === null || _c === void 0 ? void 0 : _c.autosave)) && (React.createElement(LeaveWithoutSaving, null)),
|
|
49
|
+
React.createElement("div", { className: `${baseClass}__edit` },
|
|
50
|
+
React.createElement("header", { className: `${baseClass}__header` },
|
|
51
|
+
React.createElement("h1", null,
|
|
52
|
+
React.createElement(RenderTitle, { ...{ data, useAsTitle, fallback: '[Untitled]' } }))),
|
|
53
|
+
auth && (React.createElement(Auth, { useAPIKey: auth.useAPIKey, requirePassword: !isEditing, verify: auth.verify, collection: collection, email: data === null || data === void 0 ? void 0 : data.email, operation: operation })),
|
|
54
|
+
upload && (React.createElement(Upload, { data: data, collection: collection })),
|
|
55
|
+
React.createElement(RenderFields, { readOnly: !hasSavePermission, permissions: permissions.fields, filter: (field) => { var _a, _b; return (!((_a = field === null || field === void 0 ? void 0 : field.admin) === null || _a === void 0 ? void 0 : _a.position) || (((_b = field === null || field === void 0 ? void 0 : field.admin) === null || _b === void 0 ? void 0 : _b.position) !== 'sidebar')); }, fieldTypes: fieldTypes, fieldSchema: fields }))),
|
|
56
|
+
React.createElement("div", { className: `${baseClass}__sidebar-wrap` },
|
|
57
|
+
React.createElement("div", { className: `${baseClass}__sidebar` },
|
|
58
|
+
React.createElement("div", { className: `${baseClass}__sidebar-sticky-wrap` },
|
|
59
|
+
React.createElement("ul", { className: `${baseClass}__collection-actions` },
|
|
60
|
+
((_d = permissions === null || permissions === void 0 ? void 0 : permissions.create) === null || _d === void 0 ? void 0 : _d.permission) && (React.createElement(React.Fragment, null,
|
|
61
|
+
React.createElement("li", null,
|
|
62
|
+
React.createElement(Link, { to: `${admin}/collections/${slug}/create` }, "Create New")),
|
|
63
|
+
!disableDuplicate && (React.createElement("li", null,
|
|
64
|
+
React.createElement(DuplicateDocument, { slug: slug }))))),
|
|
65
|
+
((_e = permissions === null || permissions === void 0 ? void 0 : permissions.delete) === null || _e === void 0 ? void 0 : _e.permission) && (React.createElement("li", null,
|
|
66
|
+
React.createElement(DeleteDocument, { collection: collection, id: id })))),
|
|
67
|
+
React.createElement("div", { className: `${baseClass}__document-actions${((((_f = collection.versions) === null || _f === void 0 ? void 0 : _f.drafts) && !((_h = (_g = collection.versions) === null || _g === void 0 ? void 0 : _g.drafts) === null || _h === void 0 ? void 0 : _h.autosave)) || (isEditing && preview)) ? ` ${baseClass}__document-actions--has-2` : ''}` },
|
|
68
|
+
(preview && (!((_j = collection.versions) === null || _j === void 0 ? void 0 : _j.drafts) || ((_l = (_k = collection.versions) === null || _k === void 0 ? void 0 : _k.drafts) === null || _l === void 0 ? void 0 : _l.autosave))) && (React.createElement(PreviewButton, { generatePreviewURL: preview, data: data })),
|
|
69
|
+
hasSavePermission && (React.createElement(React.Fragment, null,
|
|
70
|
+
((_m = collection.versions) === null || _m === void 0 ? void 0 : _m.drafts) && (React.createElement(React.Fragment, null,
|
|
71
|
+
!collection.versions.drafts.autosave && (React.createElement(SaveDraft, null)),
|
|
72
|
+
React.createElement(Publish, null))),
|
|
73
|
+
!((_o = collection.versions) === null || _o === void 0 ? void 0 : _o.drafts) && (React.createElement(FormSubmit, null, "Save"))))),
|
|
74
|
+
React.createElement("div", { className: `${baseClass}__sidebar-fields` },
|
|
75
|
+
(isEditing && preview && (((_p = collection.versions) === null || _p === void 0 ? void 0 : _p.drafts) && !((_r = (_q = collection.versions) === null || _q === void 0 ? void 0 : _q.drafts) === null || _r === void 0 ? void 0 : _r.autosave))) && (React.createElement(PreviewButton, { generatePreviewURL: preview, data: data })),
|
|
76
|
+
((_s = collection.versions) === null || _s === void 0 ? void 0 : _s.drafts) && (React.createElement(React.Fragment, null,
|
|
77
|
+
React.createElement(Status, null),
|
|
78
|
+
(((_t = collection.versions) === null || _t === void 0 ? void 0 : _t.drafts.autosave) && hasSavePermission) && (React.createElement(Autosave, { publishedDocUpdatedAt: (publishedDoc === null || publishedDoc === void 0 ? void 0 : publishedDoc.updatedAt) || (data === null || data === void 0 ? void 0 : data.createdAt), collection: collection, id: id })))),
|
|
79
|
+
React.createElement(RenderFields, { readOnly: !hasSavePermission, permissions: permissions.fields, filter: (field) => { var _a; return ((_a = field === null || field === void 0 ? void 0 : field.admin) === null || _a === void 0 ? void 0 : _a.position) === 'sidebar'; }, fieldTypes: fieldTypes, fieldSchema: fields })),
|
|
80
|
+
isEditing && (React.createElement("ul", { className: `${baseClass}__meta` },
|
|
81
|
+
!hideAPIURL && (React.createElement("li", { className: `${baseClass}__api-url` },
|
|
82
|
+
React.createElement("span", { className: `${baseClass}__label` },
|
|
83
|
+
"API URL",
|
|
84
|
+
' ',
|
|
85
|
+
React.createElement(CopyToClipboard, { value: apiURL })),
|
|
86
|
+
React.createElement("a", { href: apiURL, target: "_blank", rel: "noopener noreferrer" }, apiURL))),
|
|
87
|
+
versions && (React.createElement("li", null,
|
|
88
|
+
React.createElement("div", { className: `${baseClass}__label` }, "Versions"),
|
|
89
|
+
React.createElement(VersionsCount, { collection: collection, id: id }))),
|
|
90
|
+
timestamps && (React.createElement(React.Fragment, null,
|
|
91
|
+
data.updatedAt && (React.createElement("li", null,
|
|
92
|
+
React.createElement("div", { className: `${baseClass}__label` }, "Last Modified"),
|
|
93
|
+
React.createElement("div", null, format(new Date(data.updatedAt), dateFormat)))),
|
|
94
|
+
((publishedDoc === null || publishedDoc === void 0 ? void 0 : publishedDoc.createdAt) || (data === null || data === void 0 ? void 0 : data.createdAt)) && (React.createElement("li", null,
|
|
95
|
+
React.createElement("div", { className: `${baseClass}__label` }, "Created"),
|
|
96
|
+
React.createElement("div", null, format(new Date((publishedDoc === null || publishedDoc === void 0 ? void 0 : publishedDoc.createdAt) || (data === null || data === void 0 ? void 0 : data.createdAt)), dateFormat))))))))))))))));
|
|
95
97
|
};
|
|
96
98
|
export default DefaultEditView;
|
|
@@ -23,7 +23,7 @@ const EditView = (props) => {
|
|
|
23
23
|
const history = useHistory();
|
|
24
24
|
const { setStepNav } = useStepNav();
|
|
25
25
|
const [initialState, setInitialState] = useState({});
|
|
26
|
-
const { permissions } = useAuth();
|
|
26
|
+
const { permissions, user } = useAuth();
|
|
27
27
|
const { getVersions } = useDocumentInfo();
|
|
28
28
|
const onSave = useCallback(async (json) => {
|
|
29
29
|
var _a;
|
|
@@ -32,10 +32,10 @@ const EditView = (props) => {
|
|
|
32
32
|
history.push(`${admin}/collections/${collection.slug}/${(_a = json === null || json === void 0 ? void 0 : json.doc) === null || _a === void 0 ? void 0 : _a.id}`);
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
|
-
const state = await buildStateFromSchema(collection.fields, json.doc);
|
|
35
|
+
const state = await buildStateFromSchema({ fieldSchema: collection.fields, data: json.doc, user, id, operation: 'update' });
|
|
36
36
|
setInitialState(state);
|
|
37
37
|
}
|
|
38
|
-
}, [admin, collection, history, isEditing, getVersions]);
|
|
38
|
+
}, [admin, collection, history, isEditing, getVersions, user, id]);
|
|
39
39
|
const [{ data, isLoading, isError }] = usePayloadAPI((isEditing ? `${serverURL}${api}/${slug}/${id}` : null), { initialParams: { 'fallback-locale': 'null', depth: 0, draft: 'true' } });
|
|
40
40
|
const dataToRender = ((_a = locationState) === null || _a === void 0 ? void 0 : _a.data) || data;
|
|
41
41
|
useEffect(() => {
|
|
@@ -71,11 +71,11 @@ const EditView = (props) => {
|
|
|
71
71
|
}, [setStepNav, isEditing, pluralLabel, dataToRender, slug, useAsTitle, admin]);
|
|
72
72
|
useEffect(() => {
|
|
73
73
|
const awaitInitialState = async () => {
|
|
74
|
-
const state = await buildStateFromSchema(fields, dataToRender);
|
|
74
|
+
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender, user, operation: isEditing ? 'update' : 'create', id });
|
|
75
75
|
setInitialState(state);
|
|
76
76
|
};
|
|
77
77
|
awaitInitialState();
|
|
78
|
-
}, [dataToRender, fields]);
|
|
78
|
+
}, [dataToRender, fields, isEditing, id, user]);
|
|
79
79
|
if (isError) {
|
|
80
80
|
return (React.createElement(Redirect, { to: `${admin}/not-found` }));
|
|
81
81
|
}
|
|
@@ -31,7 +31,7 @@ describe('GeoJSON', () => {
|
|
|
31
31
|
done();
|
|
32
32
|
});
|
|
33
33
|
describe('Point Field - REST', () => {
|
|
34
|
-
|
|
34
|
+
let location = [10, 20];
|
|
35
35
|
const localizedPoint = [30, 40];
|
|
36
36
|
const group = { point: [15, 25] };
|
|
37
37
|
let doc;
|
|
@@ -100,6 +100,17 @@ describe('GeoJSON', () => {
|
|
|
100
100
|
expect(hitDocs).toHaveLength(1);
|
|
101
101
|
expect(missDocs).toHaveLength(0);
|
|
102
102
|
});
|
|
103
|
+
it('should save with non-required point', async () => {
|
|
104
|
+
location = undefined;
|
|
105
|
+
const create = await fetch(`${serverURL}/api/geolocation`, {
|
|
106
|
+
body: JSON.stringify({ location }),
|
|
107
|
+
headers,
|
|
108
|
+
method: 'post',
|
|
109
|
+
});
|
|
110
|
+
const { doc } = await create.json();
|
|
111
|
+
expect(doc.id).toBeDefined();
|
|
112
|
+
expect(doc.location).toStrictEqual(location);
|
|
113
|
+
});
|
|
103
114
|
});
|
|
104
115
|
describe('Point Field - GraphQL', () => {
|
|
105
116
|
const url = `${serverURL}${routes.api}${routes.graphQL}`;
|
|
@@ -112,20 +123,20 @@ describe('GeoJSON', () => {
|
|
|
112
123
|
client = new graphql_request_1.GraphQLClient(url, { headers: { Authorization: `JWT ${token}` } });
|
|
113
124
|
// language=graphQL
|
|
114
125
|
const query = `mutation {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
) {
|
|
124
|
-
id
|
|
125
|
-
location
|
|
126
|
-
localizedPoint
|
|
126
|
+
createGeolocation (
|
|
127
|
+
data: {
|
|
128
|
+
location: [${location[0]}, ${location[1]}],
|
|
129
|
+
localizedPoint: [${localizedPoint[0]}, ${localizedPoint[1]}],
|
|
130
|
+
group: {
|
|
131
|
+
point: [${group.point[0]}, ${group.point[1]}]
|
|
132
|
+
}
|
|
127
133
|
}
|
|
128
|
-
|
|
134
|
+
) {
|
|
135
|
+
id
|
|
136
|
+
location
|
|
137
|
+
localizedPoint
|
|
138
|
+
}
|
|
139
|
+
}`;
|
|
129
140
|
const response = await client.request(query);
|
|
130
141
|
const { id } = response.createGeolocation;
|
|
131
142
|
// language=graphQL
|
|
@@ -205,4 +216,4 @@ describe('GeoJSON', () => {
|
|
|
205
216
|
});
|
|
206
217
|
});
|
|
207
218
|
});
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRGaWVsZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbGxlY3Rpb25zL3Rlc3RzL3BvaW50RmllbGQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUFnRDtBQUNoRCw2REFBMEM7QUFDMUMsb0VBQWlFO0FBRWpFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTVCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSxjQUFTLEdBQUUsQ0FBQztBQUUxQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRW5CLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3ZCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxTQUFTLG1CQUFtQixFQUFFO1lBQzVELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNuQixLQUFLLEVBQUwsdUJBQUs7Z0JBQ0wsUUFBUSxFQUFSLDBCQUFRO2FBQ1QsQ0FBQztZQUNGLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkIsT0FBTyxHQUFHO1lBQ1IsYUFBYSxFQUFFLE9BQU8sS0FBSyxFQUFFO1lBQzdCLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztRQUVGLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFF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
|