payload 0.10.3-beta.0 → 0.10.6

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 (59) hide show
  1. package/CHANGELOG.md +15 -30
  2. package/components/index.js +1 -1
  3. package/components/styles.css +1 -1
  4. package/dist/admin/components/elements/Button/index.js +2 -0
  5. package/dist/admin/components/elements/Button/types.d.ts +1 -1
  6. package/dist/admin/components/elements/Popup/index.js +2 -1
  7. package/dist/admin/components/elements/Popup/types.d.ts +1 -0
  8. package/dist/admin/components/elements/ReactSelect/index.js +2 -1
  9. package/dist/admin/components/elements/ReactSelect/types.d.ts +1 -0
  10. package/dist/admin/components/elements/UploadCard/index.js +2 -1
  11. package/dist/admin/components/elements/UploadCard/types.d.ts +1 -0
  12. package/dist/admin/components/forms/field-types/RichText/RichText.d.ts +18 -0
  13. package/dist/admin/components/forms/field-types/RichText/RichText.js +27 -22
  14. package/dist/admin/components/forms/field-types/RichText/elements/index.d.ts +10 -2
  15. package/dist/admin/components/forms/field-types/RichText/elements/index.js +2 -0
  16. package/dist/admin/components/forms/field-types/RichText/elements/isActive.js +2 -2
  17. package/dist/admin/components/forms/field-types/RichText/elements/link/index.d.ts +2 -1
  18. package/dist/admin/components/forms/field-types/RichText/elements/link/utilities.js +3 -3
  19. package/dist/admin/components/forms/field-types/RichText/elements/relationship/Button/index.js +1 -4
  20. package/dist/admin/components/forms/field-types/RichText/elements/relationship/Element/index.d.ts +1 -5
  21. package/dist/admin/components/forms/field-types/RichText/elements/relationship/Element/index.js +9 -2
  22. package/dist/admin/components/forms/field-types/RichText/elements/relationship/Element/index.scss +5 -0
  23. package/dist/admin/components/forms/field-types/RichText/elements/relationship/index.d.ts +1 -5
  24. package/dist/admin/components/forms/field-types/RichText/elements/toggle.js +2 -2
  25. package/dist/admin/components/forms/field-types/RichText/elements/upload/Button/index.d.ts +7 -0
  26. package/dist/admin/components/forms/field-types/RichText/elements/upload/Button/index.js +124 -0
  27. package/dist/admin/components/forms/field-types/RichText/elements/upload/Button/index.scss +7 -0
  28. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/index.d.ts +10 -0
  29. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/index.js +132 -0
  30. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/index.scss +45 -0
  31. package/dist/admin/components/forms/field-types/RichText/elements/upload/index.d.ts +14 -0
  32. package/dist/admin/components/forms/field-types/RichText/elements/upload/index.js +10 -0
  33. package/dist/admin/components/forms/field-types/RichText/elements/upload/modal.scss +29 -0
  34. package/dist/admin/components/forms/field-types/RichText/elements/upload/plugin.d.ts +2 -0
  35. package/dist/admin/components/forms/field-types/RichText/elements/upload/plugin.js +7 -0
  36. package/dist/admin/components/icons/Edit/index.d.ts +4 -0
  37. package/dist/admin/components/icons/Edit/index.js +7 -0
  38. package/dist/admin/components/icons/Edit/index.scss +12 -0
  39. package/dist/admin/components/icons/Upload/index.d.ts +4 -0
  40. package/dist/admin/components/icons/Upload/index.js +6 -0
  41. package/dist/admin/components/icons/Upload/index.scss +11 -0
  42. package/dist/admin/components/views/collections/List/formatFields.d.ts +1 -5
  43. package/dist/collections/buildSchema.js +4 -2
  44. package/dist/collections/operations/find.js +6 -2
  45. package/dist/collections/operations/local/update.d.ts +1 -0
  46. package/dist/collections/operations/local/update.js +3 -2
  47. package/dist/collections/operations/update.d.ts +1 -0
  48. package/dist/collections/operations/update.js +3 -3
  49. package/dist/config/schema.js +2 -1
  50. package/dist/fields/config/types.d.ts +1 -1
  51. package/dist/fields/richTextRelationshipPromise.js +2 -2
  52. package/dist/mongoose/buildSchema.d.ts +7 -2
  53. package/dist/mongoose/buildSchema.js +82 -241
  54. package/dist/uploads/imageResizer.js +2 -2
  55. package/dist/utilities/flattenWhereConstraints.d.ts +3 -0
  56. package/dist/utilities/flattenWhereConstraints.js +18 -0
  57. package/docs/fields/rich-text.mdx +7 -2
  58. package/docs/local-api/overview.mdx +5 -0
  59. package/package.json +5 -5
