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.
Files changed (115) hide show
  1. package/.eslintrc.js +6 -0
  2. package/CHANGELOG.md +35 -0
  3. package/dist/admin/components/elements/WhereBuilder/field-types.d.ts +2 -2
  4. package/dist/admin/components/elements/WhereBuilder/field-types.js +11 -7
  5. package/dist/admin/components/elements/elements.spec.d.ts +1 -0
  6. package/dist/admin/components/elements/elements.spec.js +12 -0
  7. package/dist/admin/components/forms/DraggableSection/index.js +2 -3
  8. package/dist/admin/components/forms/Form/buildStateFromSchema.d.ts +10 -1
  9. package/dist/admin/components/forms/Form/buildStateFromSchema.js +14 -6
  10. package/dist/admin/components/forms/Form/getDataByPath.js +6 -11
  11. package/dist/admin/components/forms/Form/getSiblingData.js +12 -14
  12. package/dist/admin/components/forms/Form/index.js +23 -6
  13. package/dist/admin/components/forms/Form/reduceFieldsToValues.d.ts +1 -1
  14. package/dist/admin/components/forms/Form/reduceFieldsToValues.js +1 -2
  15. package/dist/admin/components/forms/Form/types.d.ts +3 -2
  16. package/dist/admin/components/forms/RenderFields/index.d.ts +1 -2
  17. package/dist/admin/components/forms/RenderFields/index.js +6 -16
  18. package/dist/admin/components/forms/RenderFields/types.d.ts +0 -5
  19. package/dist/admin/components/forms/field-types/Array/Array.js +18 -9
  20. package/dist/admin/components/forms/field-types/Blocks/Blocks.js +21 -15
  21. package/dist/admin/components/forms/field-types/Checkbox/index.js +3 -4
  22. package/dist/admin/components/forms/field-types/Code/Code.js +4 -5
  23. package/dist/admin/components/forms/field-types/DateTime/index.js +2 -3
  24. package/dist/admin/components/forms/field-types/Email/index.js +2 -3
  25. package/dist/admin/components/forms/field-types/Number/index.js +3 -4
  26. package/dist/admin/components/forms/field-types/Password/index.js +2 -2
  27. package/dist/admin/components/forms/field-types/Point/index.js +2 -3
  28. package/dist/admin/components/forms/field-types/RadioGroup/index.js +3 -4
  29. package/dist/admin/components/forms/field-types/Relationship/index.js +49 -17
  30. package/dist/admin/components/forms/field-types/RichText/RichText.js +3 -4
  31. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.js +4 -2
  32. package/dist/admin/components/forms/field-types/Row/index.js +7 -2
  33. package/dist/admin/components/forms/field-types/Select/index.js +4 -5
  34. package/dist/admin/components/forms/field-types/Text/index.js +6 -3
  35. package/dist/admin/components/forms/field-types/Textarea/index.js +4 -5
  36. package/dist/admin/components/forms/field-types/Upload/Add/index.js +1 -1
  37. package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -1
  38. package/dist/admin/components/forms/field-types/Upload/Input.js +3 -1
  39. package/dist/admin/components/forms/field-types/Upload/SelectExisting/index.js +27 -4
  40. package/dist/admin/components/forms/field-types/Upload/SelectExisting/types.d.ts +3 -0
  41. package/dist/admin/components/forms/field-types/Upload/index.js +4 -5
  42. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.d.ts +5 -0
  43. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.js +11 -0
  44. package/dist/admin/components/forms/useField/index.js +39 -8
  45. package/dist/admin/components/utilities/OperationProvider/index.d.ts +4 -0
  46. package/dist/admin/components/utilities/OperationProvider/index.js +3 -0
  47. package/dist/admin/components/views/Account/Default.js +41 -39
  48. package/dist/admin/components/views/Account/index.js +4 -2
  49. package/dist/admin/components/views/CreateFirstUser/index.js +1 -1
  50. package/dist/admin/components/views/Global/Default.js +45 -43
  51. package/dist/admin/components/views/Global/index.js +5 -5
  52. package/dist/admin/components/views/collections/Edit/Auth/APIKey.js +1 -1
  53. package/dist/admin/components/views/collections/Edit/Default.js +55 -53
  54. package/dist/admin/components/views/collections/Edit/index.js +5 -5
  55. package/dist/auth/auth.spec.d.ts +1 -0
  56. package/dist/auth/auth.spec.js +198 -0
  57. package/dist/collections/graphql/resolvers/resolvers.spec.d.ts +1 -0
  58. package/dist/collections/graphql/resolvers/resolvers.spec.js +360 -0
  59. package/dist/collections/operations/local/local.spec.d.ts +1 -0
  60. package/dist/collections/operations/local/local.spec.js +175 -0
  61. package/dist/collections/tests/collections.spec.d.ts +1 -0
  62. package/dist/collections/tests/collections.spec.js +725 -0
  63. package/dist/collections/tests/hooks.spec.d.ts +1 -0
  64. package/dist/collections/tests/hooks.spec.js +152 -0
  65. package/dist/collections/tests/pointField.spec.d.ts +1 -0
  66. package/dist/collections/tests/pointField.spec.js +219 -0
  67. package/dist/collections/tests/relationships.spec.d.ts +1 -0
  68. package/dist/collections/tests/relationships.spec.js +194 -0
  69. package/dist/collections/tests/uploads.spec.d.ts +1 -0
  70. package/dist/collections/tests/uploads.spec.js +328 -0
  71. package/dist/config/load.d.ts +3 -1
  72. package/dist/config/load.js +5 -3
  73. package/dist/config/types.d.ts +3 -0
  74. package/dist/config/types.js +1 -1
  75. package/dist/config/validate.d.ts +2 -1
  76. package/dist/config/validate.js +2 -4
  77. package/dist/email/build.d.ts +2 -1
  78. package/dist/email/build.js +7 -9
  79. package/dist/errors/errors.spec.d.ts +1 -0
  80. package/dist/errors/errors.spec.js +29 -0
  81. package/dist/express/middleware/errorHandler.spec.d.ts +1 -0
  82. package/dist/express/middleware/errorHandler.spec.js +91 -0
  83. package/dist/fields/config/sanitize.js +2 -2
  84. package/dist/fields/config/schema.js +3 -1
  85. package/dist/fields/config/types.d.ts +25 -1
  86. package/dist/fields/config/types.js +1 -1
  87. package/dist/fields/performFieldOperations.js +3 -3
  88. package/dist/fields/traverseFields.js +15 -5
  89. package/dist/fields/validationPromise.d.ts +10 -3
  90. package/dist/fields/validationPromise.js +16 -5
  91. package/dist/fields/validations.d.ts +33 -35
  92. package/dist/fields/validations.js +130 -76
  93. package/dist/fields/validations.spec.js +115 -43
  94. package/dist/globals/requestHandlers/globals.spec.d.ts +4 -0
  95. package/dist/globals/requestHandlers/globals.spec.js +161 -0
  96. package/dist/graphql/schema/buildMutationInputType.js +2 -2
  97. package/dist/graphql/schema/fieldToSchemaMap.js +7 -7
  98. package/dist/index.d.ts +2 -2
  99. package/dist/index.js +5 -5
  100. package/dist/mongoose/buildQuery.js +2 -2
  101. package/dist/mongoose/connect.d.ts +2 -1
  102. package/dist/mongoose/connect.js +2 -4
  103. package/dist/mongoose/sanitizeFormattedValue.js +12 -3
  104. package/dist/preferences/graphql/resolvers.spec.d.ts +1 -0
  105. package/dist/preferences/graphql/resolvers.spec.js +115 -0
  106. package/dist/utilities/logger.d.ts +1 -1
  107. package/dist/utilities/logger.js +10 -6
  108. package/dist/versions/drafts/appendVersionToQueryKey.js +8 -5
  109. package/dist/webpack/getBaseConfig.js +2 -1
  110. package/docs/fields/overview.mdx +39 -3
  111. package/docs/fields/relationship.mdx +45 -0
  112. package/docs/fields/upload.mdx +1 -0
  113. package/docs/getting-started/installation.mdx +14 -10
  114. package/docs/queries/overview.mdx +2 -1
  115. 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 { dispatchFields, getField, setModified, } = formContext || {};
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
- // Valid could be a string equal to an error message
18
- const valid = (field && typeof field.valid === 'boolean') ? field.valid : true;
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 validationResult = typeof validate === 'function' ? await validate(valueToSend) : true;
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
- path,
47
- dispatchFields,
48
- validate,
71
+ condition,
49
72
  disableFormData,
