@mirrormedia/lilith-draft-editor 1.0.0-beta → 1.0.0-beta4

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 (171) hide show
  1. package/lib/draft-js/block-renderer/background-image-block.js +123 -0
  2. package/lib/draft-js/block-renderer/background-video-block.js +133 -0
  3. package/lib/draft-js/block-renderer/color-box-block.js +92 -0
  4. package/lib/draft-js/block-renderer/divider-block.js +24 -0
  5. package/lib/draft-js/block-renderer/embedded-code-block.js +63 -0
  6. package/lib/draft-js/block-renderer/image-block.js +47 -0
  7. package/lib/draft-js/block-renderer/info-box-block.js +89 -0
  8. package/lib/draft-js/block-renderer/media-block.js +65 -0
  9. package/lib/draft-js/block-renderer/related-post-block.js +51 -0
  10. package/lib/draft-js/block-renderer/side-index-block.js +103 -0
  11. package/lib/draft-js/block-renderer/slideshow-block.js +71 -0
  12. package/lib/draft-js/block-renderer/table-block.js +408 -0
  13. package/lib/draft-js/buttons/annotation.js +117 -0
  14. package/lib/draft-js/buttons/background-color.js +123 -0
  15. package/lib/draft-js/buttons/background-image.js +222 -0
  16. package/lib/draft-js/buttons/background-video.js +222 -0
  17. package/lib/draft-js/buttons/color-box.js +172 -0
  18. package/lib/draft-js/buttons/divider.js +63 -0
  19. package/lib/draft-js/buttons/embedded-code.js +109 -0
  20. package/lib/draft-js/buttons/enlarge.js +24 -0
  21. package/lib/draft-js/buttons/font-color.js +116 -0
  22. package/lib/draft-js/buttons/image.js +68 -0
  23. package/lib/draft-js/buttons/info-box.js +147 -0
  24. package/lib/draft-js/buttons/link.js +107 -0
  25. package/lib/draft-js/buttons/media.js +121 -0
  26. package/lib/draft-js/buttons/related-post.js +71 -0
  27. package/lib/draft-js/buttons/selector/align-selector.js +71 -0
  28. package/lib/draft-js/buttons/selector/image-selector.js +428 -0
  29. package/lib/draft-js/buttons/selector/pagination.js +82 -0
  30. package/lib/draft-js/buttons/selector/post-selector.js +317 -0
  31. package/lib/draft-js/buttons/selector/search-box.js +46 -0
  32. package/lib/draft-js/buttons/selector/video-selector.js +284 -0
  33. package/lib/draft-js/buttons/side-index.js +200 -0
  34. package/lib/draft-js/buttons/slideshow.js +71 -0
  35. package/lib/draft-js/buttons/table.js +67 -0
  36. package/lib/draft-js/buttons/text-align.js +88 -0
  37. package/lib/draft-js/editor/basic-editor.js +366 -0
  38. package/lib/draft-js/editor/block-renderer-fn.js +117 -0
  39. package/lib/draft-js/editor/entity-decorator.js +16 -0
  40. package/lib/draft-js/editor/modifier.js +68 -0
  41. package/lib/draft-js/entity-decorator/annotation-decorator.js +86 -0
  42. package/lib/draft-js/entity-decorator/link-decorator.js +39 -0
  43. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.js +91 -0
  44. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.js +91 -0
  45. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.js +84 -0
  46. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.js +84 -0
  47. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.js +90 -0
  48. package/lib/website/mirrormedia/custom/block-renderer/table-block.js +408 -0
  49. package/lib/website/mirrormedia/custom/selector/align-selector.js +71 -0
  50. package/lib/website/mirrormedia/custom/selector/image-selector.js +427 -0
  51. package/lib/website/mirrormedia/custom/selector/pagination.js +82 -0
  52. package/lib/website/mirrormedia/custom/selector/post-selector.js +318 -0
  53. package/lib/website/mirrormedia/custom/selector/search-box.js +46 -0
  54. package/lib/website/mirrormedia/custom/selector/video-selector.js +282 -0
  55. package/lib/website/mirrormedia/draft-editor/block-renderer-fn.js +117 -0
  56. package/lib/website/mirrormedia/draft-editor/entity-decorator.js +18 -0
  57. package/lib/website/mirrormedia/draft-editor/index.js +799 -0
  58. package/lib/website/mirrormedia/index.js +1 -4
  59. package/lib/website/readr/custom/block-renderer/background-image-block.js +91 -0
  60. package/lib/website/readr/custom/block-renderer/background-video-block.js +91 -0
  61. package/lib/website/readr/custom/block-renderer/color-box-block.js +84 -0
  62. package/lib/website/readr/custom/block-renderer/info-box-block.js +84 -0
  63. package/lib/website/readr/custom/block-renderer/side-index-block.js +90 -0
  64. package/lib/website/readr/custom/block-renderer/table-block.js +408 -0
  65. package/lib/website/readr/custom/selector/align-selector.js +71 -0
  66. package/lib/website/readr/custom/selector/image-selector.js +427 -0
  67. package/lib/website/readr/custom/selector/pagination.js +82 -0
  68. package/lib/website/readr/custom/selector/post-selector.js +318 -0
  69. package/lib/website/readr/custom/selector/search-box.js +46 -0
  70. package/lib/website/readr/custom/selector/video-selector.js +282 -0
  71. package/lib/website/readr/draft-editor/block-renderer-fn.js +117 -0
  72. package/lib/website/readr/draft-editor/entity-decorator.js +18 -0
  73. package/lib/website/readr/draft-editor/index.js +799 -0
  74. package/lib/website/readr/index.js +1 -4
  75. package/package.json +3 -2
  76. package/lib/draft-js/block-renderer/background-image-block.tsx +0 -113
  77. package/lib/draft-js/block-renderer/background-video-block.tsx +0 -120
  78. package/lib/draft-js/block-renderer/color-box-block.tsx +0 -85
  79. package/lib/draft-js/block-renderer/divider-block.tsx +0 -12
  80. package/lib/draft-js/block-renderer/embedded-code-block.tsx +0 -65
  81. package/lib/draft-js/block-renderer/image-block.tsx +0 -41
  82. package/lib/draft-js/block-renderer/info-box-block.tsx +0 -85
  83. package/lib/draft-js/block-renderer/media-block.tsx +0 -36
  84. package/lib/draft-js/block-renderer/related-post-block.tsx +0 -47
  85. package/lib/draft-js/block-renderer/side-index-block.tsx +0 -113
  86. package/lib/draft-js/block-renderer/slideshow-block.tsx +0 -62
  87. package/lib/draft-js/block-renderer/table-block.tsx +0 -488
  88. package/lib/draft-js/buttons/annotation.tsx +0 -113
  89. package/lib/draft-js/buttons/background-color.tsx +0 -125
  90. package/lib/draft-js/buttons/background-image.tsx +0 -276
  91. package/lib/draft-js/buttons/background-video.tsx +0 -275
  92. package/lib/draft-js/buttons/color-box.tsx +0 -207
  93. package/lib/draft-js/buttons/divider.tsx +0 -56
  94. package/lib/draft-js/buttons/embedded-code.tsx +0 -126
  95. package/lib/draft-js/buttons/enlarge.tsx +0 -11
  96. package/lib/draft-js/buttons/font-color.tsx +0 -113
  97. package/lib/draft-js/buttons/image.tsx +0 -71
  98. package/lib/draft-js/buttons/info-box.tsx +0 -170
  99. package/lib/draft-js/buttons/link.tsx +0 -103
  100. package/lib/draft-js/buttons/media.tsx +0 -120
  101. package/lib/draft-js/buttons/related-post.tsx +0 -81
  102. package/lib/draft-js/buttons/selector/align-selector.tsx +0 -65
  103. package/lib/draft-js/buttons/selector/image-selector.tsx +0 -485
  104. package/lib/draft-js/buttons/selector/pagination.tsx +0 -83
  105. package/lib/draft-js/buttons/selector/post-selector.tsx +0 -367
  106. package/lib/draft-js/buttons/selector/search-box.tsx +0 -39
  107. package/lib/draft-js/buttons/selector/video-selector.tsx +0 -312
  108. package/lib/draft-js/buttons/side-index.tsx +0 -257
  109. package/lib/draft-js/buttons/slideshow.tsx +0 -81
  110. package/lib/draft-js/buttons/table.tsx +0 -63
  111. package/lib/draft-js/buttons/text-align.tsx +0 -88
  112. package/lib/draft-js/editor/basic-editor.tsx +0 -384
  113. package/lib/draft-js/editor/block-redender-fn.tsx +0 -77
  114. package/lib/draft-js/editor/entity-decorator.tsx +0 -7
  115. package/lib/draft-js/editor/modifier.tsx +0 -71
  116. package/lib/draft-js/entity-decorator/annotation-decorator.tsx +0 -81
  117. package/lib/draft-js/entity-decorator/link-decorator.tsx +0 -27
  118. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.tsx +0 -128
  119. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.tsx +0 -135
  120. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.tsx +0 -98
  121. package/lib/website/mirrormedia/custom/block-renderer/divider-block.tsx +0 -12
  122. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.tsx +0 -65
  123. package/lib/website/mirrormedia/custom/block-renderer/image-block.tsx +0 -41
  124. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.tsx +0 -98
  125. package/lib/website/mirrormedia/custom/block-renderer/media-block.tsx +0 -36
  126. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.tsx +0 -47
  127. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.tsx +0 -125
  128. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.tsx +0 -62
  129. package/lib/website/mirrormedia/custom/block-renderer/table-block.tsx +0 -537
  130. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.tsx +0 -81
  131. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.tsx +0 -27
  132. package/lib/website/mirrormedia/custom/selector/align-selector.tsx +0 -65
  133. package/lib/website/mirrormedia/custom/selector/image-selector.tsx +0 -485
  134. package/lib/website/mirrormedia/custom/selector/pagination.tsx +0 -83
  135. package/lib/website/mirrormedia/custom/selector/post-selector.tsx +0 -367
  136. package/lib/website/mirrormedia/custom/selector/search-box.tsx +0 -39
  137. package/lib/website/mirrormedia/custom/selector/video-selector.tsx +0 -310
  138. package/lib/website/mirrormedia/draft-editor/block-redender-fn.tsx +0 -77
  139. package/lib/website/mirrormedia/draft-editor/entity-decorator.tsx +0 -7
  140. package/lib/website/mirrormedia/draft-editor/index.tsx +0 -909
  141. package/lib/website/mirrormedia/draft-renderer/block-redender-fn.tsx +0 -77
  142. package/lib/website/mirrormedia/draft-renderer/entity-decorator.tsx +0 -7
  143. package/lib/website/mirrormedia/draft-renderer/index-deprecated.tsx +0 -43
  144. package/lib/website/mirrormedia/draft-renderer/index.tsx +0 -150
  145. package/lib/website/readr/custom/block-renderer/background-image-block.tsx +0 -128
  146. package/lib/website/readr/custom/block-renderer/background-video-block.tsx +0 -135
  147. package/lib/website/readr/custom/block-renderer/color-box-block.tsx +0 -98
  148. package/lib/website/readr/custom/block-renderer/divider-block.tsx +0 -12
  149. package/lib/website/readr/custom/block-renderer/embedded-code-block.tsx +0 -65
  150. package/lib/website/readr/custom/block-renderer/image-block.tsx +0 -41
  151. package/lib/website/readr/custom/block-renderer/info-box-block.tsx +0 -98
  152. package/lib/website/readr/custom/block-renderer/media-block.tsx +0 -36
  153. package/lib/website/readr/custom/block-renderer/related-post-block.tsx +0 -47
  154. package/lib/website/readr/custom/block-renderer/side-index-block.tsx +0 -125
  155. package/lib/website/readr/custom/block-renderer/slideshow-block.tsx +0 -62
  156. package/lib/website/readr/custom/block-renderer/table-block.tsx +0 -537
  157. package/lib/website/readr/custom/entity-decorator/annotation-decorator.tsx +0 -81
  158. package/lib/website/readr/custom/entity-decorator/link-decorator.tsx +0 -27
  159. package/lib/website/readr/custom/selector/align-selector.tsx +0 -65
  160. package/lib/website/readr/custom/selector/image-selector.tsx +0 -485
  161. package/lib/website/readr/custom/selector/pagination.tsx +0 -83
  162. package/lib/website/readr/custom/selector/post-selector.tsx +0 -367
  163. package/lib/website/readr/custom/selector/search-box.tsx +0 -39
  164. package/lib/website/readr/custom/selector/video-selector.tsx +0 -310
  165. package/lib/website/readr/draft-editor/block-redender-fn.tsx +0 -77
  166. package/lib/website/readr/draft-editor/entity-decorator.tsx +0 -7
  167. package/lib/website/readr/draft-editor/index.tsx +0 -909
  168. package/lib/website/readr/draft-renderer/block-redender-fn.tsx +0 -77
  169. package/lib/website/readr/draft-renderer/entity-decorator.tsx +0 -7
  170. package/lib/website/readr/draft-renderer/index-deprecated.tsx +0 -43
  171. package/lib/website/readr/draft-renderer/index.tsx +0 -150
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImageSelector = ImageSelector;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
11
+
12
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
13
+
14
+ var _fields = require("@keystone-ui/fields");
15
+
16
+ var _modals = require("@keystone-ui/modals");
17
+
18
+ var _apollo = require("@keystone-6/core/admin-ui/apollo");
19
+
20
+ var _alignSelector = require("./align-selector");
21
+
22
+ var _searchBox = require("./search-box");
23
+
24
+ var _pagination = require("./pagination");
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
32
+ const imagesQuery = (0, _apollo.gql)`
33
+ query Photos($searchText: String!, $take: Int, $skip: Int) {
34
+ photosCount(where: { name: { contains: $searchText } })
35
+ photos(
36
+ where: { name: { contains: $searchText } }
37
+ take: $take
38
+ skip: $skip
39
+ ) {
40
+ id
41
+ name
42
+ imageFile {
43
+ url
44
+ }
45
+ resized {
46
+ original
47
+ w480
48
+ w800
49
+ w1200
50
+ w1600
51
+ w2400
52
+ }
53
+ }
54
+ }
55
+ `;
56
+ const _ = {
57
+ debounce: _debounce.default
58
+ };
59
+ const ImageSearchBox = (0, _styledComponents.default)(_searchBox.SearchBox)`
60
+ margin-top: 10px;
61
+ `;
62
+ const ImageSelectionWrapper = _styledComponents.default.div`
63
+ overflow: auto;
64
+ margin-top: 10px;
65
+ `;
66
+ const ImageBlockMetaWrapper = _styledComponents.default.div``;
67
+ const ImageGridsWrapper = _styledComponents.default.div`
68
+ display: flex;
69
+ flex-wrap: wrap;
70
+ overflow: auto;
71
+ margin-top: 5px;
72
+ `;
73
+ const ImageGridWrapper = _styledComponents.default.div`
74
+ flex: 0 0 33.3333%;
75
+ cursor: pointer;
76
+ padding: 0 10px 10px;
77
+ `;
78
+ const ImageMetaGridsWrapper = _styledComponents.default.div`
79
+ display: flex;
80
+ flex-wrap: wrap;
81
+ overflow: auto;
82
+ `;
83
+ const ImageMetaGridWrapper = _styledComponents.default.div`
84
+ flex: 0 0 33.3333%;
85
+ cursor: pointer;
86
+ padding: 0 10px 10px;
87
+ `;
88
+ const Image = _styledComponents.default.img`
89
+ display: block;
90
+ width: 100%;
91
+ aspect-ratio: 2;
92
+ object-fit: cover;
93
+ `;
94
+ const Label = _styledComponents.default.label`
95
+ display: block;
96
+ margin: 10px 0;
97
+ font-weight: 600;
98
+ `;
99
+ const SeparationLine = _styledComponents.default.div`
100
+ border: #e1e5e9 1px solid;
101
+ margin-top: 10px;
102
+ margin-bottom: 10px;
103
+ `;
104
+ const ImageSelected = _styledComponents.default.div`
105
+ height: 1.4rem;
106
+ `;
107
+ const ErrorWrapper = _styledComponents.default.div`
108
+ & * {
109
+ margin: 0;
110
+ }
111
+ `;
112
+
113
+ function ImageGrids(props) {
114
+ const {
115
+ images,
116
+ selected,
117
+ onSelect
118
+ } = props;
119
+ return /*#__PURE__*/_react.default.createElement(ImageGridsWrapper, null, images.map(image => {
120
+ return /*#__PURE__*/_react.default.createElement(ImageGrid, {
121
+ key: image.id,
122
+ isSelected: selected === null || selected === void 0 ? void 0 : selected.includes(image),
123
+ onSelect: () => onSelect(image),
124
+ image: image
125
+ });
126
+ }));
127
+ }
128
+
129
+ function ImageGrid(props) {
130
+ var _image$resized;
131
+
132
+ const {
133
+ image,
134
+ onSelect,
135
+ isSelected
136
+ } = props;
137
+ return /*#__PURE__*/_react.default.createElement(ImageGridWrapper, {
138
+ key: image === null || image === void 0 ? void 0 : image.id,
139
+ onClick: () => onSelect(image)
140
+ }, /*#__PURE__*/_react.default.createElement(ImageSelected, null, isSelected ? /*#__PURE__*/_react.default.createElement("i", {
141
+ className: "fas fa-check-circle"
142
+ }) : null), /*#__PURE__*/_react.default.createElement(Image, {
143
+ src: image === null || image === void 0 ? void 0 : (_image$resized = image.resized) === null || _image$resized === void 0 ? void 0 : _image$resized.w800,
144
+ onError: e => {
145
+ var _image$imageFile;
146
+
147
+ return e.currentTarget.src = image === null || image === void 0 ? void 0 : (_image$imageFile = image.imageFile) === null || _image$imageFile === void 0 ? void 0 : _image$imageFile.url;
148
+ }
149
+ }));
150
+ }
151
+
152
+ function ImageMetaGrids(props) {
153
+ const {
154
+ imageMetas,
155
+ onChange,
156
+ enableCaption,
157
+ enableUrl
158
+ } = props;
159
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGridsWrapper, null, imageMetas.map(imageMeta => {
160
+ var _imageMeta$image;
161
+
162
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGrid, {
163
+ key: imageMeta === null || imageMeta === void 0 ? void 0 : (_imageMeta$image = imageMeta.image) === null || _imageMeta$image === void 0 ? void 0 : _imageMeta$image.id,
164
+ imageMeta: imageMeta,
165
+ enableCaption: enableCaption,
166
+ enableUrl: enableUrl,
167
+ onChange: onChange
168
+ });
169
+ }));
170
+ }
171
+
172
+ function ImageMetaGrid(props) {
173
+ var _image$resized2;
174
+
175
+ const {
176
+ imageMeta,
177
+ enableCaption,
178
+ enableUrl,
179
+ onChange
180
+ } = props;
181
+ const {
182
+ image,
183
+ desc,
184
+ url
185
+ } = imageMeta;
186
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGridWrapper, null, /*#__PURE__*/_react.default.createElement(Image, {
187
+ src: image === null || image === void 0 ? void 0 : (_image$resized2 = image.resized) === null || _image$resized2 === void 0 ? void 0 : _image$resized2.w800,
188
+ onError: e => {
189
+ var _image$imageFile2;
190
+
191
+ return e.currentTarget.src = image === null || image === void 0 ? void 0 : (_image$imageFile2 = image.imageFile) === null || _image$imageFile2 === void 0 ? void 0 : _image$imageFile2.url;
192
+ }
193
+ }), enableCaption && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
194
+ htmlFor: "caption"
195
+ }, "Image Caption:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
196
+ id: "caption",
197
+ type: "text",
198
+ placeholder: image === null || image === void 0 ? void 0 : image.name,
199
+ defaultValue: desc,
200
+ onChange: _.debounce(e => {
201
+ onChange({
202
+ image,
203
+ desc: e.target.value,
204
+ url
205
+ });
206
+ })
207
+ })), enableUrl && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
208
+ htmlFor: "url"
209
+ }, "Url:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
210
+ id: "url",
211
+ type: "text",
212
+ placeholder: "(Optional)",
213
+ defaultValue: url,
214
+ onChange: _.debounce(e => {
215
+ onChange({
216
+ image,
217
+ desc,
218
+ url: e.target.value
219
+ });
220
+ })
221
+ })));
222
+ }
223
+
224
+ function DelayInput(props) {
225
+ const {
226
+ delay,
227
+ onChange
228
+ } = props;
229
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, null, "Slideshow delay:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
230
+ type: "number",
231
+ placeholder: "\u8ACB\u8F38\u5165\u81EA\u52D5\u5207\u63DB\u79D2\u6578",
232
+ step: "0.5",
233
+ min: "1",
234
+ value: delay,
235
+ onChange: e => {
236
+ onChange(e.target.value);
237
+ }
238
+ }));
239
+ }
240
+
241
+ function ImageSelector(props) {
242
+ const [queryImages, {
243
+ loading,
244
+ error,
245
+ data: {
246
+ photos: images = [],
247
+ photosCount: imagesCount = 0
248
+ } = {}
249
+ }] = (0, _apollo.useLazyQuery)(imagesQuery, {
250
+ fetchPolicy: 'no-cache'
251
+ });
252
+ const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
253
+
254
+ const [searchText, setSearchText] = (0, _react.useState)('');
255
+ const [selected, setSelected] = (0, _react.useState)([]);
256
+ const [delay, setDelay] = (0, _react.useState)('5');
257
+ const [align, setAlign] = (0, _react.useState)(undefined);
258
+ const contentWrapperRef = (0, _react.useRef)();
259
+ const pageSize = 6;
260
+ const options = [{
261
+ value: undefined,
262
+ label: 'default',
263
+ isDisabled: false
264
+ }, {
265
+ value: 'left',
266
+ label: 'left',
267
+ isDisabled: false
268
+ }, {
269
+ value: 'right',
270
+ label: 'right',
271
+ isDisabled: false
272
+ }];
273
+ const {
274
+ enableMultiSelect = false,
275
+ enableCaption = false,
276
+ enableUrl = false,
277
+ enableAlignment = false,
278
+ enableDelay = false,
279
+ onChange
280
+ } = props;
281
+
282
+ const onSave = () => {
283
+ let adjustedDelay = +delay;
284
+ adjustedDelay = adjustedDelay < 1 ? 1 : adjustedDelay;
285
+ onChange(selected, align, adjustedDelay);
286
+ };
287
+
288
+ const onCancel = () => {
289
+ onChange([]);
290
+ };
291
+
292
+ const onSearchBoxChange = async searchInput => {
293
+ setSearchText(searchInput);
294
+ setCurrentPage(1);
295
+ };
296
+
297
+ const onDealyChange = delay => {
298
+ setDelay(delay);
299
+ };
300
+
301
+ const onAlignSelectChange = align => {
302
+ setAlign(align);
303
+ };
304
+
305
+ const onAlignSelectOpen = () => {
306
+ var _contentWrapperRef$cu;
307
+
308
+ const scrollWrapper = (_contentWrapperRef$cu = contentWrapperRef.current) === null || _contentWrapperRef$cu === void 0 ? void 0 : _contentWrapperRef$cu.parentElement;
309
+ scrollWrapper.scrollTop = scrollWrapper.scrollHeight;
310
+ };
311
+
312
+ const onImageMetaChange = imageEntityWithMeta => {
313
+ if (enableMultiSelect) {
314
+ const foundIndex = selected.findIndex(ele => {
315
+ var _ele$image, _imageEntityWithMeta$;
316
+
317
+ return (ele === null || ele === void 0 ? void 0 : (_ele$image = ele.image) === null || _ele$image === void 0 ? void 0 : _ele$image.id) === (imageEntityWithMeta === null || imageEntityWithMeta === void 0 ? void 0 : (_imageEntityWithMeta$ = imageEntityWithMeta.image) === null || _imageEntityWithMeta$ === void 0 ? void 0 : _imageEntityWithMeta$.id);
318
+ });
319
+
320
+ if (foundIndex !== -1) {
321
+ selected[foundIndex] = imageEntityWithMeta;
322
+ setSelected(selected);
323
+ }
324
+
325
+ return;
326
+ }
327
+
328
+ setSelected([imageEntityWithMeta]);
329
+ };
330
+
331
+ const onImagesGridSelect = imageEntity => {
332
+ setSelected(selected => {
333
+ const filterdSelected = selected.filter(ele => {
334
+ var _ele$image2;
335
+
336
+ return ((_ele$image2 = ele.image) === null || _ele$image2 === void 0 ? void 0 : _ele$image2.id) !== imageEntity.id;
337
+ }); // deselect the image
338
+
339
+ if (filterdSelected.length !== selected.length) {
340
+ return filterdSelected;
341
+ } // add new selected one
342
+
343
+
344
+ if (enableMultiSelect) {
345
+ return selected.concat([{
346
+ image: imageEntity,
347
+ desc: ''
348
+ }]);
349
+ } // single select
350
+
351
+
352
+ return [{
353
+ image: imageEntity,
354
+ desc: ''
355
+ }];
356
+ });
357
+ };
358
+
359
+ const selectedImages = selected.map(ele => {
360
+ return ele.image;
361
+ });
362
+ (0, _react.useEffect)(() => {
363
+ if (currentPage !== 0) {
364
+ queryImages({
365
+ variables: {
366
+ searchText: searchText,
367
+ skip: (currentPage - 1) * pageSize,
368
+ take: pageSize
369
+ }
370
+ });
371
+ }
372
+ }, [currentPage, searchText]);
373
+
374
+ let searchResult = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ImageGrids, {
375
+ images: images,
376
+ selected: selectedImages,
377
+ onSelect: onImagesGridSelect
378
+ }), /*#__PURE__*/_react.default.createElement(_pagination.Pagination, {
379
+ currentPage: currentPage,
380
+ total: imagesCount,
381
+ pageSize: pageSize,
382
+ onChange: pageIndex => {
383
+ setCurrentPage(pageIndex);
384
+ }
385
+ }));
386
+
387
+ if (loading) {
388
+ searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching...");
389
+ }
390
+
391
+ if (error) {
392
+ searchResult = /*#__PURE__*/_react.default.createElement(ErrorWrapper, null, /*#__PURE__*/_react.default.createElement("h3", null, "Errors occurs in the `images` query"), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Message:"), /*#__PURE__*/_react.default.createElement("div", null, error.message), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Stack:"), /*#__PURE__*/_react.default.createElement("div", null, error.stack), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Query:"), /*#__PURE__*/_react.default.createElement("pre", null, imagesQuery.loc.source.body)));
393
+ }
394
+
395
+ return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
396
+ isOpen: true
397
+ }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
398
+ title: "Select image",
399
+ actions: {
400
+ cancel: {
401
+ label: 'Cancel',
402
+ action: onCancel
403
+ },
404
+ confirm: {
405
+ label: 'Confirm',
406
+ action: onSave
407
+ }
408
+ }
409
+ }, /*#__PURE__*/_react.default.createElement("div", {
410
+ ref: contentWrapperRef
411
+ }, /*#__PURE__*/_react.default.createElement(ImageSearchBox, {
412
+ onChange: onSearchBoxChange
413
+ }), /*#__PURE__*/_react.default.createElement(ImageSelectionWrapper, null, /*#__PURE__*/_react.default.createElement("div", null, searchResult), !!selected.length && /*#__PURE__*/_react.default.createElement(SeparationLine, null), /*#__PURE__*/_react.default.createElement(ImageMetaGrids, {
414
+ imageMetas: selected,
415
+ onChange: onImageMetaChange,
416
+ enableCaption: enableCaption,
417
+ enableUrl: enableUrl
418
+ })), /*#__PURE__*/_react.default.createElement(ImageBlockMetaWrapper, null, (enableDelay || enableAlignment) && /*#__PURE__*/_react.default.createElement(SeparationLine, null), enableDelay && /*#__PURE__*/_react.default.createElement(DelayInput, {
419
+ delay: delay,
420
+ onChange: onDealyChange
421
+ }), enableAlignment && /*#__PURE__*/_react.default.createElement(_alignSelector.AlignSelector, {
422
+ align: align,
423
+ options: options,
424
+ onChange: onAlignSelectChange,
425
+ onOpen: onAlignSelectOpen
426
+ })))));
427
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Pagination = Pagination;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const PaginationWrapper = _styledComponents.default.div`
15
+ display: flex;
16
+ justify-content: end;
17
+ `;
18
+ const Arrows = _styledComponents.default.div`
19
+ display: flex;
20
+ `;
21
+ const ArrowButtonWrapper = _styledComponents.default.a`
22
+ color: #415269;
23
+ cursor: pointer;
24
+ ${({
25
+ disable
26
+ }) => {
27
+ if (disable) {
28
+ return `
29
+ pointer-events: none;
30
+ opacity: 0.65;
31
+ cursor: unset;
32
+ `;
33
+ }
34
+ }}
35
+ `;
36
+
37
+ function Pagination({
38
+ currentPage,
39
+ total,
40
+ pageSize,
41
+ onChange
42
+ }) {
43
+ const minPage = 1;
44
+ const limit = Math.ceil(total / pageSize);
45
+ const nextPage = currentPage + 1;
46
+ const prevPage = currentPage - 1; // Don't render the pagiantion component if the pageSize is greater than the total number of items in the list.
47
+
48
+ if (total <= pageSize) return null;
49
+ return /*#__PURE__*/_react.default.createElement(PaginationWrapper, null, /*#__PURE__*/_react.default.createElement("div", null, currentPage, " of ", limit, " pages"), /*#__PURE__*/_react.default.createElement(Arrows, null, /*#__PURE__*/_react.default.createElement(ArrowButtonWrapper, {
50
+ onClick: () => {
51
+ onChange(prevPage);
52
+ },
53
+ disable: prevPage < minPage
54
+ }, /*#__PURE__*/_react.default.createElement("svg", {
55
+ "aria-hidden": "true",
56
+ focusable: "false",
57
+ height: "24px",
58
+ width: "24px",
59
+ role: "img",
60
+ viewBox: "0 0 24 24",
61
+ xmlns: "http://www.w3.org/2000/svg",
62
+ className: "css-bztyua"
63
+ }, /*#__PURE__*/_react.default.createElement("polyline", {
64
+ points: "15 18 9 12 15 6"
65
+ }), ' ')), /*#__PURE__*/_react.default.createElement(ArrowButtonWrapper, {
66
+ onClick: () => {
67
+ onChange(nextPage);
68
+ },
69
+ disable: nextPage > limit
70
+ }, /*#__PURE__*/_react.default.createElement("svg", {
71
+ "aria-hidden": "true",
72
+ focusable: "false",
73
+ height: "24px",
74
+ width: "24px",
75
+ role: "img",
76
+ viewBox: "0 0 24 24",
77
+ xmlns: "http://www.w3.org/2000/svg",
78
+ className: "css-bztyua"
79
+ }, /*#__PURE__*/_react.default.createElement("polyline", {
80
+ points: "9 18 15 12 9 6"
81
+ })))));
82
+ }