payload 0.15.1 → 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/.eslintrc.js +6 -0
- package/CHANGELOG.md +35 -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/elements/elements.spec.d.ts +1 -0
- package/dist/admin/components/elements/elements.spec.js +12 -0
- 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/auth/auth.spec.d.ts +1 -0
- package/dist/auth/auth.spec.js +198 -0
- package/dist/collections/graphql/resolvers/resolvers.spec.d.ts +1 -0
- package/dist/collections/graphql/resolvers/resolvers.spec.js +360 -0
- package/dist/collections/operations/local/local.spec.d.ts +1 -0
- package/dist/collections/operations/local/local.spec.js +175 -0
- package/dist/collections/tests/collections.spec.d.ts +1 -0
- package/dist/collections/tests/collections.spec.js +725 -0
- package/dist/collections/tests/hooks.spec.d.ts +1 -0
- package/dist/collections/tests/hooks.spec.js +152 -0
- package/dist/collections/tests/pointField.spec.d.ts +1 -0
- package/dist/collections/tests/pointField.spec.js +219 -0
- package/dist/collections/tests/relationships.spec.d.ts +1 -0
- package/dist/collections/tests/relationships.spec.js +194 -0
- package/dist/collections/tests/uploads.spec.d.ts +1 -0
- package/dist/collections/tests/uploads.spec.js +328 -0
- 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/errors/errors.spec.d.ts +1 -0
- package/dist/errors/errors.spec.js +29 -0
- package/dist/express/middleware/errorHandler.spec.d.ts +1 -0
- package/dist/express/middleware/errorHandler.spec.js +91 -0
- 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/globals/requestHandlers/globals.spec.d.ts +4 -0
- package/dist/globals/requestHandlers/globals.spec.js +161 -0
- package/dist/graphql/schema/buildMutationInputType.js +2 -2
- 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/preferences/graphql/resolvers.spec.d.ts +1 -0
- package/dist/preferences/graphql/resolvers.spec.js +115 -0
- package/dist/utilities/logger.d.ts +1 -1
- package/dist/utilities/logger.js +10 -6
- package/dist/versions/drafts/appendVersionToQueryKey.js +8 -5
- 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
|
@@ -1,21 +1,36 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState, } from 'react';
|
|
2
|
+
import { useAuth } from '@payloadcms/config-provider';
|
|
2
3
|
import { useFormProcessing, useFormSubmitted, useFormModified, useForm } from '../Form/context';
|
|
3
4
|
import useDebounce from '../../../hooks/useDebounce';
|
|
5
|
+
import { useDocumentInfo } from '../../utilities/DocumentInfo';
|
|
6
|
+
import { useOperation } from '../../utilities/OperationProvider';
|
|
4
7
|
const useField = (options) => {
|
|
5
8
|
const { path, validate, enableDebouncedValue, disableFormData, ignoreWhileFlattening, condition, } = options;
|
|
6
9
|
const formContext = useForm();
|
|
7
10
|
const submitted = useFormSubmitted();
|
|
8
11
|
const processing = useFormProcessing();
|
|
9
12
|
const modified = useFormModified();
|
|
10
|
-
const {
|
|
13
|
+
const { user } = useAuth();
|
|
14
|
+
const { id } = useDocumentInfo();
|
|
15
|
+
const operation = useOperation();
|
|
16
|
+
const { dispatchFields, getField, getData, getSiblingData, setModified, } = formContext || {};
|
|
11
17
|
const [internalValue, setInternalValue] = useState(undefined);
|
|
18
|
+
const [internallyValid, setInternallyValid] = useState(undefined);
|
|
12
19
|
// Debounce internal values to update form state only every 60ms
|
|
13
20
|
const debouncedValue = useDebounce(internalValue, 120);
|
|
14
21
|
// Get field by path
|
|
15
22
|
const field = getField(path);
|
|
16
23
|
const initialValue = field === null || field === void 0 ? void 0 : field.initialValue;
|
|
17
|
-
//
|
|
18
|
-
|
|
24
|
+
// Validation is defined by two ways -
|
|
25
|
+
// 1. by field state
|
|
26
|
+
// 2. maintained locally to reflect instant validation state changes
|
|
27
|
+
let valid = true;
|
|
28
|
+
if (field && typeof field.valid === 'boolean') {
|
|
29
|
+
valid = field.valid;
|
|
30
|
+
}
|
|
31
|
+
if (typeof internallyValid === 'boolean') {
|
|
32
|
+
valid = internallyValid;
|
|
33
|
+
}
|
|
19
34
|
const showError = valid === false && submitted;
|
|
20
35
|
// Method to send update field values from field component(s)
|
|
21
36
|
// Should only be used internally
|
|
@@ -31,25 +46,40 @@ const useField = (options) => {
|
|
|
31
46
|
valid: false,
|
|
32
47
|
errorMessage: undefined,
|
|
33
48
|
};
|
|
34
|
-
const
|
|
49
|
+
const validateOptions = {
|
|
50
|
+
id,
|
|
51
|
+
user,
|
|
52
|
+
data: getData(),
|
|
53
|
+
siblingData: getSiblingData(path),
|
|
54
|
+
operation,
|
|
55
|
+
};
|
|
56
|
+
const validationResult = typeof validate === 'function' ? await validate(valueToSend, validateOptions) : true;
|
|
35
57
|
if (typeof validationResult === 'string') {
|
|
36
58
|
fieldToDispatch.errorMessage = validationResult;
|
|
37
59
|
fieldToDispatch.valid = false;
|
|
60
|
+
setInternallyValid(false);
|
|
38
61
|
}
|
|
39
62
|
else {
|
|
40
63
|
fieldToDispatch.valid = validationResult;
|
|
64
|
+
fieldToDispatch.errorMessage = undefined;
|
|
65
|
+
setInternallyValid(true);
|
|
41
66
|
}
|
|
42
67
|
if (typeof dispatchFields === 'function') {
|
|
43
68
|
dispatchFields(fieldToDispatch);
|
|
44
69
|
}
|
|
45
70
|
}, [
|
|
46
|
-
|
|
47
|
-
dispatchFields,
|
|
48
|
-
validate,
|
|
71
|
+
condition,
|
|
49
72
|
disableFormData,
|
|
73
|
+
dispatchFields,
|
|
74
|
+
getData,
|
|
75
|
+
getSiblingData,
|
|
76
|
+
id,
|
|
50
77
|
ignoreWhileFlattening,
|
|
51
78
|
initialValue,
|
|
52
|
-
|
|
79
|
+
operation,
|
|
80
|
+
path,
|
|
81
|
+
user,
|
|
82
|
+
validate,
|
|
53
83
|
]);
|
|
54
84
|
// Method to return from `useField`, used to
|
|
55
85
|
// update internal field values from field component(s)
|
|
@@ -69,6 +99,7 @@ const useField = (options) => {
|
|
|
69
99
|
]);
|
|
70
100
|
useEffect(() => {
|
|
71
101
|
setInternalValue(initialValue);
|
|
102
|
+
setInternallyValid(undefined);
|
|
72
103
|
}, [initialValue]);
|
|
73
104
|
// The only time that the FORM value should be updated
|
|
74
105
|
// is when the debounced value updates. So, when the debounced value updates,
|
|
@@ -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
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|