73
+ dispatchFields,
74
+ getData,
75
+ getSiblingData,
76
+ id,
50
77
  ignoreWhileFlattening,
51
78
  initialValue,
52
- condition,
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,
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare const OperationContext: import("react").Context<any>;
3
+ export declare type Operation = 'create' | 'update';
4
+ export declare const useOperation: () => Operation | undefined;
@@ -0,0 +1,3 @@
1
+ import { useContext, createContext } from 'react';
2
+ export const OperationContext = createContext(undefined);
3
+ export const useOperation = () => useContext(OperationContext);
@@ -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(Form, { className: `${baseClass}__form`, method: "put", action: action, initialState: initialState, disabled: !hasSavePermission },
30
- React.createElement("div", { className: `${baseClass}__main` },
31
- React.createElement(Meta, { title: "Account", description: "Account of current user", keywords: "Account, Dashboard, Payload, CMS" }),
32
- React.createElement(Eyebrow, null),
33
- !(((_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)),
34
- React.createElement("div", { className: `${baseClass}__edit` },
35
- React.createElement("header", { className: `${baseClass}__header` },
36
- React.createElement("h1", null,
37
- React.createElement(RenderTitle, { ...{ data, useAsTitle, fallback: '[Untitled]' } }))),
38
- React.createElement(Auth, { useAPIKey: auth.useAPIKey, collection: collection, email: data === null || data === void 0 ? void 0 : data.email, operation: "update" }),
39
- React.createElement(RenderFields, { operation: "update", 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 }))),
40
- React.createElement("div", { className: `${baseClass}__sidebar-wrap` },
41
- React.createElement("div", { className: `${baseClass}__sidebar` },
42
- React.createElement("div", { className: `${baseClass}__sidebar-sticky-wrap` },
43
- 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,
44
- React.createElement("li", null,
45
- React.createElement(Link, { to: `${admin}/collections/${slug}/create` }, "Create New"))))),
46
- React.createElement("div", { className: `${baseClass}__document-actions${preview ? ` ${baseClass}__document-actions--with-preview` : ''}` },
47
- React.createElement(PreviewButton, { generatePreviewURL: preview, data: data }),
48
- hasSavePermission && (React.createElement(FormSubmit, null, "Save"))),
49
- React.createElement("div", { className: `${baseClass}__sidebar-fields` },
50
- React.createElement(RenderFields, { operation: "update", 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 })),
51
- React.createElement("ul", { className: `${baseClass}__meta` },
52
- React.createElement("li", { className: `${baseClass}__api-url` },
53
- React.createElement("span", { className: `${baseClass}__label` },
54
- "API URL",
55
- ' ',
56
- React.createElement(CopyToClipboard, { value: apiURL })),
57
- React.createElement("a", { href: apiURL, target: "_blank", rel: "noopener noreferrer" }, apiURL)),
58
- React.createElement("li", null,
59
- React.createElement("div", { className: `${baseClass}__label` }, "ID"),
60
- React.createElement("div", null, data === null || data === void 0 ? void 0 : data.id)),
61
- timestamps && (React.createElement(React.Fragment, null,
62
- data.updatedAt && (React.createElement("li", null,
63
- React.createElement("div", { className: `${baseClass}__label` }, "Last Modified"),
64
- React.createElement("div", null, format(new Date(data.updatedAt), dateFormat)))),
65
- data.createdAt && (React.createElement("li", null,
66
- React.createElement("div", { className: `${baseClass}__label` }, "Created"),
67
- React.createElement("div", null, format(new Date(data.createdAt), dateFormat))))))))))))));
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(Form, { className: `${baseClass}__form`, method: "post", action: action, onSuccess: onSave, disabled: !hasSavePermission, initialState: initialState },
33
- React.createElement("div", { className: `${baseClass}__main` },
34
- React.createElement(Meta, { title: label, description: label, keywords: `${label}, Payload, CMS` }),
35
- React.createElement(Eyebrow, null),
36
- !(((_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)),
37
- React.createElement("div", { className: `${baseClass}__edit` },
38
- React.createElement("header", { className: `${baseClass}__header` },
39
- React.createElement("h1", null,
40
- "Edit",
41
- ' ',
42
- label),
43
- description && (React.createElement("div", { className: `${baseClass}__sub-header` },
44
- React.createElement(ViewDescription, { description: description })))),
45
- React.createElement(RenderFields, { operation: "update", readOnly: !hasSavePermission, permissions: permissions.fields, filter: (field) => (!field.admin.position || (field.admin.position && field.admin.position !== 'sidebar')), fieldTypes: fieldTypes, fieldSchema: fields }))),
46
- React.createElement("div", { className: `${baseClass}__sidebar-wrap` },
47
- React.createElement("div", { className: `${baseClass}__sidebar` },
48
- React.createElement("div", { className: `${baseClass}__sidebar-sticky-wrap` },
49
- 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` : ''}` },
50
- (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 })),
51
- hasSavePermission && (React.createElement(React.Fragment, null,
52
- ((_l = global.versions) === null || _l === void 0 ? void 0 : _l.drafts) && (React.createElement(React.Fragment, null,
53
- !global.versions.drafts.autosave && (React.createElement(SaveDraft, null)),
54
- React.createElement(Publish, null))),
55
- !((_m = global.versions) === null || _m === void 0 ? void 0 : _m.drafts) && (React.createElement(FormSubmit, null, "Save"))))),
56
- React.createElement("div", { className: `${baseClass}__sidebar-fields` },
57
- (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 })),
58
- ((_r = global.versions) === null || _r === void 0 ? void 0 : _r.drafts) && (React.createElement(React.Fragment, null,
59
- React.createElement(Status, null),
60
- (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 })))),
61
- React.createElement(RenderFields, { operation: "update", readOnly: !hasSavePermission, permissions: permissions.fields, filter: (field) => field.admin.position === 'sidebar', fieldTypes: fieldTypes, fieldSchema: fields })),
62
- React.createElement("ul", { className: `${baseClass}__meta` },
63
- versions && (React.createElement("li", null,
64
- React.createElement("div", { className: `${baseClass}__label` }, "Versions"),
65
- React.createElement(VersionsCount, { global: global }))),
66
- (data && !hideAPIURL) && (React.createElement("li", { className: `${baseClass}__api-url` },
67
- React.createElement("span", { className: `${baseClass}__label` },
68
- "API URL",
69
- ' ',
70
- React.createElement(CopyToClipboard, { value: apiURL })),
71
- React.createElement("a", { href: apiURL, target: "_blank", rel: "noopener noreferrer" }, apiURL))),
72
- data.updatedAt && (React.createElement("li", null,
73
- React.createElement("div", { className: `${baseClass}__label` }, "Last Modified"),
74
- React.createElement("div", null, format(new Date(data.updatedAt), dateFormat))))))))))));
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(Form, { className: `${baseClass}__form`, method: id ? 'put' : 'post', action: action, onSuccess: onSave, disabled: !hasSavePermission, initialState: initialState },
43
- React.createElement("div", { className: `${baseClass}__main` },
44
- React.createElement(Meta, { title: `${isEditing ? 'Editing' : 'Creating'} - ${collection.labels.singular}`, description: `${isEditing ? 'Editing' : 'Creating'} - ${collection.labels.singular}`, keywords: `${collection.labels.singular}, Payload, CMS` }),
45
- React.createElement(Eyebrow, null),
46
- !(((_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)),
47
- React.createElement("div", { className: `${baseClass}__edit` },
48
- React.createElement("header", { className: `${baseClass}__header` },
49
- React.createElement("h1", null,
50
- React.createElement(RenderTitle, { ...{ data, useAsTitle, fallback: '[Untitled]' } }))),
51
- 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 })),
52
- upload && (React.createElement(Upload, { data: data, collection: collection })),
53
- React.createElement(RenderFields, { operation: operation, 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 }))),
54
- React.createElement("div", { className: `${baseClass}__sidebar-wrap` },
55
- React.createElement("div", { className: `${baseClass}__sidebar` },
56
- React.createElement("div", { className: `${baseClass}__sidebar-sticky-wrap` },
57
- React.createElement("ul", { className: `${baseClass}__collection-actions` },
58
- ((_d = permissions === null || permissions === void 0 ? void 0 : permissions.create) === null || _d === void 0 ? void 0 : _d.permission) && (React.createElement(React.Fragment, null,
59
- React.createElement("li", null,
60
- React.createElement(Link, { to: `${admin}/collections/${slug}/create` }, "Create New")),
61
- !disableDuplicate && (React.createElement("li", null,
62
- React.createElement(DuplicateDocument, { slug: slug }))))),
63
- ((_e = permissions === null || permissions === void 0 ? void 0 : permissions.delete) === null || _e === void 0 ? void 0 : _e.permission) && (React.createElement("li", null,
64
- React.createElement(DeleteDocument, { collection: collection, id: id })))),
65
- 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` : ''}` },
66
- (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 })),
67
- hasSavePermission && (React.createElement(React.Fragment, null,
68
- ((_m = collection.versions) === null || _m === void 0 ? void 0 : _m.drafts) && (React.createElement(React.Fragment, null,
69
- !collection.versions.drafts.autosave && (React.createElement(SaveDraft, null)),
70
- React.createElement(Publish, null))),
71
- !((_o = collection.versions) === null || _o === void 0 ? void 0 : _o.drafts) && (React.createElement(FormSubmit, null, "Save"))))),
72
- React.createElement("div", { className: `${baseClass}__sidebar-fields` },
73
- (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 })),
74
- ((_s = collection.versions) === null || _s === void 0 ? void 0 : _s.drafts) && (React.createElement(React.Fragment, null,
75
- React.createElement(Status, null),
76
- (((_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 })))),
77
- React.createElement(RenderFields, { operation: isEditing ? 'update' : 'create', 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 })),
78
- isEditing && (React.createElement("ul", { className: `${baseClass}__meta` },
79
- !hideAPIURL && (React.createElement("li", { className: `${baseClass}__api-url` },
80
- React.createElement("span", { className: `${baseClass}__label` },
81
- "API URL",
82
- ' ',
83
- React.createElement(CopyToClipboard, { value: apiURL })),
84
- React.createElement("a", { href: apiURL, target: "_blank", rel: "noopener noreferrer" }, apiURL))),
85
- versions && (React.createElement("li", null,
86
- React.createElement("div", { className: `${baseClass}__label` }, "Versions"),
87
- React.createElement(VersionsCount, { collection: collection, id: id }))),
88
- timestamps && (React.createElement(React.Fragment, null,
89
- data.updatedAt && (React.createElement("li", null,
90
- React.createElement("div", { className: `${baseClass}__label` }, "Last Modified"),
91
- React.createElement("div", null, format(new Date(data.updatedAt), dateFormat)))),
92
- ((publishedDoc === null || publishedDoc === void 0 ? void 0 : publishedDoc.createdAt) || (data === null || data === void 0 ? void 0 : data.createdAt)) && (React.createElement("li", null,
93
- React.createElement("div", { className: `${baseClass}__label` }, "Created"),
94
- 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)))))))))))))));
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 {};