payload 0.13.5 → 0.13.9-beta.0

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 (32) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/components/elements.ts +3 -0
  3. package/components/forms.ts +5 -0
  4. package/components/hooks.ts +1 -0
  5. package/components/icons.ts +2 -0
  6. package/components/templates.ts +2 -0
  7. package/components/utilities.ts +1 -0
  8. package/dist/admin/components/Routes.js +8 -5
  9. package/dist/admin/components/elements/Nav/index.js +3 -1
  10. package/dist/admin/components/forms/field-types/RichText/elements/link/index.js +1 -0
  11. package/dist/admin/components/forms/field-types/RichText/elements/link/index.scss +1 -0
  12. package/dist/admin/components/forms/field-types/RichText/elements/link/utilities.d.ts +1 -1
  13. package/dist/admin/components/forms/field-types/RichText/elements/link/utilities.js +6 -2
  14. package/dist/admin/components/forms/field-types/Select/Input.d.ts +2 -2
  15. package/dist/admin/components/forms/field-types/Select/index.js +1 -1
  16. package/dist/admin/components/forms/field-types/Text/Input.d.ts +2 -2
  17. package/dist/admin/components/forms/field-types/Text/index.js +1 -1
  18. package/dist/admin/components/forms/field-types/Textarea/Input.d.ts +2 -2
  19. package/dist/admin/components/forms/field-types/Textarea/index.js +1 -1
  20. package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -2
  21. package/dist/admin/components/forms/field-types/Upload/index.js +4 -5
  22. package/dist/admin/components/templates/Default/index.js +3 -5
  23. package/dist/admin/components/templates/Default/index.scss +0 -4
  24. package/dist/admin/components/views/Dashboard/Default.js +4 -2
  25. package/dist/admin/components/views/collections/Edit/index.js +5 -0
  26. package/dist/admin/index.js +3 -1
  27. package/dist/collections/operations/update.js +2 -2
  28. package/dist/config/schema.js +13 -1
  29. package/dist/config/types.d.ts +18 -1
  30. package/dist/config/types.js +1 -1
  31. package/docs/admin/components.mdx +44 -0
  32. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,48 @@
