payload 0.13.6 → 0.13.10-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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,56 @@
1
+ ## [0.13.10-beta.0](https://github.com/payloadcms/payload/compare/v0.13.6...v0.13.10-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.9-beta.0](https://github.com/payloadcms/payload/compare/v0.13.6...v0.13.9-beta.0) (2021-12-21)
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
+ * builds custom routes API, Before/After Dashboard and Nav custom components ([e337c62](https://github.com/payloadcms/payload/commit/e337c62ba179821c994404a2b693871b2401861b))
29
+ * exports custom text and select inputs ([52edb5b](https://github.com/payloadcms/payload/commit/52edb5b77f45e267c43a284c5591044ac4d726e7))
30
+
31
+ ## [0.13.8-beta.0](https://github.com/payloadcms/payload/compare/v0.13.6...v0.13.8-beta.0) (2021-12-20)
32
+
33
+
34
+ ### Bug Fixes
35
+
36
+ * [#370](https://github.com/payloadcms/payload/issues/370), only performs password functions when auth enabled ([9738873](https://github.com/payloadcms/payload/commit/97388738def687f3b26eaf8de6b067f4d3758418))
37
+ * [#390](https://github.com/payloadcms/payload/issues/390), safari rich text link bug ([a16b99b](https://github.com/payloadcms/payload/commit/a16b99b0c87d55f768ed74ab35708a291fc7bbb0))
38
+ * [#393](https://github.com/payloadcms/payload/issues/393), ensures preview button gets up to date data ([2f47e39](https://github.com/payloadcms/payload/commit/2f47e39a9f765bd8ce437d4b7500a5b314a192a5))
39
+
40
+
41
+ ### Features
42
+
43
+ * exports custom text and select inputs ([52edb5b](https://github.com/payloadcms/payload/commit/52edb5b77f45e267c43a284c5591044ac4d726e7))
44
+
45
+ ## [0.13.7-beta.0](https://github.com/payloadcms/payload/compare/v0.13.6...v0.13.7-beta.0) (2021-12-14)
46
+
47
+
48
+ ### Bug Fixes
49
+
50
+ * [#370](https://github.com/payloadcms/payload/issues/370), only performs password functions when auth enabled ([9738873](https://github.com/payloadcms/payload/commit/97388738def687f3b26eaf8de6b067f4d3758418))
51
+ * [#390](https://github.com/payloadcms/payload/issues/390), safari rich text link bug ([a16b99b](https://github.com/payloadcms/payload/commit/a16b99b0c87d55f768ed74ab35708a291fc7bbb0))
52
+ * [#393](https://github.com/payloadcms/payload/issues/393), ensures preview button gets up to date data ([2f47e39](https://github.com/payloadcms/payload/commit/2f47e39a9f765bd8ce437d4b7500a5b314a192a5))
53
+
1
54
  ## [0.13.6](https://github.com/payloadcms/payload/compare/v0.13.5...v0.13.6) (2021-11-30)
2
55
 
3
56
 
@@ -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 (typeof user === 'undefined' || (user && typeof 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
+ Array.isArray(beforeNavLinks) && beforeNavLinks.map((Component, i) => React.createElement(Component, { key: i })),
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
+ Array.isArray(afterNavLinks) && afterNavLinks.map((Component, i) => React.createElement(Component, { key: i })),
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,
@@ -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
+ Array.isArray(beforeDashboard) && beforeDashboard.map((Component, i) => React.createElement(Component, { key: i })),
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
+ Array.isArray(afterDashboard) && afterDashboard.map((Component, i) => React.createElement(Component, { key: i })))));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbGxlY3Rpb25zL29wZXJhdGlvbnMvdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQXFDO0FBQ3JDLGdEQUF3QjtBQUt4QixvR0FBNEU7QUFDNUUsNkVBQXFEO0FBQ3JELHlDQUErRjtBQUMvRixvRUFBNEM7QUFDNUMsOEVBQXNEO0FBQ3RELG9GQUE0RDtBQUU1RCw4RUFBdUQ7QUFJdkQsNENBQXNFO0FBQ3RFLHNGQUE4RDtBQWM5RCxLQUFLLFVBQVUsTUFBTSxDQUFDLFlBQXVCO0lBQzNDLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFaEQsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBRXhCLHdDQUF3QztJQUN4QywrQkFBK0I7SUFDL0Isd0NBQXdDO0lBRXhDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNsRixNQUFNLFNBQVMsQ0FBQztRQUVoQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNqQixJQUFJO1lBQ0osU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sRUFDSixLQUFLLEVBQ0wsVUFBVSxFQUFFLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFBRSxnQkFBZ0IsR0FDekIsRUFDRCxFQUFFLEVBQ0YsR0FBRyxFQUNILEdBQUcsRUFBRSxFQUNILE1BQU0sR0FDUCxFQUNELGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEdBQUcsS0FBSyxHQUMvQixHQUFHLElBQUksQ0FBQztJQUVULElB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
@@ -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: joi_1.default.array().items(component),
58
+ afterDashboard: joi_1.default.array().items(component),
59
+ beforeNavLinks: joi_1.default.array().items(component),
60
+ afterNavLinks: joi_1.default.array().items(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`** | Array of components to inject into the built-in Nav, _before_ the links themselves. |
26
+ | **`AfterNavLinks`** | Array of components to inject into the built-in Nav, _after_ the links themselves. [Demo](https://github.com/payloadcms/payload/tree/master/demo/client/components/AfterNavLinks) |
27
+ | **`BeforeDashboard`** | Array of components to inject into the built-in Dashboard, _before_ the default dashboard contents. |
28
+ | **`AfterNavLinks`** | Array of components to inject 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.6",
3
+ "version": "0.13.10-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",