@@ -25,14 +25,11 @@ const insertRelationship = (editor, { value, relationTo }) => {
25
25
  text,
26
26
  ],
27
27
  };
28
- const nodes = [relationship, { children: [{ text: '' }] }];
28
+ const nodes = [relationship, { type: 'p', children: [{ text: '' }] }];
29
29
  if (editor.blurSelection) {
30
30
  Transforms.select(editor, editor.blurSelection);
31
31
  }
32
32
  Transforms.insertNodes(editor, nodes);
33
- const currentPath = editor.selection.anchor.path[0];
34
- const newSelection = { anchor: { path: [currentPath + 1, 0], offset: 0 }, focus: { path: [currentPath + 1, 0], offset: 0 } };
35
- Transforms.select(editor, newSelection);
36
33
  ReactEditor.focus(editor);
37
34
  };
38
35
  const RelationshipButton = ({ path }) => {
@@ -1,8 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import './index.scss';
3
- declare const Element: ({ attributes, children, element }: {
4
- attributes: any;
5
- children: any;
6
- element: any;
7
- }) => JSX.Element;
3
+ declare const Element: (props: any) => JSX.Element;
8
4
  export default Element;
@@ -1,4 +1,5 @@
1
1
  import React, { useState } from 'react';
2
+ import { useFocused, useSelected } from 'slate-react';
2
3
  import { useConfig } from '@payloadcms/config-provider';
3
4
  import RelationshipIcon from '../../../../../../icons/Relationship';
4
5
  import usePayloadAPI from '../../../../../../../hooks/usePayloadAPI';
@@ -7,13 +8,19 @@ const baseClass = 'rich-text-relationship';
7
8
  const initialParams = {
8
9
  depth: 0,
9
10
  };
10
- const Element = ({ attributes, children, element }) => {
11
+ const Element = (props) => {
11
12
  var _a;
13
+ const { attributes, children, element } = props;
12
14
  const { relationTo, value } = element;
13
15
  const { collections, serverURL, routes: { api } } = useConfig();
14
16
  const [relatedCollection] = useState(() => collections.find((coll) => coll.slug === relationTo));
17
+ const selected = useSelected();
18
+ const focused = useFocused();
15
19
  const [{ data }] = usePayloadAPI(`${serverURL}${api}/${relatedCollection.slug}/${value === null || value === void 0 ? void 0 : value.id}`, { initialParams });
16
- return (React.createElement("div", { className: baseClass, contentEditable: false, ...attributes },
20
+ return (React.createElement("div", { className: [
21
+ baseClass,
22
+ (selected && focused) && `${baseClass}--selected`,
23
+ ].filter(Boolean).join(' '), contentEditable: false, ...attributes },
17
24
  React.createElement(RelationshipIcon, null),
18
25
  React.createElement("div", { className: `${baseClass}__wrap` },
19
26
  React.createElement("div", { className: `${baseClass}__label` },
@@ -19,4 +19,9 @@
19
19
  text-overflow: ellipsis;
20
20
  overflow: hidden;
21
21
  }
22
+
23
+ &--selected {
24
+ box-shadow: $focus-box-shadow;
25
+ outline: none;
26
+ }
22
27
  }
@@ -3,11 +3,7 @@ declare const _default: {
3
3
  Button: import("react").FC<{
4
4
  path: string;
5
5
  }>;
6
- Element: ({ attributes, children, element }: {
7
- attributes: any;
8
- children: any;
9
- element: any;
10
- }) => JSX.Element;
6
+ Element: (props: any) => JSX.Element;
11
7
  plugins: ((incomingEditor: any) => any)[];
12
8
  };
13
9
  export default _default;
@@ -1,4 +1,4 @@
1
- import { Transforms } from 'slate';
1
+ import { Element, Transforms } from 'slate';
2
2
  import { ReactEditor } from 'slate-react';
3
3
  import isElementActive from './isActive';
4
4
  import listTypes from './listTypes';
@@ -16,7 +16,7 @@ const toggleElement = (editor, format) => {
16
16
  Transforms.select(editor, editor.blurSelection);
17
17
  }
18
18
  Transforms.unwrapNodes(editor, {
19
- match: (n) => listTypes.includes(n.type),
19
+ match: (n) => Element.isElement(n) && listTypes.includes(n.type),
20
20
  split: true,
21
21
  });
22
22
  Transforms.setNodes(editor, { type });
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ import '../modal.scss';
4
+ declare const UploadButton: React.FC<{
5
+ path: string;
6
+ }>;
7
+ export default UploadButton;
@@ -0,0 +1,124 @@
1
+ import React, { Fragment, useEffect, useState } from 'react';
2
+ import { Modal, useModal } from '@faceless-ui/modal';
3
+ import { Transforms } from 'slate';
4
+ import { ReactEditor, useSlate } from 'slate-react';
5
+ import { useConfig } from '@payloadcms/config-provider';
6
+ import ElementButton from '../../Button';
7
+ import UploadIcon from '../../../../../../icons/Upload';
8
+ import usePayloadAPI from '../../../../../../../hooks/usePayloadAPI';
9
+ import UploadGallery from '../../../../../../elements/UploadGallery';
10
+ import ListControls from '../../../../../../elements/ListControls';
11
+ import ReactSelect from '../../../../../../elements/ReactSelect';
12
+ import Paginator from '../../../../../../elements/Paginator';
13
+ import formatFields from '../../../../../../views/collections/List/formatFields';
14
+ import Label from '../../../../../Label';
15
+ import MinimalTemplate from '../../../../../../templates/Minimal';
16
+ import Button from '../../../../../../elements/Button';
17
+ import './index.scss';
18
+ import '../modal.scss';
19
+ const baseClass = 'upload-rich-text-button';
20
+ const baseModalClass = 'rich-text-upload-modal';
21
+ const insertUpload = (editor, { value, relationTo }) => {
22
+ const text = { text: ' ' };
23
+ const upload = {
24
+ type: 'upload',
25
+ value,
26
+ relationTo,
27
+ children: [
28
+ text,
29
+ ],
30
+ };
31
+ const nodes = [upload, { type: 'p', children: [{ text: '' }] }];
32
+ if (editor.blurSelection) {
33
+ Transforms.select(editor, editor.blurSelection);
34
+ }
35
+ Transforms.insertNodes(editor, nodes);
36
+ ReactEditor.focus(editor);
37
+ };
38
+ const UploadButton = ({ path }) => {
39
+ const { open, closeAll, currentModal } = useModal();
40
+ const editor = useSlate();
41
+ const { serverURL, routes: { api }, collections } = useConfig();
42
+ const [availableCollections] = useState(() => collections.filter(({ admin: { enableRichTextRelationship }, upload }) => (Boolean(upload) && enableRichTextRelationship)));
43
+ const [renderModal, setRenderModal] = useState(false);
44
+ const [modalCollectionOption, setModalCollectionOption] = useState(() => {
45
+ const firstAvailableCollection = collections.find(({ admin: { enableRichTextRelationship }, upload }) => (Boolean(upload) && enableRichTextRelationship));
46
+ return { label: firstAvailableCollection.labels.singular, value: firstAvailableCollection.slug };
47
+ });
48
+ const [modalCollection, setModalCollection] = useState(() => collections.find(({ admin: { enableRichTextRelationship }, upload }) => (Boolean(upload) && enableRichTextRelationship)));
49
+ const [listControls, setListControls] = useState({});
50
+ const [page, setPage] = useState(null);
51
+ const [sort, setSort] = useState(null);
52
+ const [fields, setFields] = useState(formatFields(modalCollection));
53
+ const [hasEnabledCollections] = useState(() => collections.find(({ upload, admin: { enableRichTextRelationship } }) => upload && enableRichTextRelationship));
54
+ const modalSlug = `${path}-add-upload`;
55
+ const moreThanOneAvailableCollection = availableCollections.length > 1;
56
+ const isOpen = currentModal === modalSlug;
57
+ // If modal is open, get active page of upload gallery
58
+ const apiURL = isOpen ? `${serverURL}${api}/${modalCollection.slug}` : null;
59
+ const [{ data }, { setParams }] = usePayloadAPI(apiURL, {});
60
+ useEffect(() => {
61
+ setFields(formatFields(modalCollection));
62
+ }, [modalCollection]);
63
+ useEffect(() => {
64
+ if (renderModal) {
65
+ open(modalSlug);
66
+ }
67
+ }, [renderModal, open, modalSlug]);
68
+ useEffect(() => {
69
+ const params = {};
70
+ if (page)
71
+ params.page = page;
72
+ if (listControls === null || listControls === void 0 ? void 0 : listControls.where)
73
+ params.where = listControls.where;
74
+ if (sort)
75
+ params.sort = sort;
76
+ setParams(params);
77
+ }, [setParams, page, listControls, sort]);
78
+ useEffect(() => {
79
+ setModalCollection(collections.find(({ slug }) => modalCollectionOption.value === slug));
80
+ }, [modalCollectionOption, collections]);
81
+ if (!hasEnabledCollections)
82
+ return null;
83
+ return (React.createElement(Fragment, null,
84
+ React.createElement(ElementButton, { className: baseClass, format: "upload", onClick: () => setRenderModal(true) },
85
+ React.createElement(UploadIcon, null)),
86
+ renderModal && (React.createElement(Modal, { className: baseModalClass, slug: modalSlug }, isOpen && (React.createElement(MinimalTemplate, { width: "wide" },
87
+ React.createElement("header", { className: `${baseModalClass}__header` },
88
+ React.createElement("h1", null,
89
+ "Add",
90
+ ' ',
91
+ modalCollection.labels.singular),
92
+ React.createElement(Button, { icon: "x", round: true, buttonStyle: "icon-label", iconStyle: "with-border", onClick: () => {
93
+ closeAll();
94
+ setRenderModal(false);
95
+ } })),
96
+ moreThanOneAvailableCollection && (React.createElement("div", { className: `${baseModalClass}__select-collection-wrap` },
97
+ React.createElement(Label, { label: "Select a Collection to Browse" }),
98
+ React.createElement(ReactSelect, { className: `${baseClass}__select-collection`, value: modalCollectionOption, onChange: setModalCollectionOption, options: availableCollections.map((coll) => ({ label: coll.labels.singular, value: coll.slug })) }))),
99
+ React.createElement(ListControls, { handleChange: setListControls, collection: {
100
+ ...modalCollection,
101
+ fields,
102
+ }, enableColumns: false, setSort: setSort, enableSort: true }),
103
+ React.createElement(UploadGallery, { docs: data === null || data === void 0 ? void 0 : data.docs, collection: modalCollection, onCardClick: (doc) => {
104
+ insertUpload(editor, {
105
+ value: {
106
+ id: doc.id,
107
+ },
108
+ relationTo: modalCollection.slug,
109
+ });
110
+ setRenderModal(false);
111
+ closeAll();
112
+ } }),
113
+ React.createElement("div", { className: `${baseClass}__page-controls` },
114
+ React.createElement(Paginator, { limit: data.limit, totalPages: data.totalPages, page: data.page, hasPrevPage: data.hasPrevPage, hasNextPage: data.hasNextPage, prevPage: data.prevPage, nextPage: data.nextPage, numberOfNeighbors: 1, onChange: setPage, disableHistoryChange: true }),
115
+ (data === null || data === void 0 ? void 0 : data.totalDocs) > 0 && (React.createElement("div", { className: `${baseClass}__page-info` },
116
+ data.page,
117
+ "-",
118
+ data.totalPages > 1 ? data.limit : data.totalDocs,
119
+ ' ',
120
+ "of",
121
+ ' ',
122
+ data.totalDocs)))))))));
123
+ };
124
+ export default UploadButton;
@@ -0,0 +1,7 @@
1
+ @import '../../../../../../../scss/styles.scss';
2
+
3
+ .upload-rich-text-button {
4
+ .btn {
5
+ margin-right: base(1);
6
+ }
7
+ }
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import './index.scss';
3
+ import '../modal.scss';
4
+ declare const Element: ({ attributes, children, element, path }: {
5
+ attributes: any;
6
+ children: any;
7
+ element: any;
8
+ path: any;
9
+ }) => JSX.Element;
10
+ export default Element;
@@ -0,0 +1,132 @@
1
+ import React, { useState, useEffect, useCallback } from 'react';
2
+ import { Modal, useModal } from '@faceless-ui/modal';
3
+ import { Transforms } from 'slate';
4
+ import { ReactEditor, useSlateStatic, useFocused, useSelected } from 'slate-react';
5
+ import { useConfig } from '@payloadcms/config-provider';
6
+ import usePayloadAPI from '../../../../../../../hooks/usePayloadAPI';
7
+ import FileGraphic from '../../../../../../graphics/File';
8
+ import useThumbnail from '../../../../../../../hooks/useThumbnail';
9
+ import MinimalTemplate from '../../../../../../templates/Minimal';
10
+ import UploadGallery from '../../../../../../elements/UploadGallery';
11
+ import ListControls from '../../../../../../elements/ListControls';
12
+ import Button from '../../../../../../elements/Button';
13
+ import ReactSelect from '../../../../../../elements/ReactSelect';
14
+ import Paginator from '../../../../../../elements/Paginator';
15
+ import formatFields from '../../../../../../views/collections/List/formatFields';
16
+ import Label from '../../../../../Label';
17
+ import './index.scss';
18
+ import '../modal.scss';
19
+ const baseClass = 'rich-text-upload';
20
+ const baseModalClass = 'rich-text-upload-modal';
21
+ const initialParams = {
22
+ depth: 0,
23
+ };
24
+ const Element = ({ attributes, children, element, path }) => {
25
+ const { relationTo, value } = element;
26
+ const { closeAll, currentModal, open } = useModal();
27
+ const { collections, serverURL, routes: { api } } = useConfig();
28
+ const [availableCollections] = useState(() => collections.filter(({ admin: { enableRichTextRelationship }, upload }) => (Boolean(upload) && enableRichTextRelationship)));
29
+ const [renderModal, setRenderModal] = useState(false);
30
+ const [relatedCollection, setRelatedCollection] = useState(() => collections.find((coll) => coll.slug === relationTo));
31
+ const [modalCollectionOption, setModalCollectionOption] = useState({ label: relatedCollection.labels.singular, value: relatedCollection.slug });
32
+ const [modalCollection, setModalCollection] = useState(relatedCollection);
33
+ const [listControls, setListControls] = useState({});
34
+ const [page, setPage] = useState(null);
35
+ const [sort, setSort] = useState(null);
36
+ const [fields, setFields] = useState(formatFields(relatedCollection));
37
+ const editor = useSlateStatic();
38
+ const selected = useSelected();
39
+ const focused = useFocused();
40
+ const modalSlug = `${path}-edit-upload`;
41
+ const isOpen = currentModal === modalSlug;
42
+ const moreThanOneAvailableCollection = availableCollections.length > 1;
43
+ // Get the referenced document
44
+ const [{ data: upload }] = usePayloadAPI(`${serverURL}${api}/${relatedCollection.slug}/${value === null || value === void 0 ? void 0 : value.id}`, { initialParams });
45
+ // If modal is open, get active page of upload gallery
46
+ const apiURL = isOpen ? `${serverURL}${api}/${modalCollection.slug}` : null;
47
+ const [{ data }, { setParams }] = usePayloadAPI(apiURL, {});
48
+ const thumbnailSRC = useThumbnail(relatedCollection, upload);
49
+ const handleUpdateUpload = useCallback((doc) => {
50
+ const newNode = {
51
+ type: 'upload',
52
+ value: { id: doc.id },
53
+ relationTo: modalCollection.slug,
54
+ children: [
55
+ { text: ' ' },
56
+ ],
57
+ };
58
+ const elementPath = ReactEditor.findPath(editor, element);
59
+ Transforms.setNodes(editor, newNode, { at: elementPath });
60
+ closeAll();
61
+ }, [closeAll, editor, element, modalCollection]);
62
+ useEffect(() => {
63
+ setFields(formatFields(relatedCollection));
64
+ }, [relatedCollection]);
65
+ useEffect(() => {
66
+ if (renderModal && modalSlug) {
67
+ open(modalSlug);
68
+ }
69
+ }, [renderModal, open, modalSlug]);
70
+ useEffect(() => {
71
+ const params = {};
72
+ if (page)
73
+ params.page = page;
74
+ if (listControls === null || listControls === void 0 ? void 0 : listControls.where)
75
+ params.where = listControls.where;
76
+ if (sort)
77
+ params.sort = sort;
78
+ setParams(params);
79
+ }, [setParams, page, listControls, sort]);
80
+ useEffect(() => {
81
+ setModalCollection(collections.find(({ slug }) => modalCollectionOption.value === slug));
82
+ }, [modalCollectionOption, collections]);
83
+ return (React.createElement("div", { className: [
84
+ baseClass,
85
+ (selected && focused) && `${baseClass}--selected`,
86
+ ].filter(Boolean).join(' '), contentEditable: false, ...attributes },
87
+ React.createElement("div", { className: `${baseClass}__thumbnail` },
88
+ thumbnailSRC && (React.createElement("img", { src: thumbnailSRC, alt: upload === null || upload === void 0 ? void 0 : upload.filename })),
89
+ !thumbnailSRC && (React.createElement(FileGraphic, null))),
90
+ React.createElement("div", { className: `${baseClass}__wrap` },
91
+ React.createElement("div", { className: `${baseClass}__label` }, relatedCollection.labels.singular),
92
+ React.createElement("h5", null, upload === null || upload === void 0 ? void 0 : upload.filename)),
93
+ React.createElement(Button, { icon: "edit", round: true, buttonStyle: "icon-label", iconStyle: "with-border", className: `${baseClass}__button`, onClick: (e) => {
94
+ e.preventDefault();
95
+ setRenderModal(true);
96
+ } }),
97
+ children,
98
+ renderModal && (React.createElement(Modal, { className: baseModalClass, slug: modalSlug }, isOpen && (React.createElement(MinimalTemplate, { width: "wide" },
99
+ React.createElement("header", { className: `${baseModalClass}__header` },
100
+ React.createElement("h1", null,
101
+ "Choose",
102
+ ' ',
103
+ modalCollection.labels.singular),
104
+ React.createElement(Button, { icon: "x", round: true, buttonStyle: "icon-label", iconStyle: "with-border", onClick: () => {
105
+ closeAll();
106
+ setRenderModal(false);
107
+ } })),
108
+ moreThanOneAvailableCollection && (React.createElement("div", { className: `${baseModalClass}__select-collection-wrap` },
109
+ React.createElement(Label, { label: "Select a Collection to Browse" }),
110
+ React.createElement(ReactSelect, { className: `${baseClass}__select-collection`, value: modalCollectionOption, onChange: setModalCollectionOption, options: availableCollections.map((coll) => ({ label: coll.labels.singular, value: coll.slug })) }))),
111
+ React.createElement(ListControls, { handleChange: setListControls, collection: {
112
+ ...modalCollection,
113
+ fields,
114
+ }, enableColumns: false, setSort: setSort, enableSort: true }),
115
+ React.createElement(UploadGallery, { docs: data === null || data === void 0 ? void 0 : data.docs, collection: modalCollection, onCardClick: (doc) => {
116
+ handleUpdateUpload(doc);
117
+ setRelatedCollection(modalCollection);
118
+ setRenderModal(false);
119
+ closeAll();
120
+ } }),
121
+ React.createElement("div", { className: `${baseClass}__page-controls` },
122
+ React.createElement(Paginator, { limit: data.limit, totalPages: data.totalPages, page: data.page, hasPrevPage: data.hasPrevPage, hasNextPage: data.hasNextPage, prevPage: data.prevPage, nextPage: data.nextPage, numberOfNeighbors: 1, onChange: setPage, disableHistoryChange: true }),
123
+ (data === null || data === void 0 ? void 0 : data.totalDocs) > 0 && (React.createElement("div", { className: `${baseClass}__page-info` },
124
+ data.page,
125
+ "-",
126
+ data.totalPages > 1 ? data.limit : data.totalDocs,
127
+ ' ',
128
+ "of",
129
+ ' ',
130
+ data.totalDocs)))))))));
131
+ };
132
+ export default Element;
@@ -0,0 +1,45 @@
1
+ @import '../../../../../../../scss/styles.scss';
2
+
3
+ .rich-text-upload {
4
+ max-width: base(15);
5
+ display: flex;
6
+ align-items: center;
7
+ background: $color-background-gray;
8
+ position: relative;
9
+
10
+ &__button {
11
+ margin: 0;
12
+ position: absolute;
13
+ top: base(.5);
14
+ right: base(.5);
15
+ }
16
+
17
+ h5 {
18
+ white-space: nowrap;
19
+ text-overflow: ellipsis;
20
+ overflow: hidden;
21
+ }
22
+
23
+ &__thumbnail {
24
+ width: base(4);
25
+ max-height: base(4);
26
+
27
+ img, svg {
28
+ object-fit: cover;
29
+ width: 100%;
30
+ height: 100%;
31
+ }
32
+ }
33
+
34
+ &__wrap {
35
+ padding: base(.5) base(.5) base(.5) base(1);
36
+ text-align: left;
37
+ overflow: hidden;
38
+ text-overflow: ellipsis;
39
+ }
40
+
41
+ &--selected {
42
+ box-shadow: $focus-box-shadow;
43
+ outline: none;
44
+ }
45
+ }
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ declare const _default: {
3
+ Button: import("react").FC<{
4
+ path: string;
5
+ }>;
6
+ Element: ({ attributes, children, element, path }: {
7
+ attributes: any;
8
+ children: any;
9
+ element: any;
10
+ path: any;
11
+ }) => JSX.Element;
12
+ plugins: ((incomingEditor: any) => any)[];
13
+ };
14
+ export default _default;
@@ -0,0 +1,10 @@
1
+ import plugin from './plugin';
2
+ import Element from './Element';
3
+ import Button from './Button';
4
+ export default {
5
+ Button,
6
+ Element,
7
+ plugins: [
8
+ plugin,
9
+ ],
10
+ };
@@ -0,0 +1,29 @@
1
+ @import '../../../../../../scss/styles.scss';
2
+
3
+ .rich-text-upload-modal {
4
+ @include blur-bg;
5
+ display: flex;
6
+ align-items: center;
7
+
8
+ .template-minimal {
9
+ padding-top: base(4);
10
+ align-items: flex-start;
11
+ }
12
+
13
+ &__header {
14
+ margin-bottom: $baseline;
15
+ display: flex;
16
+
17
+ h1 {
18
+ margin: 0 auto 0 0;
19
+ }
20
+
21
+ .btn {
22
+ margin: 0 0 0 $baseline;
23
+ }
24
+ }
25
+
26
+ &__select-collection-wrap {
27
+ margin-bottom: base(1);
28
+ }
29
+ }
@@ -0,0 +1,2 @@
1
+ declare const withRelationship: (incomingEditor: any) => any;
2
+ export default withRelationship;
@@ -0,0 +1,7 @@
1
+ const withRelationship = (incomingEditor) => {
2
+ const editor = incomingEditor;
3
+ const { isVoid } = editor;
4
+ editor.isVoid = (element) => (element.type === 'upload' ? true : isVoid(element));
5
+ return editor;
6
+ };
7
+ export default withRelationship;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ declare const Edit: React.FC;
4
+ export default Edit;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ const Edit = () => (React.createElement("svg", { className: "icon icon--edit", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 25 25" },
4
+ React.createElement("polygon", { className: "fill", points: "16.92 16.86 8.25 16.86 8.25 8.21 12.54 8.21 12.54 6.63 6.68 6.63 6.68 18.43 18.5 18.43 18.5 12.53 16.92 12.53 16.92 16.86" }),
5
+ React.createElement("polygon", { className: "fill", points: "16.31 7.33 17.42 8.44 12.66 13.2 11.51 13.24 11.55 12.09 16.31 7.33" }),
6
+ React.createElement("rect", { className: "fill", x: "16.94", y: "6.44", width: "1.58", height: "1.15", transform: "translate(10.16 -10.48) rotate(45)" })));
7
+ export default Edit;
@@ -0,0 +1,12 @@
1
+ @import '../../../scss/styles';
2
+
3
+ .icon--edit {
4
+ height: $baseline;
5
+ width: $baseline;
6
+ shape-rendering: auto;
7
+
8
+ .fill {
9
+ fill: $color-dark-gray;
10
+ stroke: none;
11
+ }
12
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ declare const Upload: React.FC;
4
+ export default Upload;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ const Upload = () => (React.createElement("svg", { className: "icon icon--upload", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 25 25" },
4
+ React.createElement("path", { d: "M20.06,5.12h-15v15h15Zm-2,2v7L15.37,11l-3.27,4.1-2-1.58-3,3.74V7.12Z", className: "fill" }),
5
+ React.createElement("circle", { cx: "9.69", cy: "9.47", r: "0.97", className: "fill" })));
6
+ export default Upload;
@@ -0,0 +1,11 @@
1
+ @import '../../../scss/styles';
2
+
3
+ .icon--upload {
4
+ height: $baseline;
5
+ width: $baseline;
6
+
7
+ .fill {
8
+ fill: $color-dark-gray;
9
+ stroke: none;
10
+ }
11
+ }
@@ -1,8 +1,4 @@
1
1
  import { SanitizedCollectionConfig } from '../../../../../collections/config/types';
2
2
  import { Field } from '../../../../../fields/config/types';
3
- declare const formatFields: (config: SanitizedCollectionConfig) => (Field | {
4
- name: string;
5
- label: string;
6
- type: string;
7
- })[];
3
+ declare const formatFields: (config: SanitizedCollectionConfig) => Field[];
8
4
  export default formatFields;
@@ -7,10 +7,12 @@ const mongoose_paginate_v2_1 = __importDefault(require("mongoose-paginate-v2"));
7
7
  const buildQuery_1 = __importDefault(require("../mongoose/buildQuery"));
8
8
  const buildSchema_1 = __importDefault(require("../mongoose/buildSchema"));
9
9
  const buildCollectionSchema = (collection, config, schemaOptions = {}) => {
10
- const schema = buildSchema_1.default(config, collection.fields, { timestamps: collection.timestamps !== false, ...schemaOptions });
10
+ const schema = buildSchema_1.default(config, collection.fields, {
11
+ options: { timestamps: collection.timestamps !== false, ...schemaOptions },
12
+ });
11
13
  schema.plugin(mongoose_paginate_v2_1.default, { useEstimatedCount: true })
12
14
  .plugin(buildQuery_1.default);
13
15
  return schema;
14
16
  };
15
17
  exports.default = buildCollectionSchema;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRTY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbnMvYnVpbGRTY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRkFBNEM7QUFHNUMsd0VBQXNEO0FBQ3RELDBFQUFrRDtBQUdsRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsVUFBcUMsRUFBRSxNQUF1QixFQUFFLGFBQWEsR0FBRyxFQUFFLEVBQVUsRUFBRTtJQUMzSCxNQUFNLE1BQU0sR0FBRyxxQkFBVyxDQUN4QixNQUFNLEVBQ04sVUFBVSxDQUFDLE1BQU0sRUFDakIsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FDbEUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsOEJBQVEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2pELE1BQU0sQ0FBQyxvQkFBZ0IsQ0FBQyxDQUFDO0lBRTVCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLGtCQUFlLHFCQUFxQixDQUFDIn0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRTY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbnMvYnVpbGRTY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRkFBNEM7QUFHNUMsd0VBQXNEO0FBQ3RELDBFQUFrRDtBQUdsRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsVUFBcUMsRUFBRSxNQUF1QixFQUFFLGFBQWEsR0FBRyxFQUFFLEVBQVUsRUFBRTtJQUMzSCxNQUFNLE1BQU0sR0FBRyxxQkFBVyxDQUN4QixNQUFNLEVBQ04sVUFBVSxDQUFDLE1BQU0sRUFDakI7UUFDRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsR0FBRyxhQUFhLEVBQUU7S0FDM0UsQ0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyw4QkFBUSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDakQsTUFBTSxDQUFDLG9CQUFnQixDQUFDLENBQUM7SUFFNUIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsa0JBQWUscUJBQXFCLENBQUMifQ==
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const executeAccess_1 = __importDefault(require("../../auth/executeAccess"));
7
7
  const sanitizeInternalFields_1 = __importDefault(require("../../utilities/sanitizeInternalFields"));
8
8
  const types_1 = require("../../auth/types");
9
+ const flattenWhereConstraints_1 = __importDefault(require("../../utilities/flattenWhereConstraints"));
9
10
  async function find(incomingArgs) {
10
11
  let args = incomingArgs;
11
12
  // /////////////////////////////////////
@@ -23,6 +24,7 @@ async function find(incomingArgs) {
23
24
  // Access
24
25
  // /////////////////////////////////////
25
26
  const queryToBuild = {};
27
+ let useEstimatedCount = false;
26
28
  if (where) {
27
29
  let and = [];
28
30
  if (Array.isArray(where.and))
@@ -35,6 +37,8 @@ async function find(incomingArgs) {
35
37
  ...and,
36
38
  ],
37
39
  };
40
+ const constraints = flattenWhereConstraints_1.default(queryToBuild);
41
+ useEstimatedCount = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'));
38
42
  }
39
43
  if (!overrideAccess) {
40
44
  const accessResults = await executeAccess_1.default({ req }, collectionConfig.access.read);
@@ -73,7 +77,7 @@ async function find(incomingArgs) {
73
77
  sort,
74
78
  lean: true,
75
79
  leanWithId: true,
76
- useEstimatedCount: true,
80
+ useEstimatedCount,
77
81
  };
78
82
  const paginatedDocs = await Model.paginate(query, optionsToExecute);
79
83
  // /////////////////////////////////////
@@ -132,4 +136,4 @@ async function find(incomingArgs) {
132
136
  return result;
133
137
  }
134
138
  exports.default = find;
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2ZpbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSw2RUFBcUQ7QUFDckQsb0dBQTRFO0FBRTVFLDRDQUF3RDtBQWN4RCxLQUFLLFVBQVUsSUFBSSxDQUFDLFlBQXVCO0lBQ3pDLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQztJQUV4Qix3Q0FBd0M7SUFDeEMsK0JBQStCO0lBQy9CLHdDQUF3QztJQUV4QyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDbEYsTUFBTSxTQUFTLENBQUM7UUFFaEIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDakIsSUFBSTtZQUNKLFNBQVMsRUFBRSxNQUFNO1NBQ2xCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNkLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUV0QixNQUFNLEVBQ0osS0FBSyxFQUNMLElBQUksRUFDSixLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFBRSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQUUsZ0JBQWdCLEdBQ3pCLEVBQ0QsR0FBRyxFQUNILEdBQUcsRUFBRSxFQUNILE1BQU0sR0FDUCxFQUNELGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsR0FBRyxJQUFJLENBQUM7SUFFVCx3Q0FBd0M7SUFDeEMsU0FBUztJQUNULHdDQUF3QztJQUV4QyxNQUFNLFlBQVksR0FBcUIsRUFBRSxDQUFDO0lBRTFDLElBQUksS0FBSyxFQUFFO1FBQ1QsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFB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
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2ZpbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSw2RUFBcUQ7QUFDckQsb0dBQTRFO0FBRTVFLDRDQUF3RDtBQUN4RCxzR0FBOEU7QUFjOUUsS0FBSyxVQUFVLElBQUksQ0FBQyxZQUF1QjtJQUN6QyxJQUFJLElBQUksR0FBRyxZQUFZLENBQUM7SUFFeEIsd0NBQXdDO0lBQ3hDLCtCQUErQjtJQUMvQix3Q0FBd0M7SUFFeEMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2xGLE1BQU0sU0FBUyxDQUFDO1FBRWhCLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ2pCLElBQUk7WUFDSixTQUFTLEVBQUUsTUFBTTtTQUNsQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFdEIsTUFBTSxFQUNKLEtBQUssRUFDTCxJQUFJLEVBQ0osS0FBSyxFQUNMLEtBQUssRUFDTCxVQUFVLEVBQUUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUFFLGdCQUFnQixHQUN6QixFQUNELEdBQUcsRUFDSCxHQUFHLEVBQUUsRUFDSCxNQUFNLEdBQ1AsRUFDRCxjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLEdBQUcsSUFBSSxDQUFDO0lBRVQsd0NBQXdDO0lBQ3hDLFNBQVM7SUFDVCx3Q0FBd0M7SUFFeEMsTUFBTSxZQUFZLEdBQXFCLEVBQUUsQ0FBQztJQUMxQyxJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUU5QixJQUFJLEtBQUssRUFBRTtRQUNULElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUViLElB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