1
+ ## [0.13.9-beta.0](https://github.com/payloadcms/payload/compare/v0.13.6...v0.13.9-beta.0) (2021-12-21)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * [#370](https://github.com/payloadcms/payload/issues/370), only performs password functions when auth enabled ([9738873](https://github.com/payloadcms/payload/commit/97388738def687f3b26eaf8de6b067f4d3758418))
7
+ * [#390](https://github.com/payloadcms/payload/issues/390), safari rich text link bug ([a16b99b](https://github.com/payloadcms/payload/commit/a16b99b0c87d55f768ed74ab35708a291fc7bbb0))
8
+ * [#393](https://github.com/payloadcms/payload/issues/393), ensures preview button gets up to date data ([2f47e39](https://github.com/payloadcms/payload/commit/2f47e39a9f765bd8ce437d4b7500a5b314a192a5))
9
+
10
+
11
+ ### Features
12
+
13
+ * builds custom routes API, Before/After Dashboard and Nav custom components ([e337c62](https://github.com/payloadcms/payload/commit/e337c62ba179821c994404a2b693871b2401861b))
14
+ * exports custom text and select inputs ([52edb5b](https://github.com/payloadcms/payload/commit/52edb5b77f45e267c43a284c5591044ac4d726e7))
15
+
16
+ ## [0.13.8-beta.0](https://github.com/payloadcms/payload/compare/v0.13.6...v0.13.8-beta.0) (2021-12-20)
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * [#370](https://github.com/payloadcms/payload/issues/370), only performs password functions when auth enabled ([9738873](https://github.com/payloadcms/payload/commit/97388738def687f3b26eaf8de6b067f4d3758418))
22
+ * [#390](https://github.com/payloadcms/payload/issues/390), safari rich text link bug ([a16b99b](https://github.com/payloadcms/payload/commit/a16b99b0c87d55f768ed74ab35708a291fc7bbb0))
23
+ * [#393](https://github.com/payloadcms/payload/issues/393), ensures preview button gets up to date data ([2f47e39](https://github.com/payloadcms/payload/commit/2f47e39a9f765bd8ce437d4b7500a5b314a192a5))
24
+
25
+
26
+ ### Features
27
+
28
+ * exports custom text and select inputs ([52edb5b](https://github.com/payloadcms/payload/commit/52edb5b77f45e267c43a284c5591044ac4d726e7))
29
+
30
+ ## [0.13.7-beta.0](https://github.com/payloadcms/payload/compare/v0.13.6...v0.13.7-beta.0) (2021-12-14)
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * [#370](https://github.com/payloadcms/payload/issues/370), only performs password functions when auth enabled ([9738873](https://github.com/payloadcms/payload/commit/97388738def687f3b26eaf8de6b067f4d3758418))
36
+ * [#390](https://github.com/payloadcms/payload/issues/390), safari rich text link bug ([a16b99b](https://github.com/payloadcms/payload/commit/a16b99b0c87d55f768ed74ab35708a291fc7bbb0))
37
+ * [#393](https://github.com/payloadcms/payload/issues/393), ensures preview button gets up to date data ([2f47e39](https://github.com/payloadcms/payload/commit/2f47e39a9f765bd8ce437d4b7500a5b314a192a5))
38
+
39
+ ## [0.13.6](https://github.com/payloadcms/payload/compare/v0.13.5...v0.13.6) (2021-11-30)
40
+
41
+
42
+ ### Bug Fixes
43
+
44
+ * requires path in select, text, textarea, and upload components ([925a33e](https://github.com/payloadcms/payload/commit/925a33e5602336f6128188aaf73001dbd23bd411))
45
+
1
46
  ## [0.13.5](https://github.com/payloadcms/payload/compare/v0.13.4...v0.13.5) (2021-11-30)
2
47
 
3
48
 
@@ -0,0 +1,3 @@
1
+ export { default as Button } from '../dist/admin/components/elements/Button';
2
+ export { default as Card } from '../dist/admin/components/elements/Card';
3
+ export { default as Eyebrow } from '../dist/admin/components/elements/Eyebrow';
@@ -12,8 +12,13 @@ export { default as useFieldType } from '../dist/admin/components/forms/useField
12
12
  export { default as Form } from '../dist/admin/components/forms/Form';
13
13
 
14
14
  export { default as Text } from '../dist/admin/components/forms/field-types/Text';
15
+ export { default as TextInput } from '../dist/admin/components/forms/field-types/Text/Input';
16
+
15
17
  export { default as Group } from '../dist/admin/components/forms/field-types/Group';
18
+
16
19
  export { default as Select } from '../dist/admin/components/forms/field-types/Select';
20
+ export { default as SelectInput } from '../dist/admin/components/forms/field-types/Select/Input';
21
+
17
22
  export { default as Checkbox } from '../dist/admin/components/forms/field-types/Checkbox';
18
23
  export { default as Submit } from '../dist/admin/components/forms/Submit';
19
24
  export { default as Label } from '../dist/admin/components/forms/Label';
@@ -0,0 +1 @@
1
+ export { useStepNav } from '../dist/admin/components/elements/StepNav';
@@ -0,0 +1,2 @@
1
+ export { default as Chevron } from '../src/admin/components/icons/Chevron';
2
+ export { default as X } from '../src/admin/components/icons/X';
@@ -0,0 +1,2 @@
1
+ export { default as DefaultTemplate } from '../dist/admin/components/templates/Default';
2
+ export { default as MinimalTemplate } from '../dist/admin/components/templates/Minimal';
@@ -0,0 +1 @@
1
+ export { default as Meta } from '../src/admin/components/utilities/Meta';
@@ -22,8 +22,9 @@ const UnauthorizedUser = lazy(() => import('./views/UnauthorizedUser'));
22
22
  const Account = lazy(() => import('./views/Account'));
23
23
  const Routes = () => {
24
24
  const [initialized, setInitialized] = useState(null);
25
- const { user, permissions, permissions: { canAccessAdmin }, refreshCookie } = useAuth();
26
- const { admin: { user: userSlug }, routes, collections, globals, } = useConfig();
25
+ const { user, permissions, refreshCookie } = useAuth();
26
+ const canAccessAdmin = permissions === null || permissions === void 0 ? void 0 : permissions.canAccessAdmin;
27
+ const { admin: { user: userSlug, components: { routes: customRoutes, } = {}, }, routes, collections, globals, } = useConfig();
27
28
  useEffect(() => {
28
29
  requests.get(`${routes.api}/${userSlug}/init`).then((res) => res.json().then((data) => {
29
30
  if (data && 'initialized' in data) {
@@ -41,7 +42,12 @@ const Routes = () => {
41
42
  React.createElement(Redirect, { to: `${match.url}/create-first-user` }))));
42
43
  }
43
44
  if (initialized === true) {
45
+ if (user === undefined || canAccessAdmin === undefined) {
46
+ return React.createElement(Loading, null);
47
+ }
44
48
  return (React.createElement(Switch, null,
49
+ Array.isArray(customRoutes) && customRoutes.map(({ path, Component, strict, exact, sensitive }) => (React.createElement(Route, { key: `${match.url}${path}`, path: `${match.url}${path}`, strict: strict, exact: exact, sensitive: sensitive },
50
+ React.createElement(Component, { user: user, canAccessAdmin: canAccessAdmin })))),
45
51
  React.createElement(Route, { path: `${match.url}/login` },
46
52
  React.createElement(Login, null)),
47
53
  React.createElement(Route, { path: `${match.url}/logout` },
@@ -109,9 +115,6 @@ const Routes = () => {
109
115
  }
110
116
  return React.createElement(Loading, null);
111
117
  }
112
- if (user === undefined) {
113
- return React.createElement(Loading, null);
114
- }
115
118
  return React.createElement(Redirect, { to: `${match.url}/login` });
116
119
  } }),
117
120
  React.createElement(Route, { path: `${match.url}*` },
@@ -15,7 +15,7 @@ const DefaultNav = () => {
15
15
  const { permissions } = useAuth();
16
16
  const [menuActive, setMenuActive] = useState(false);
17
17
  const history = useHistory();
18
- const { collections, globals, routes: { admin, }, } = useConfig();
18
+ const { collections, globals, routes: { admin, }, admin: { components: { BeforeNavLinks, AfterNavLinks, }, }, } = useConfig();
19
19
  const classes = [
20
20
  baseClass,
21
21
  menuActive && `${baseClass}--menu-active`,
@@ -32,6 +32,7 @@ const DefaultNav = () => {
32
32
  menuActive && (React.createElement(CloseMenu, null)),
33
33
  !menuActive && (React.createElement(Menu, null)))),
34
34
  React.createElement("div", { className: `${baseClass}__wrap` },
35
+ BeforeNavLinks && React.createElement(BeforeNavLinks, null),
35
36
  React.createElement("span", { className: `${baseClass}__label` }, "Collections"),
36
37
  React.createElement("nav", null, collections && collections.map((collection, i) => {
37
38
  var _a, _b;
@@ -55,6 +56,7 @@ const DefaultNav = () => {
55
56
  }
56
57
  return null;
57
58
  })))),
59
+ AfterNavLinks && React.createElement(AfterNavLinks, null),
58
60
  React.createElement("div", { className: `${baseClass}__controls` },
59
61
  React.createElement(Localizer, null),
60
62
  React.createElement(Link, { to: `${admin}/account`, className: `${baseClass}__account` },
@@ -35,6 +35,7 @@ const Link = ({ attributes, children, element }) => {
35
35
  setURL(value);
36
36
  }, onKeyDown: (e) => {
37
37
  if (e.key === 'Enter') {
38
+ e.preventDefault();
38
39
  close();
39
40
  }
40
41
  } }),
@@ -58,6 +58,7 @@
58
58
 
59
59
  .rich-text-link__url {
60
60
  @include formInput;
61
+ padding-right: base(1.75);
61
62
  min-width: base(12);
62
63
  width: 100%;
63
64
  background: rgba($color-background-gray, .1);
@@ -1,5 +1,5 @@
1
1
  import { Editor } from 'slate';
2
2
  export declare const isLinkActive: (editor: Editor) => boolean;
3
3
  export declare const unwrapLink: (editor: Editor) => void;
4
- export declare const wrapLink: (editor: Editor, url?: string, newTab?: boolean) => void;
4
+ export declare const wrapLink: (editor: any, url?: string, newTab?: boolean) => void;
5
5
  export declare const withLinks: (incomingEditor: Editor) => Editor;
@@ -10,8 +10,12 @@ export const wrapLink = (editor, url, newTab) => {
10
10
  if (isLinkActive(editor)) {
11
11
  unwrapLink(editor);
12
12
  }
13
- const { selection } = editor;
14
- const isCollapsed = selection && Range.isCollapsed(selection);
13
+ const { selection, blurSelection } = editor;
14
+ if (blurSelection) {
15
+ Transforms.select(editor, blurSelection);
16
+ }
17
+ const selectionToUse = selection || blurSelection;
18
+ const isCollapsed = selectionToUse && Range.isCollapsed(selectionToUse);
15
19
  const link = {
16
20
  type: 'link',
17
21
  url,
@@ -4,10 +4,10 @@ import { Description } from '../../FieldDescription/types';
4
4
  import { Value as ReactSelectValue } from '../../../elements/ReactSelect/types';
5
5
  import './index.scss';
6
6
  export declare type SelectInputProps = Omit<SelectField, 'type' | 'value' | 'options'> & {
7
- showError: boolean;
7
+ showError?: boolean;
8
8
  errorMessage?: string;
9
9
  readOnly?: boolean;
10
- path?: string;
10
+ path: string;
11
11
  required?: boolean;
12
12
  value?: string | string[];
13
13
  description?: Description;
@@ -46,6 +46,6 @@ const Select = (props) => {
46
46
  hasMany,
47
47
  setValue,
48
48
  ]);
49
- return (React.createElement(SelectInput, { onChange: onChange, value: value, name: name, options: options, label: label, showError: showError, errorMessage: errorMessage, description: description, style: style, width: width, hasMany: hasMany }));
49
+ return (React.createElement(SelectInput, { path: path, onChange: onChange, value: value, name: name, options: options, label: label, showError: showError, errorMessage: errorMessage, description: description, style: style, width: width, hasMany: hasMany }));
50
50
  };
51
51
  export default withCondition(Select);
@@ -3,10 +3,10 @@ import { TextField } from '../../../../../fields/config/types';
3
3
  import { Description } from '../../FieldDescription/types';
4
4
  import './index.scss';
5
5
  export declare type TextInputProps = Omit<TextField, 'type'> & {
6
- showError: boolean;
6
+ showError?: boolean;
7
7
  errorMessage?: string;
8
8
  readOnly?: boolean;
9
- path?: string;
9
+ path: string;
10
10
  required?: boolean;
11
11
  value?: string;
12
12
  description?: Description;
@@ -13,7 +13,7 @@ const Text = (props) => {
13
13
  condition,
14
14
  });
15
15
  const { value, showError, setValue, errorMessage, } = field;
16
- return (React.createElement(TextInput, { name: name, onChange: (e) => {
16
+ return (React.createElement(TextInput, { path: path, name: name, onChange: (e) => {
17
17
  setValue(e.target.value);
18
18
  }, showError: showError, errorMessage: errorMessage, required: required, label: label, value: value, placeholder: placeholder, readOnly: readOnly, style: style, width: width, description: description }));
19
19
  };
@@ -3,10 +3,10 @@ import { TextareaField } from '../../../../../fields/config/types';
3
3
  import { Description } from '../../FieldDescription/types';
4
4
  import './index.scss';
5
5
  export declare type TextAreaInputProps = Omit<TextareaField, 'type'> & {
6
- showError: boolean;
6
+ showError?: boolean;
7
7
  errorMessage?: string;
8
8
  readOnly?: boolean;
9
- path?: string;
9
+ path: string;
10
10
  required?: boolean;
11
11
  value?: string;
12
12
  description?: Description;
@@ -17,7 +17,7 @@ const Textarea = (props) => {
17
17
  enableDebouncedValue: true,
18
18
  condition,
19
19
  });
20
- return (React.createElement(TextareaInput, { name: name, onChange: (e) => {
20
+ return (React.createElement(TextareaInput, { path: path, name: name, onChange: (e) => {
21
21
  setValue(e.target.value);
22
22
  }, showError: showError, errorMessage: errorMessage, required: required, label: label, value: value, placeholder: placeholder, readOnly: readOnly, style: style, width: width, description: description, rows: rows }));
23
23
  };
@@ -5,10 +5,10 @@ import { FieldTypes } from '..';
5
5
  import { SanitizedCollectionConfig } from '../../../../../collections/config/types';
6
6
  import './index.scss';
7
7
  export declare type UploadInputProps = Omit<UploadField, 'type'> & {
8
- showError: boolean;
8
+ showError?: boolean;
9
9
  errorMessage?: string;
10
10
  readOnly?: boolean;
11
- path?: string;
11
+ path: string;
12
12
  required?: boolean;
13
13
  value?: string;
14
14
  description?: Description;
@@ -7,19 +7,18 @@ import UploadInput from './Input';
7
7
  import './index.scss';
8
8
  const Upload = (props) => {
9
9
  const { collections, serverURL, routes: { api, }, } = useConfig();
10
- const { path: pathFromProps, name, required, admin: { readOnly, style, width, description, condition, } = {}, label, validate = upload, relationTo, fieldTypes, } = props;
10
+ const { path, name, required, admin: { readOnly, style, width, description, condition, } = {}, label, validate = upload, relationTo, fieldTypes, } = props;
11
11
  const collection = collections.find((coll) => coll.slug === relationTo);
12
- const path = pathFromProps || name;
13
12
  const memoizedValidate = useCallback((value) => {
14
13
  const validationResult = validate(value, { required });
15
14
  return validationResult;
16
15
  }, [validate, required]);
17
- const fieldType = useField({
16
+ const field = useField({
18
17
  path,
19
18
  validate: memoizedValidate,
20
19
  condition,
21
20
  });
22
- const { value, showError, setValue, errorMessage, } = fieldType;
21
+ const { value, showError, setValue, errorMessage, } = field;
23
22
  const onChange = useCallback((incomingValue) => {
24
23
  const incomingID = (incomingValue === null || incomingValue === void 0 ? void 0 : incomingValue.id) || incomingValue;
25
24
  setValue(incomingID);
@@ -27,7 +26,7 @@ const Upload = (props) => {
27
26
  setValue,
28
27
  ]);
29
28
  if (collection.upload) {
30
- return (React.createElement(UploadInput, { value: value, onChange: onChange, description: description, label: label, required: required, showError: showError, serverURL: serverURL, api: api, errorMessage: errorMessage, readOnly: readOnly, style: style, width: width, collection: collection, fieldTypes: fieldTypes, name: name, relationTo: relationTo }));
29
+ return (React.createElement(UploadInput, { path: path, value: value, onChange: onChange, description: description, label: label, required: required, showError: showError, serverURL: serverURL, api: api, errorMessage: errorMessage, readOnly: readOnly, style: style, width: width, collection: collection, fieldTypes: fieldTypes, name: name, relationTo: relationTo }));
31
30
  }
32
31
  return null;
33
32
  };
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { useConfig } from '@payloadcms/config-provider';
3
3
  import DefaultNav from '../../elements/Nav';
4
- import { StepNavProvider } from '../../elements/StepNav';
5
4
  import RenderCustomComponent from '../../utilities/RenderCustomComponent';
6
5
  import Meta from '../../utilities/Meta';
7
6
  import './index.scss';
@@ -15,9 +14,8 @@ const Default = ({ children, className }) => {
15
14
  className,
16
15
  ].filter(Boolean).join(' ');
17
16
  return (React.createElement("div", { className: classes },
18
- React.createElement(StepNavProvider, null,
19
- React.createElement(Meta, { title: "Dashboard", description: "Dashboard for Payload CMS", keywords: "Dashboard, Payload, CMS" }),
20
- React.createElement(RenderCustomComponent, { DefaultComponent: DefaultNav, CustomComponent: CustomNav }),
21
- React.createElement("div", { className: `${baseClass}__wrap` }, children))));
17
+ React.createElement(Meta, { title: "Dashboard", description: "Dashboard for Payload CMS", keywords: "Dashboard, Payload, CMS" }),
18
+ React.createElement(RenderCustomComponent, { DefaultComponent: DefaultNav, CustomComponent: CustomNav }),
19
+ React.createElement("div", { className: `${baseClass}__wrap` }, children)));
22
20
  };
23
21
  export default Default;
@@ -7,10 +7,6 @@
7
7
  &__wrap {
8
8
  padding-left: base(2);
9
9
  min-width: 0;
10
- }
11
-
12
- &__wrap {
13
- display: flex;
14
10
  width: 100%;
15
11
  flex-grow: 1;
16
12
  }
@@ -9,10 +9,11 @@ const baseClass = 'dashboard';
9
9
  const Dashboard = (props) => {
10
10
  const { collections, globals, permissions, } = props;
11
11
  const { push } = useHistory();
12
- const { routes: { admin, }, } = useConfig();
12
+ const { routes: { admin, }, admin: { components: { AfterDashboard, BeforeDashboard, }, }, } = useConfig();
13
13
  return (React.createElement("div", { className: baseClass },
14
14
  React.createElement(Eyebrow, null),
15
15
  React.createElement("div", { className: `${baseClass}__wrap` },
16
+ BeforeDashboard && (React.createElement(BeforeDashboard, null)),
16
17
  React.createElement("h3", { className: `${baseClass}__label` }, "Collections"),
17
18
  React.createElement("ul", { className: `${baseClass}__card-list` }, collections.map((collection) => {
18
19
  var _a, _b, _c;
@@ -23,6 +24,7 @@ const Dashboard = (props) => {
23
24
  (globals.length > 0) && (React.createElement(React.Fragment, null,
24
25
  React.createElement("h3", { className: `${baseClass}__label` }, "Globals"),
25
26
  React.createElement("ul", { className: `${baseClass}__card-list` }, globals.map((global) => (React.createElement("li", { key: global.slug },
26
- React.createElement(Card, { title: global.label, onClick: () => push({ pathname: `${admin}/globals/${global.slug}` }) }))))))))));
27
+ React.createElement(Card, { title: global.label, onClick: () => push({ pathname: `${admin}/globals/${global.slug}` }) }))))))),
28
+ AfterDashboard && (React.createElement(AfterDashboard, null)))));
27
29
  };
28
30
  export default Dashboard;
@@ -31,6 +31,11 @@ const EditView = (props) => {
31
31
  else {
32
32
  const state = await buildStateFromSchema(fields, json.doc);
33
33
  setInitialState(state);
34
+ history.push({
35
+ state: {
36
+ data: json.doc,
37
+ },
38
+ });
34
39
  }
35
40
  };
36
41
  const [{ data, isLoading, isError }] = usePayloadAPI((isEditing ? `${serverURL}${api}/${slug}/${id}` : null), { initialParams: { 'fallback-locale': 'null', depth: 0 } });
@@ -13,6 +13,7 @@ import { PreferencesProvider } from './components/utilities/Preferences';
13
13
  import { SearchParamsProvider } from './components/utilities/SearchParams';
14
14
  import { LocaleProvider } from './components/utilities/Locale';
15
15
  import Routes from './components/Routes';
16
+ import { StepNavProvider } from './components/elements/StepNav';
16
17
  import './scss/app.scss';
17
18
  const Index = () => (React.createElement(React.Fragment, null,
18
19
  React.createElement(ConfigProvider, { config: config },
@@ -29,7 +30,8 @@ const Index = () => (React.createElement(React.Fragment, null,
29
30
  React.createElement(PreferencesProvider, null,
30
31
  React.createElement(SearchParamsProvider, null,
31
32
  React.createElement(LocaleProvider, null,
32
- React.createElement(Routes, null))),
33
+ React.createElement(StepNavProvider, null,
34
+ React.createElement(Routes, null)))),
33
35
  React.createElement(ModalContainer, null)))))))),
34
36
  React.createElement(ToastContainer, { position: "bottom-center", transition: Slide })));
35
37
  render(React.createElement(Index, null), document.getElementById('app'));
@@ -183,7 +183,7 @@ async function update(incomingArgs) {
183
183
  // Handle potential password update
184
184
  // /////////////////////////////////////
185
185
  const { password } = data;
186
- if (password) {
186
+ if (password && collectionConfig.auth) {
187
187
  await doc.setPassword(password);
188
188
  await doc.save();
189
189
  delete data.password;
@@ -261,4 +261,4 @@ async function update(incomingArgs) {
261
261
  return result;
262
262
  }
263
263
  exports.default = update;
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbGxlY3Rpb25zL29wZXJhdGlvbnMvdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQXFDO0FBQ3JDLGdEQUF3QjtBQUt4QixvR0FBNEU7QUFDNUUsNkVBQXFEO0FBQ3JELHlDQUErRjtBQUMvRixvRUFBNEM7QUFDNUMsOEVBQXNEO0FBQ3RELG9GQUE0RDtBQUU1RCw4RUFBdUQ7QUFJdkQsNENBQXNFO0FBQ3RFLHNGQUE4RDtBQWM5RCxLQUFLLFVBQVUsTUFBTSxDQUFDLFlBQXVCO0lBQzNDLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFaEQsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBRXhCLHdDQUF3QztJQUN4QywrQkFBK0I7SUFDL0Isd0NBQXdDO0lBRXhDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNsRixNQUFNLFNBQVMsQ0FBQztRQUVoQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNqQixJQUFJO1lBQ0osU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sRUFDSixLQUFLLEVBQ0wsVUFBVSxFQUFFLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFBRSxnQkFBZ0IsR0FDekIsRUFDRCxFQUFFLEVBQ0YsR0FBRyxFQUNILEdBQUcsRUFBRSxFQUNILE1BQU0sR0FDUCxFQUNELGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEdBQUcsS0FBSyxHQUMvQixHQUFHLElBQUksQ0FBQztJQUVULElB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
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbGxlY3Rpb25zL29wZXJhdGlvbnMvdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQXFDO0FBQ3JDLGdEQUF3QjtBQUt4QixvR0FBNEU7QUFDNUUsNkVBQXFEO0FBQ3JELHlDQUErRjtBQUMvRixvRUFBNEM7QUFDNUMsOEVBQXNEO0FBQ3RELG9GQUE0RDtBQUU1RCw4RUFBdUQ7QUFJdkQsNENBQXNFO0FBQ3RFLHNGQUE4RDtBQWM5RCxLQUFLLFVBQVUsTUFBTSxDQUFDLFlBQXVCO0lBQzNDLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFaEQsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBRXhCLHdDQUF3QztJQUN4QywrQkFBK0I7SUFDL0Isd0NBQXdDO0lBRXhDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNsRixNQUFNLFNBQVMsQ0FBQztRQUVoQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNqQixJQUFJO1lBQ0osU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sRUFDSixLQUFLLEVBQ0wsVUFBVSxFQUFFLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFBRSxnQkFBZ0IsR0FDekIsRUFDRCxFQUFFLEVBQ0YsR0FBRyxFQUNILEdBQUcsRUFBRSxFQUNILE1BQU0sR0FDUCxFQUNELGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEdBQUcsS0FBSyxHQUMvQixHQUFHLElBQUksQ0FBQztJQUVULElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDUCxNQUFNLElBQUksaUJBQVEsQ0FBQyxtQ0FBbUMsRUFBRSxxQkFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2pGO0lBRUQsd0NBQXdDO0lBQ3hDLFNBQVM7SUFDVCx3Q0FBd0M7SUFFeEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBQSx1QkFBYSxFQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hILE1BQU0sY0FBYyxHQUFHLElBQUEsNEJBQW9CLEVBQUMsYUFBYSxDQUFDLENBQUM7SUFFM0Qsd0NBQXdDO0lBQ3hDLG9CQUFvQjtJQUNwQix3Q0FBd0M7SUFFeEMsTUFBTSxZQUFZLEdBQXFCO1FBQ3JDLEtBQUssRUFBRTtZQUNMLEdBQUcsRUFBRTtnQkFDSDtvQkFDRSxFQUFFLEVBQUU7d0JBQ0YsTUFBTSxFQUFFLEVBQUU7cUJBQ1g7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLElBQUksSUFBQSw0QkFBb0IsRUFBQyxhQUFhLENBQUMsRUFBRTtRQUN0QyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDekQ7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNELE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQWlCLENBQUM7SUFFdkQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWM7UUFBRSxNQUFNLElBQUksaUJBQVEsRUFBRSxDQUFDO0lBQ2xELElBQUksQ0FBQyxHQUFHLElBQUksY0FBYztRQUFFLE1BQU0sSUFBSSxrQkFBUyxFQUFFLENBQUM7SUFFbEQsSUFBSSxjQUFjLEdBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sV0FBVyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUU7UUFDakUsRUFBRTtRQUNGLEtBQUssRUFBRSxDQUFDO1FBQ1IsR0FBRztRQUNILElBQUksRUFBRSxjQUFjO1FBQ3BCLElBQUksRUFBRSxXQUFXO1FBQ2pCLFNBQVMsRUFBRSxRQUFRO1FBQ25CLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFFSCxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRXBCLHdDQUF3QztJQUN4QyxvQ0FBb0M7SUFDcEMsd0NBQXdDO0lBRXhDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1FBQzNCLE1BQU0sUUFBUSxHQUFzQixFQUFFLENBQUM7UUFFdkMsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFFL0UsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBRTNCLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsVUFBVSxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBaUIsQ0FBQztRQUV6RixJQUFJLElBQUksRUFBRTtZQUNSLE1BQU0sVUFBVSxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBQSx5QkFBZSxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBRTdHLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixFQUFFO29CQUN4QixNQUFNLElBQUEsMEJBQWdCLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2lCQUNsRTtnQkFFRCxRQUFRLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDL0IsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUM5QixRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBRWxDLElBQUksSUFBQSxpQkFBTyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDMUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFBLHNCQUFZLEVBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzVDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztvQkFDbEMsUUFBUSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO29CQUVwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxlQUFlLEVBQUU7d0JBQ2xFLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7d0JBQzVCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFBLHNCQUFhLEVBQUM7NEJBQ25DLEdBQUc7NEJBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJOzRCQUNmLFVBQVU7NEJBQ1YsVUFBVTs0QkFDVixNQUFNLEVBQUUsZ0JBQWdCOzRCQUN4QixhQUFhLEVBQUUsVUFBVTs0QkFDekIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO3lCQUM1QixDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7YUFDRjtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSx3QkFBZSxFQUFFLENBQUM7YUFDN0I7WUFFRCxJQUFJLEdBQUc7Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLEdBQUcsUUFBUTthQUNaLENBQUM7U0FDSDthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDN0IsSUFBSSxHQUFHO2dCQUNMLEdBQUcsSUFBSTtnQkFDUCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUM7U0FDSDtLQUNGO0lBRUQsd0NBQXdDO0lBQ3hDLDBCQUEwQjtJQUMxQix3Q0FBd0M7SUFFeEMsSUFBSSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUU7UUFDcEQsSUFBSTtRQUNKLEdBQUc7UUFDSCxFQUFFO1FBQ0YsV0FBVztRQUNYLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsU0FBUyxFQUFFLFFBQVE7UUFDbkIsY0FBYztLQUNmLENBQUMsQ0FBQztJQUVILDJDQUEyQztJQUMzQyxpQ0FBaUM7SUFDakMsMkNBQTJDO0lBRTNDLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUMzRSxNQUFNLFNBQVMsQ0FBQztRQUVoQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNqQixJQUFJO1lBQ0osR0FBRztZQUNILFNBQVMsRUFBRSxRQUFRO1lBQ25CLFdBQVc7U0FDWixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFdEIsd0NBQXdDO0lBQ3hDLDRCQUE0QjtJQUM1Qix3Q0FBd0M7SUFFeEMsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3pFLE1BQU0sU0FBUyxDQUFDO1FBRWhCLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ2pCLElBQUk7WUFDSixHQUFHO1lBQ0gsV0FBVztZQUNYLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNkLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUV0Qix3Q0FBd0M7SUFDeEMsd0JBQXdCO0lBQ3hCLHdDQUF3QztJQUV4QyxJQUFJLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFO1FBQzFELElBQUk7UUFDSixHQUFHO1FBQ0gsRUFBRTtRQUNGLFdBQVc7UUFDWCxJQUFJLEVBQUUsY0FBYztRQUNwQixTQUFTLEVBQUUsUUFBUTtRQUNuQixjQUFjO1FBQ2QsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixjQUFjO0tBQ2YsQ0FBQyxDQUFDO0lBRUgsd0NBQXdDO0lBQ3hDLG1DQUFtQztJQUNuQyx3Q0FBd0M7SUFFeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztJQUUxQixJQUFJLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7UUFDckMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQWtCLENBQUMsQ0FBQztRQUMxQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO0tBQ3hCO0lBRUQsd0NBQXdDO0lBQ3hDLFNBQVM7SUFDVCx3Q0FBd0M7SUFFeEMsSUFBSTtRQUNGLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsQ0FDcEMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQ1gsTUFBTSxFQUNOLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUNkLENBQUM7S0FDSDtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsdUNBQXVDO1FBQ3ZDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLO1lBQ3hCLENBQUMsQ0FBQyxJQUFJLHdCQUFlLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25HLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDWDtJQUVELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFM0MsdUJBQXVCO0lBQ3ZCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUN2QixNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixNQUFNLEdBQUcsSUFBQSxnQ0FBc0IsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUV4Qyx3Q0FBd0M7SUFDeEMscUJBQXFCO0lBQ3JCLHdDQUF3QztJQUV4QyxNQUFNLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN0RCxFQUFFO1FBQ0YsS0FBSztRQUNMLEdBQUc7UUFDSCxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxXQUFXO1FBQ2pCLFNBQVMsRUFBRSxRQUFRO1FBQ25CLGNBQWM7UUFDZCxjQUFjLEVBQUUsSUFBSTtRQUNwQixnQkFBZ0I7S0FDakIsQ0FBQyxDQUFDO0lBRUgsd0NBQXdDO0lBQ3hDLHlCQUF5QjtJQUN6Qix3Q0FBd0M7SUFFeEMsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3RFLE1BQU0sU0FBUyxDQUFDO1FBRWhCLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQztZQUNsQixHQUFHO1lBQ0gsR0FBRyxFQUFFLE1BQU07U0FDWixDQUFDLElBQUksTUFBTSxDQUFDO0lBQ2YsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXRCLHdDQUF3QztJQUN4Qyx1QkFBdUI7SUFDdkIsd0NBQXdDO0lBRXhDLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFO1FBQ3RELElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLGFBQWE7UUFDbkIsU0FBUyxFQUFFLFFBQVE7UUFDbkIsR0FBRztRQUNILEVBQUU7UUFDRixLQUFLO1FBQ0wsY0FBYztRQUNkLGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFFSCx3Q0FBd0M7SUFDeEMsMkJBQTJCO0lBQzNCLHdDQUF3QztJQUV4QyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDeEUsTUFBTSxTQUFTLENBQUM7UUFFaEIsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDO1lBQ2xCLEdBQUcsRUFBRSxNQUFNO1lBQ1gsR0FBRztZQUNILFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDZixDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFdEIsd0NBQXdDO0lBQ3hDLGlCQUFpQjtJQUNqQix3Q0FBd0M7SUFFeEMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGtCQUFlLE1BQU0sQ0FBQyJ9
@@ -46,6 +46,18 @@ exports.default = joi_1.default.object({
46
46
  dateFormat: joi_1.default.string(),
47
47
  components: joi_1.default.object()
48
48
  .keys({
49
+ routes: joi_1.default.array()
50
+ .items(joi_1.default.object().keys({
51
+ Component: component.required(),
52
+ path: joi_1.default.string().required(),
53
+ exact: joi_1.default.bool(),
54
+ strict: joi_1.default.bool(),
55
+ sensitive: joi_1.default.bool(),
56
+ })),
57
+ BeforeDashboard: component,
58
+ AfterDashboard: component,
59
+ BeforeNavLinks: component,
60
+ AfterNavLinks: component,
49
61
  Nav: component,
50
62
  views: joi_1.default.object({
51
63
  Dashboard: component,
@@ -108,4 +120,4 @@ exports.default = joi_1.default.object({
108
120
  plugins: joi_1.default.array().items(joi_1.default.func()),
109
121
  debug: joi_1.default.boolean(),
110
122
  });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBc0I7QUFFdEIsTUFBTSxTQUFTLEdBQUcsYUFBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FDdEMsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUN0QixhQUFHLENBQUMsSUFBSSxFQUFFLENBQ1gsQ0FBQztBQUVGLGtCQUFlLGFBQUcsQ0FBQyxNQUFNLENBQUM7SUFDeEIsU0FBUyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7U0FDcEIsR0FBRyxFQUFFO1NBQ0wsUUFBUSxFQUFFO1NBQ1YsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdkIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLHVFQUF1RSxFQUFFLENBQUMsQ0FBQztTQUM1RztRQUVELElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxvR0FBb0csRUFBRSxDQUFDLENBQUM7U0FDekk7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUNKLFlBQVksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0lBQzFCLE1BQU0sRUFBRSxhQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2pCLEtBQUssRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO1FBQ25CLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO1FBQ2pCLE9BQU8s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
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBc0I7QUFFdEIsTUFBTSxTQUFTLEdBQUcsYUFBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FDdEMsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUN0QixhQUFHLENBQUMsSUFBSSxFQUFFLENBQ1gsQ0FBQztBQUVGLGtCQUFlLGFBQUcsQ0FBQyxNQUFNLENBQUM7SUFDeEIsU0FBUyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7U0FDcEIsR0FBRyxFQUFFO1NBQ0wsUUFBUSxFQUFFO1NBQ1YsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdkIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLHVFQUF1RSxFQUFFLENBQUMsQ0FBQztTQUM1RztRQUVELElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxvR0FBb0csRUFBRSxDQUFDLENBQUM7U0FDekk7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUNKLFlBQVksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0lBQzFCLE1BQU0sRUFBRSxhQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2pCLEtBQUssRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO1FBQ25CLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO1FBQ2pCLE9BQU8s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
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Express } from 'express';
3
2
  import { DeepRequired } from 'ts-essentials';
4
3
  import { Transporter } from 'nodemailer';
@@ -7,11 +6,13 @@ import { Configuration } from 'webpack';
7
6
  import SMTPConnection from 'nodemailer/lib/smtp-connection';
8
7
  import GraphQL from 'graphql';
9
8
  import { ConnectionOptions } from 'mongoose';
9
+ import React from 'react';
10
10
  import { Payload } from '..';
11
11
  import { AfterErrorHook, CollectionConfig, SanitizedCollectionConfig } from '../collections/config/types';
12
12
  import { GlobalConfig, SanitizedGlobalConfig } from '../globals/config/types';
13
13
  import { PayloadRequest } from '../express/types';
14
14
  import { Where } from '../types';
15
+ import { User } from '../auth/types';
15
16
  declare type Email = {
16
17
  fromName: string;
17
18
  fromAddress: string;
@@ -56,6 +57,17 @@ export declare type AccessResult = boolean | Where;
56
57
  * Access function
57
58
  */
58
59
  export declare type Access = (args?: any) => AccessResult;
60
+ export declare type AdminView = React.ComponentType<{
61
+ user: User;
62
+ canAccessAdmin: boolean;
63
+ }>;
64
+ export declare type AdminRoute = {
65
+ Component: AdminView;
66
+ path: string;
67
+ exact?: boolean;
68
+ strict?: boolean;
69
+ sensitive?: boolean;
70
+ };
59
71
  export declare type Config = {
60
72
  admin?: {
61
73
  user?: string;
@@ -70,6 +82,11 @@ export declare type Config = {
70
82
  scss?: string;
71
83
  dateFormat?: string;
72
84
  components?: {
85
+ routes?: AdminRoute[];
86
+ BeforeDashboard?: React.ComponentType;
87
+ AfterDashboard?: React.ComponentType;
88
+ BeforeNavLinks?: React.ComponentType;
89
+ AfterNavLinks?: React.ComponentType;
73
90
  Nav?: React.ComponentType;
74
91
  graphics?: {
75
92
  Icon?: React.ComponentType;
@@ -17,4 +17,4 @@ function hasTransportOptions(emailConfig) {
17
17
  return emailConfig.transportOptions !== undefined;
18
18
  }
19
19
  exports.hasTransportOptions = hasTransportOptions;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXlDQTs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQUMsV0FBeUI7SUFDcEQsT0FBUSxXQUE4QixDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7QUFDakUsQ0FBQztBQUZELG9DQUVDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsV0FBeUI7SUFDM0QsT0FBUSxXQUFxQyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FBQztBQUMvRSxDQUFDO0FBRkQsa0RBRUMifQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJDQTs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQUMsV0FBeUI7SUFDcEQsT0FBUSxXQUE4QixDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7QUFDakUsQ0FBQztBQUZELG9DQUVDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsV0FBeUI7SUFDM0QsT0FBUSxXQUFxQyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FBQztBQUMvRSxDQUFDO0FBRkQsa0RBRUMifQ==
@@ -22,10 +22,15 @@ You can override a set of admin panel-wide components by providing a component t
22
22
  | Path | Description |
23
23
  | --------------------- | -------------|
24
24
  | **`Nav`** | Contains the sidebar and mobile Nav in its entirety. |
25
+ | **`BeforeNavLinks`** | Injects into the built-in Nav, _before_ the links themselves. |
26
+ | **`AfterNavLinks`** | Injects into the built-in Nav, _after_ the links themselves. [Demo](https://github.com/payloadcms/payload/tree/master/demo/client/components/AfterNavLinks) |
27
+ | **`BeforeDashboard`** | Injects into the built-in Dashboard, _before_ the default dashboard contents. |
28
+ | **`AfterNavLinks`** | Injects into the built-in Nav, _after_ the default dashboard contents. [Demo](https://github.com/payloadcms/payload/tree/master/demo/client/components/AfterDashboard) |
25
29
  | **`views.Account`** | The Account view is used to show the currently logged in user's Account page. |
26
30
  | **`views.Dashboard`** | The main landing page of the Admin panel. |
27
31
  | **`graphics.Icon`** | Used as a graphic within the `Nav` component. Often represents a condensed version of a full logo. |
28
32
  | **`graphics.Logo`** | The full logo to be used in contexts like the `Login` view. |
33
+ | **`routes`** | Define your own routes to add to the Payload Admin UI. [More](#custom-routes) |
29
34
 
30
35
  #### Full example:
31
36
 
@@ -107,6 +112,45 @@ const CustomTextField = ({ path }) => {
107
112
  }
108
113
  ```
109
114
 
115
+ ## Custom routes
116
+
117
+ You can easily add your own custom routes to the Payload Admin panel using the `admin.components.routes` property. Payload currently uses the extremely powerful React Router v5.x and custom routes support all the properties of the React Router `<Route />` component.
118
+
119
+ **Custom routes support the following properties:**
120
+
121
+ | Property | Description |
122
+ | ----------------- | -------------|
123
+ | **`Component`** * | Pass in the component that should be rendered when a user navigates to this route. |
124
+ | **`path`** * | React Router `path`. [See the React Router docs](https://v5.reactrouter.com/web/api/Route/path-string-string) for more info. |
125
+ | **`exact`** | React Router `exact` property. [More](https://v5.reactrouter.com/web/api/Route/exact-bool) |
126
+ | **`strict`** | React Router `strict` property. [More](https://v5.reactrouter.com/web/api/Route/strict-bool) |
127
+ | **`sensitive`** | React Router `sensitive` property. [More](https://v5.reactrouter.com/web/api/Route/sensitive-bool) |
128
+
129
+ *\* An asterisk denotes that a property is required.*
130
+
131
+ #### Custom route components
132
+
133
+ Your custom route components will be given all the props that a React Router `<Route />` typically would receive, as well as two props from Payload:
134
+
135
+ | Prop | Description |
136
+ | ---------------------- | -------------|
137
+ | **`user`** | The currently logged in user. Will be `null` if no user is logged in. |
138
+ | **`canAccessAdmin`** * | If the currently logged in user is allowed to access the admin panel or not. |
139
+
140
+ <Banner type="warning">
141
+ <strong>Note:</strong><br/>
142
+ It's up to you to secure your custom routes. If your route requires a user to be logged in or to have certain access rights, you should handle that within your route component yourself.
143
+ </Banner>
144
+
145
+ #### Example
146
+
147
+ You can find examples of custom route views in the [Payload source code `/demo/client/components/views` folder](https://github.com/payloadcms/payload/tree/master/demo/client/components/views). There, you'll find two custom routes:
148
+
149
+ 1. A custom view that uses the `DefaultTemplate`, which is the built-in Payload template that displays the sidebar and "eyebrow nav"
150
+ 1. A custom view that uses the `MinimalTemplate` - which is just a centered template used for things like logging in or out
151
+
152
+ To see how to pass in your custom views to create custom routes of your own, take a look at the `admin.components.routes` property of the [Payload demo config](https://github.com/payloadcms/payload/blob/master/demo/payload.config.ts).
153
+
110
154
  ### Styling Custom Components
111
155
 
112
156
  Payload exports its SCSS variables and mixins for reuse in your own custom components. This is helpful in cases where you might want to style a custom input similarly to Payload's built-ini styling so it blends more thoroughly into the existing admin UI.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "0.13.5",
3
+ "version": "0.13.9-beta.0",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "SEE LICENSE IN license.md",
6
6
  "author": {
@@ -85,7 +85,7 @@
85
85
  "@faceless-ui/modal": "^1.1.4",
86
86
  "@faceless-ui/scroll-info": "^1.2.3",
87
87
  "@faceless-ui/window-info": "^1.2.4",
88
- "@payloadcms/config-provider": "^0.1.0",
88
+ "@payloadcms/config-provider": "0.1.1",
89
89
  "@types/mime": "^2.0.3",
90
90
  "@types/passport-local-mongoose": "^6.1.0",
91
91
  "babel-jest": "^26.3.0",