@mirrormedia/lilith-draft-editor 1.1.0-alpha.3 → 1.1.0-alpha.31

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 (79) hide show
  1. package/lib/draft-js/buttons/annotation.js +22 -0
  2. package/lib/draft-js/buttons/audio.js +16 -3
  3. package/lib/draft-js/buttons/background-color.js +26 -0
  4. package/lib/draft-js/buttons/background-image.js +32 -13
  5. package/lib/draft-js/buttons/background-video.js +32 -13
  6. package/lib/draft-js/buttons/color-box.js +21 -5
  7. package/lib/draft-js/buttons/divider.js +12 -3
  8. package/lib/draft-js/buttons/embedded-code.js +16 -5
  9. package/lib/draft-js/buttons/enlarge.js +3 -0
  10. package/lib/draft-js/buttons/font-color.js +26 -0
  11. package/lib/draft-js/buttons/image.js +18 -7
  12. package/lib/draft-js/buttons/info-box.js +21 -5
  13. package/lib/draft-js/buttons/link.js +68 -22
  14. package/lib/draft-js/buttons/media.js +16 -3
  15. package/lib/draft-js/buttons/related-post.js +14 -3
  16. package/lib/draft-js/buttons/selector/align-selector.js +11 -2
  17. package/lib/draft-js/buttons/selector/audio-selector.js +33 -5
  18. package/lib/draft-js/buttons/selector/image-selector.js +64 -16
  19. package/lib/draft-js/buttons/selector/pagination.js +6 -2
  20. package/lib/draft-js/buttons/selector/post-selector.js +39 -6
  21. package/lib/draft-js/buttons/selector/search-box.js +9 -0
  22. package/lib/draft-js/buttons/selector/video-selector.js +33 -4
  23. package/lib/draft-js/buttons/side-index.js +31 -15
  24. package/lib/draft-js/buttons/slideshow.js +16 -7
  25. package/lib/draft-js/buttons/table.js +11 -5
  26. package/lib/draft-js/buttons/text-align.js +14 -0
  27. package/lib/draft-js/buttons/video.js +19 -5
  28. package/lib/draft-js/buttons/youtube.js +147 -0
  29. package/lib/draft-js/const.js +2 -0
  30. package/lib/draft-js/draft-converter/api-data-instance.js +14 -0
  31. package/lib/draft-js/draft-converter/atomic-block-processor.js +42 -12
  32. package/lib/draft-js/draft-converter/entities.js +3 -1
  33. package/lib/draft-js/draft-converter/index.js +29 -10
  34. package/lib/draft-js/draft-converter/inline-styles-processor.js +55 -22
  35. package/lib/draft-js/modifier.js +13 -5
  36. package/lib/draft-js/util.js +32 -0
  37. package/lib/index.js +4 -0
  38. package/lib/website/mirrormedia/block-renderer/background-image-block.js +14 -2
  39. package/lib/website/mirrormedia/block-renderer/background-video-block.js +14 -2
  40. package/lib/website/mirrormedia/block-renderer/color-box-block.js +14 -2
  41. package/lib/website/mirrormedia/block-renderer/embedded-code-block.js +12 -3
  42. package/lib/website/mirrormedia/block-renderer/image-block.js +108 -0
  43. package/lib/website/mirrormedia/block-renderer/info-box-block.js +14 -2
  44. package/lib/website/mirrormedia/block-renderer/side-index-block.js +13 -2
  45. package/lib/website/mirrormedia/block-renderer/slideshow-block.js +93 -7
  46. package/lib/website/mirrormedia/block-renderer/table-block.js +62 -28
  47. package/lib/website/mirrormedia/block-renderer-fn.js +48 -5
  48. package/lib/website/mirrormedia/draft-editor.js +138 -14
  49. package/lib/website/mirrormedia/entity-decorator.js +12 -1
  50. package/lib/website/mirrormedia/index.js +3 -0
  51. package/lib/website/mirrormedia/selector/align-selector.js +11 -2
  52. package/lib/website/mirrormedia/selector/audio-selector.js +34 -5
  53. package/lib/website/mirrormedia/selector/image-selector.js +75 -18
  54. package/lib/website/mirrormedia/selector/pagination.js +6 -2
  55. package/lib/website/mirrormedia/selector/post-selector.js +40 -6
  56. package/lib/website/mirrormedia/selector/search-box.js +9 -0
  57. package/lib/website/mirrormedia/selector/video-selector.js +36 -7
  58. package/lib/website/mirrormedia/shared-style/index.js +17 -0
  59. package/lib/website/mirrormedia/theme/index.js +28 -0
  60. package/lib/website/readr/block-renderer/background-image-block.js +66 -6
  61. package/lib/website/readr/block-renderer/background-video-block.js +76 -6
  62. package/lib/website/readr/block-renderer/color-box-block.js +14 -2
  63. package/lib/website/readr/block-renderer/image-block.js +106 -0
  64. package/lib/website/readr/block-renderer/info-box-block.js +14 -2
  65. package/lib/website/readr/block-renderer/side-index-block.js +13 -2
  66. package/lib/website/readr/block-renderer/table-block.js +62 -28
  67. package/lib/website/readr/block-renderer-fn.js +32 -3
  68. package/lib/website/readr/draft-editor.js +112 -12
  69. package/lib/website/readr/entity-decorator.js +4 -0
  70. package/lib/website/readr/index.js +3 -0
  71. package/lib/website/readr/selector/align-selector.js +11 -2
  72. package/lib/website/readr/selector/audio-selector.js +34 -17
  73. package/lib/website/readr/selector/image-selector.js +62 -16
  74. package/lib/website/readr/selector/pagination.js +6 -2
  75. package/lib/website/readr/selector/post-selector.js +40 -13
  76. package/lib/website/readr/selector/search-box.js +9 -0
  77. package/lib/website/readr/selector/video-selector.js +33 -4
  78. package/lib/website/readr/theme/index.js +39 -0
  79. package/package.json +8 -8
@@ -4,15 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AudioSelector = AudioSelector;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  var _modals = require("@keystone-ui/modals");
13
+
10
14
  var _apollo = require("@keystone-6/core/admin-ui/apollo");
15
+
11
16
  var _searchBox = require("./search-box");
17
+
12
18
  var _pagination = require("./pagination");
19
+
13
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
14
22
  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); }
23
+
15
24
  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; }
25
+
16
26
  const AudioSearchBox = (0, _styledComponents.default)(_searchBox.SearchBox)`
17
27
  margin-top: 10px;
18
28
  `;
@@ -59,6 +69,7 @@ const ErrorWrapper = _styledComponents.default.div`
59
69
  margin: 0;
60
70
  }
61
71
  `;
72
+
62
73
  function AudiosGrids(props) {
63
74
  const {
64
75
  audios,
@@ -74,14 +85,15 @@ function AudiosGrids(props) {
74
85
  });
75
86
  }));
76
87
  }
88
+
77
89
  function AudioGrid(props) {
78
90
  var _audio$file;
91
+
79
92
  const {
80
93
  audio,
81
94
  onSelect,
82
95
  isSelected
83
96
  } = props;
84
- console.log('audio', audio);
85
97
  return /*#__PURE__*/_react.default.createElement(AudioGridWrapper, {
86
98
  key: audio === null || audio === void 0 ? void 0 : audio.id,
87
99
  onClick: () => onSelect(audio)
@@ -95,20 +107,24 @@ function AudioGrid(props) {
95
107
  src: audio === null || audio === void 0 ? void 0 : (_audio$file = audio.file) === null || _audio$file === void 0 ? void 0 : _audio$file.url
96
108
  })), /*#__PURE__*/_react.default.createElement(AudioName, null, audio === null || audio === void 0 ? void 0 : audio.name));
97
109
  }
110
+
98
111
  function AudioMetaGrids(props) {
99
112
  const {
100
113
  audioMetas
101
114
  } = props;
102
115
  return /*#__PURE__*/_react.default.createElement(AudioMetaGridsWrapper, null, audioMetas.map(audioMeta => {
103
116
  var _audioMeta$audio;
117
+
104
118
  return /*#__PURE__*/_react.default.createElement(AudioMetaGrid, {
105
119
  key: audioMeta === null || audioMeta === void 0 ? void 0 : (_audioMeta$audio = audioMeta.audio) === null || _audioMeta$audio === void 0 ? void 0 : _audioMeta$audio.id,
106
120
  audioMeta: audioMeta
107
121
  });
108
122
  }));
109
123
  }
124
+
110
125
  function AudioMetaGrid(props) {
111
126
  var _audio$file2;
127
+
112
128
  const {
113
129
  audioMeta
114
130
  } = props;
@@ -123,6 +139,7 @@ function AudioMetaGrid(props) {
123
139
  src: audio === null || audio === void 0 ? void 0 : (_audio$file2 = audio.file) === null || _audio$file2 === void 0 ? void 0 : _audio$file2.url
124
140
  })), /*#__PURE__*/_react.default.createElement(AudioName, null, audio === null || audio === void 0 ? void 0 : audio.name));
125
141
  }
142
+
126
143
  const AudiosQuery = (0, _apollo.gql)`
127
144
  query Audios($searchText: String!, $take: Int, $skip: Int) {
128
145
  audioFilesCount(where: { name: { contains: $searchText } })
@@ -152,6 +169,7 @@ const AudiosQuery = (0, _apollo.gql)`
152
169
  }
153
170
  }
154
171
  `;
172
+
155
173
  function AudioSelector(props) {
156
174
  const [queryAudios, {
157
175
  loading,
@@ -164,40 +182,46 @@ function AudioSelector(props) {
164
182
  fetchPolicy: 'no-cache'
165
183
  });
166
184
  const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
185
+
167
186
  const [searchText, setSearchText] = (0, _react.useState)('');
168
187
  const [selected, setSelected] = (0, _react.useState)([]);
169
188
  const pageSize = 6;
170
189
  const {
171
190
  onChange
172
191
  } = props;
192
+
173
193
  const onSave = () => {
174
194
  onChange(selected);
175
195
  };
196
+
176
197
  const onCancel = () => {
177
198
  onChange([]);
178
199
  };
200
+
179
201
  const onSearchBoxChange = async searchInput => {
180
202
  setSearchText(searchInput);
181
203
  setCurrentPage(1);
182
204
  };
205
+
183
206
  const onAudiosGridSelect = audioEntity => {
184
207
  setSelected(selected => {
185
208
  const filterdSelected = selected.filter(ele => {
186
209
  var _ele$audio;
210
+
187
211
  return ((_ele$audio = ele.audio) === null || _ele$audio === void 0 ? void 0 : _ele$audio.id) !== audioEntity.id;
188
- });
212
+ }); // deselect the audio
189
213
 
190
- // deselect the audio
191
214
  if (filterdSelected.length !== selected.length) {
192
215
  return filterdSelected;
193
- }
216
+ } // single select
217
+
194
218
 
195
- // single select
196
219
  return [{
197
220
  audio: audioEntity
198
221
  }];
199
222
  });
200
223
  };
224
+
201
225
  const selectedAudios = selected.map(ele => {
202
226
  return ele.audio;
203
227
  });
@@ -212,6 +236,7 @@ function AudioSelector(props) {
212
236
  });
213
237
  }
214
238
  }, [currentPage, searchText]);
239
+
215
240
  let searchResult = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(AudiosGrids, {
216
241
  audios: audioFiles,
217
242
  selected: selectedAudios,
@@ -224,12 +249,15 @@ function AudioSelector(props) {
224
249
  setCurrentPage(pageIndex);
225
250
  }
226
251
  }));
252
+
227
253
  if (loading) {
228
254
  searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching...");
229
255
  }
256
+
230
257
  if (error) {
231
258
  searchResult = /*#__PURE__*/_react.default.createElement(ErrorWrapper, null, /*#__PURE__*/_react.default.createElement("h3", null, "Errors occurs in the `audios` 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, AudiosQuery.loc.source.body)));
232
259
  }
260
+
233
261
  return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
234
262
  isOpen: true
235
263
  }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
@@ -4,18 +4,31 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ImageSelector = ImageSelector;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _debounce = _interopRequireDefault(require("lodash/debounce"));
11
+
9
12
  var _styledComponents = _interopRequireDefault(require("styled-components"));
13
+
10
14
  var _fields = require("@keystone-ui/fields");
15
+
11
16
  var _modals = require("@keystone-ui/modals");
17
+
12
18
  var _apollo = require("@keystone-6/core/admin-ui/apollo");
19
+
13
20
  var _alignSelector = require("./align-selector");
21
+
14
22
  var _searchBox = require("./search-box");
23
+
15
24
  var _pagination = require("./pagination");
25
+
16
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
17
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
+
18
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
+
19
32
  const _ = {
20
33
  debounce: _debounce.default
21
34
  };
@@ -72,6 +85,7 @@ const ErrorWrapper = _styledComponents.default.div`
72
85
  margin: 0;
73
86
  }
74
87
  `;
88
+
75
89
  function ImageGrids(props) {
76
90
  const {
77
91
  images,
@@ -87,8 +101,10 @@ function ImageGrids(props) {
87
101
  });
88
102
  }));
89
103
  }
104
+
90
105
  function ImageGrid(props) {
91
106
  var _image$resized;
107
+
92
108
  const {
93
109
  image,
94
110
  onSelect,
@@ -103,10 +119,12 @@ function ImageGrid(props) {
103
119
  src: image === null || image === void 0 ? void 0 : (_image$resized = image.resized) === null || _image$resized === void 0 ? void 0 : _image$resized.w800,
104
120
  onError: e => {
105
121
  var _image$imageFile;
122
+
106
123
  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;
107
124
  }
108
125
  }));
109
126
  }
127
+
110
128
  function ImageMetaGrids(props) {
111
129
  const {
112
130
  imageMetas,
@@ -116,6 +134,7 @@ function ImageMetaGrids(props) {
116
134
  } = props;
117
135
  return /*#__PURE__*/_react.default.createElement(ImageMetaGridsWrapper, null, imageMetas.map(imageMeta => {
118
136
  var _imageMeta$image;
137
+
119
138
  return /*#__PURE__*/_react.default.createElement(ImageMetaGrid, {
120
139
  key: imageMeta === null || imageMeta === void 0 ? void 0 : (_imageMeta$image = imageMeta.image) === null || _imageMeta$image === void 0 ? void 0 : _imageMeta$image.id,
121
140
  imageMeta: imageMeta,
@@ -125,8 +144,10 @@ function ImageMetaGrids(props) {
125
144
  });
126
145
  }));
127
146
  }
147
+
128
148
  function ImageMetaGrid(props) {
129
149
  var _image$resized2;
150
+
130
151
  const {
131
152
  imageMeta,
132
153
  enableCaption,
@@ -142,6 +163,7 @@ function ImageMetaGrid(props) {
142
163
  src: image === null || image === void 0 ? void 0 : (_image$resized2 = image.resized) === null || _image$resized2 === void 0 ? void 0 : _image$resized2.w800,
143
164
  onError: e => {
144
165
  var _image$imageFile2;
166
+
145
167
  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;
146
168
  }
147
169
  }), enableCaption && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
@@ -174,6 +196,7 @@ function ImageMetaGrid(props) {
174
196
  })
175
197
  })));
176
198
  }
199
+
177
200
  function DelayInput(props) {
178
201
  const {
179
202
  delay,
@@ -190,6 +213,7 @@ function DelayInput(props) {
190
213
  }
191
214
  }));
192
215
  }
216
+
193
217
  const imagesQuery = (0, _apollo.gql)`
194
218
  query Photos($searchText: String!, $take: Int, $skip: Int) {
195
219
  photosCount(where: { name: { contains: $searchText } })
@@ -202,6 +226,8 @@ const imagesQuery = (0, _apollo.gql)`
202
226
  name
203
227
  imageFile {
204
228
  url
229
+ width
230
+ height
205
231
  }
206
232
  resized {
207
233
  original
@@ -214,7 +240,18 @@ const imagesQuery = (0, _apollo.gql)`
214
240
  }
215
241
  }
216
242
  `;
243
+
217
244
  function ImageSelector(props) {
245
+ const {
246
+ enableMultiSelect = false,
247
+ enableCaption = false,
248
+ enableUrl = false,
249
+ enableAlignment = false,
250
+ enableDelay = false,
251
+ onChange,
252
+ initialSelected = [],
253
+ initialAlign
254
+ } = props;
218
255
  const [queryImages, {
219
256
  loading,
220
257
  error,
@@ -226,10 +263,11 @@ function ImageSelector(props) {
226
263
  fetchPolicy: 'no-cache'
227
264
  });
228
265
  const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
266
+
229
267
  const [searchText, setSearchText] = (0, _react.useState)('');
230
- const [selected, setSelected] = (0, _react.useState)([]);
268
+ const [selected, setSelected] = (0, _react.useState)(initialSelected);
231
269
  const [delay, setDelay] = (0, _react.useState)('5');
232
- const [align, setAlign] = (0, _react.useState)(undefined);
270
+ const [align, setAlign] = (0, _react.useState)(initialAlign);
233
271
  const contentWrapperRef = (0, _react.useRef)();
234
272
  const pageSize = 6;
235
273
  const options = [{
@@ -245,78 +283,84 @@ function ImageSelector(props) {
245
283
  label: 'right',
246
284
  isDisabled: false
247
285
  }];
248
- const {
249
- enableMultiSelect = false,
250
- enableCaption = false,
251
- enableUrl = false,
252
- enableAlignment = false,
253
- enableDelay = false,
254
- onChange
255
- } = props;
286
+
256
287
  const onSave = () => {
257
288
  let adjustedDelay = +delay;
258
289
  adjustedDelay = adjustedDelay < 1 ? 1 : adjustedDelay;
259
290
  onChange(selected, align, adjustedDelay);
260
291
  };
292
+
261
293
  const onCancel = () => {
262
294
  onChange([]);
263
295
  };
296
+
264
297
  const onSearchBoxChange = async searchInput => {
265
298
  setSearchText(searchInput);
266
299
  setCurrentPage(1);
267
300
  };
301
+
268
302
  const onDealyChange = delay => {
269
303
  setDelay(delay);
270
304
  };
305
+
271
306
  const onAlignSelectChange = align => {
272
307
  setAlign(align);
273
308
  };
309
+
274
310
  const onAlignSelectOpen = () => {
275
311
  var _contentWrapperRef$cu;
312
+
276
313
  const scrollWrapper = (_contentWrapperRef$cu = contentWrapperRef.current) === null || _contentWrapperRef$cu === void 0 ? void 0 : _contentWrapperRef$cu.parentElement;
277
314
  scrollWrapper.scrollTop = scrollWrapper.scrollHeight;
278
315
  };
316
+
279
317
  const onImageMetaChange = imageEntityWithMeta => {
280
318
  if (enableMultiSelect) {
281
319
  const foundIndex = selected.findIndex(ele => {
282
320
  var _ele$image, _imageEntityWithMeta$;
321
+
283
322
  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);
284
323
  });
324
+
285
325
  if (foundIndex !== -1) {
286
326
  selected[foundIndex] = imageEntityWithMeta;
287
327
  setSelected(selected);
288
328
  }
329
+
289
330
  return;
290
331
  }
332
+
291
333
  setSelected([imageEntityWithMeta]);
292
334
  };
335
+
293
336
  const onImagesGridSelect = imageEntity => {
294
337
  setSelected(selected => {
295
338
  const filterdSelected = selected.filter(ele => {
296
339
  var _ele$image2;
340
+
297
341
  return ((_ele$image2 = ele.image) === null || _ele$image2 === void 0 ? void 0 : _ele$image2.id) !== imageEntity.id;
298
- });
342
+ }); // deselect the image
299
343
 
300
- // deselect the image
301
344
  if (filterdSelected.length !== selected.length) {
302
345
  return filterdSelected;
303
- }
346
+ } // add new selected one
347
+
304
348
 
305
- // add new selected one
306
349
  if (enableMultiSelect) {
307
350
  return selected.concat([{
308
351
  image: imageEntity,
309
352
  desc: ''
310
353
  }]);
311
- }
354
+ } // single select
355
+
312
356
 
313
- // single select
314
357
  return [{
315
358
  image: imageEntity,
316
359
  desc: ''
317
360
  }];
318
361
  });
319
362
  };
363
+
320
364
  const selectedImages = selected.map(ele => {
321
365
  return ele.image;
322
366
  });
@@ -331,6 +375,7 @@ function ImageSelector(props) {
331
375
  });
332
376
  }
333
377
  }, [currentPage, searchText]);
378
+
334
379
  let searchResult = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ImageGrids, {
335
380
  images: images,
336
381
  selected: selectedImages,
@@ -343,12 +388,15 @@ function ImageSelector(props) {
343
388
  setCurrentPage(pageIndex);
344
389
  }
345
390
  }));
391
+
346
392
  if (loading) {
347
393
  searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching...");
348
394
  }
395
+
349
396
  if (error) {
350
397
  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)));
351
398
  }
399
+
352
400
  return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
353
401
  isOpen: true
354
402
  }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
@@ -4,9 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Pagination = Pagination;
7
+
7
8
  var _react = _interopRequireDefault(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
10
14
  const PaginationWrapper = _styledComponents.default.div`
11
15
  display: flex;
12
16
  justify-content: end;
@@ -29,6 +33,7 @@ const ArrowButtonWrapper = _styledComponents.default.a`
29
33
  }
30
34
  }}
31
35
  `;
36
+
32
37
  function Pagination({
33
38
  currentPage,
34
39
  total,
@@ -38,9 +43,8 @@ function Pagination({
38
43
  const minPage = 1;
39
44
  const limit = Math.ceil(total / pageSize);
40
45
  const nextPage = currentPage + 1;
41
- const prevPage = 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.
42
47
 
43
- // Don't render the pagiantion component if the pageSize is greater than the total number of items in the list.
44
48
  if (total <= pageSize) return null;
45
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, {
46
50
  onClick: () => {
@@ -4,15 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.PostSelector = PostSelector;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  var _modals = require("@keystone-ui/modals");
13
+
10
14
  var _apollo = require("@keystone-6/core/admin-ui/apollo");
15
+
11
16
  var _searchBox = require("./search-box");
17
+
12
18
  var _pagination = require("./pagination");
19
+
13
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
14
22
  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); }
23
+
15
24
  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; }
25
+
16
26
  const postsQuery = (0, _apollo.gql)`
17
27
  query Posts($searchText: String!, $take: Int, $skip: Int) {
18
28
  postsCount(where: { name: { contains: $searchText } })
@@ -102,6 +112,7 @@ const ErrorWrapper = _styledComponents.default.div`
102
112
  margin: 0;
103
113
  }
104
114
  `;
115
+
105
116
  function PostGrids(props) {
106
117
  const {
107
118
  posts,
@@ -117,8 +128,10 @@ function PostGrids(props) {
117
128
  });
118
129
  }));
119
130
  }
131
+
120
132
  function PostGrid(props) {
121
133
  var _post$heroImage, _post$heroImage$resiz;
134
+
122
135
  const {
123
136
  post,
124
137
  onSelect,
@@ -133,24 +146,29 @@ function PostGrid(props) {
133
146
  src: (_post$heroImage = post.heroImage) === null || _post$heroImage === void 0 ? void 0 : (_post$heroImage$resiz = _post$heroImage.resized) === null || _post$heroImage$resiz === void 0 ? void 0 : _post$heroImage$resiz.original,
134
147
  onError: e => {
135
148
  var _post$heroImage2, _post$heroImage2$imag;
149
+
136
150
  return e.currentTarget.src = (_post$heroImage2 = post.heroImage) === null || _post$heroImage2 === void 0 ? void 0 : (_post$heroImage2$imag = _post$heroImage2.imageFile) === null || _post$heroImage2$imag === void 0 ? void 0 : _post$heroImage2$imag.url;
137
151
  }
138
152
  }), /*#__PURE__*/_react.default.createElement(PostTitle, null, post.name)));
139
153
  }
154
+
140
155
  function PostMetaGrids(props) {
141
156
  const {
142
157
  postMetas
143
158
  } = props;
144
159
  return /*#__PURE__*/_react.default.createElement(PostMetaGridsWrapper, null, postMetas.map(postMetas => {
145
160
  var _postMetas$post;
161
+
146
162
  return /*#__PURE__*/_react.default.createElement(PostMetaGrid, {
147
163
  key: postMetas === null || postMetas === void 0 ? void 0 : (_postMetas$post = postMetas.post) === null || _postMetas$post === void 0 ? void 0 : _postMetas$post.id,
148
164
  postMeta: postMetas
149
165
  });
150
166
  }));
151
167
  }
168
+
152
169
  function PostMetaGrid(props) {
153
170
  var _post$heroImage3, _post$heroImage3$resi;
171
+
154
172
  const {
155
173
  postMeta
156
174
  } = props;
@@ -161,10 +179,12 @@ function PostMetaGrid(props) {
161
179
  src: post === null || post === void 0 ? void 0 : (_post$heroImage3 = post.heroImage) === null || _post$heroImage3 === void 0 ? void 0 : (_post$heroImage3$resi = _post$heroImage3.resized) === null || _post$heroImage3$resi === void 0 ? void 0 : _post$heroImage3$resi.original,
162
180
  onError: e => {
163
181
  var _post$heroImage4, _post$heroImage4$imag;
182
+
164
183
  return e.currentTarget.src = post === null || post === void 0 ? void 0 : (_post$heroImage4 = post.heroImage) === null || _post$heroImage4 === void 0 ? void 0 : (_post$heroImage4$imag = _post$heroImage4.imageFile) === null || _post$heroImage4$imag === void 0 ? void 0 : _post$heroImage4$imag.url;
165
184
  }
166
185
  }), /*#__PURE__*/_react.default.createElement(PostTitle, null, post === null || post === void 0 ? void 0 : post.name)));
167
186
  }
187
+
168
188
  function PostSelector(props) {
169
189
  const [queryPosts, {
170
190
  loading,
@@ -177,6 +197,7 @@ function PostSelector(props) {
177
197
  fetchPolicy: 'no-cache'
178
198
  });
179
199
  const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
200
+
180
201
  const [searchText, setSearchText] = (0, _react.useState)('');
181
202
  const [selected, setSelected] = (0, _react.useState)([]);
182
203
  const [showErrorHint, setShowErrorHint] = (0, _react.useState)(false);
@@ -187,49 +208,57 @@ function PostSelector(props) {
187
208
  minSelectCount = 1,
188
209
  maxSelectCount = 3
189
210
  } = props;
211
+
190
212
  const onSave = () => {
191
213
  if (enableMultiSelect && minSelectCount && selected.length < minSelectCount) {
192
214
  setShowErrorHint(true);
193
215
  return;
194
216
  }
217
+
195
218
  onChange(selected);
196
219
  };
220
+
197
221
  const onCancel = () => {
198
222
  onChange([]);
199
223
  };
224
+
200
225
  const onSearchBoxChange = async searchInput => {
201
226
  setSearchText(searchInput);
202
227
  setCurrentPage(1);
203
228
  };
229
+
204
230
  const onPostsGridSelect = postEntity => {
205
231
  setSelected(selected => {
206
232
  const filterdSelected = selected.filter(ele => {
207
233
  var _ele$post;
234
+
208
235
  return ((_ele$post = ele.post) === null || _ele$post === void 0 ? void 0 : _ele$post.id) !== postEntity.id;
209
- });
236
+ }); // deselect the post
210
237
 
211
- // deselect the post
212
238
  if (filterdSelected.length !== selected.length) {
213
239
  return filterdSelected;
214
- }
240
+ } // add new selected one and check shrink the array if there is a limit
241
+
215
242
 
216
- // add new selected one and check shrink the array if there is a limit
217
243
  if (enableMultiSelect) {
218
244
  let newSelected = selected.concat([{
219
245
  post: postEntity
220
246
  }]);
247
+
221
248
  if (maxSelectCount && newSelected.length >= maxSelectCount) {
222
249
  newSelected = newSelected.slice(-maxSelectCount);
223
250
  }
251
+
224
252
  return newSelected;
225
- }
253
+ } // single select
254
+
226
255
 
227
- // single select
228
256
  return [{
229
257
  post: postEntity
230
258
  }];
231
259
  });
232
260
  };
261
+
233
262
  const selectedPosts = selected.map(ele => {
234
263
  return ele.post;
235
264
  });
@@ -244,6 +273,7 @@ function PostSelector(props) {
244
273
  });
245
274
  }
246
275
  }, [currentPage, searchText]);
276
+
247
277
  let searchResult = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(PostGrids, {
248
278
  posts: posts,
249
279
  selected: selectedPosts,
@@ -256,12 +286,15 @@ function PostSelector(props) {
256
286
  setCurrentPage(pageIndex);
257
287
  }
258
288
  }));
289
+
259
290
  if (loading) {
260
291
  searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching...");
261
292
  }
293
+
262
294
  if (error) {
263
295
  searchResult = /*#__PURE__*/_react.default.createElement(ErrorWrapper, null, /*#__PURE__*/_react.default.createElement("h3", null, "Errors occurs in the `posts` 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, postsQuery.loc.source.body)));
264
296
  }
297
+
265
298
  return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
266
299
  isOpen: true
267
300
  }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
@@ -4,16 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SearchBox = SearchBox;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  var _button = require("@keystone-ui/button");
13
+
10
14
  var _fields = require("@keystone-ui/fields");
15
+
11
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
12
18
  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); }
19
+
13
20
  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; }
21
+
14
22
  const SearchBoxWrapper = _styledComponents.default.div`
15
23
  display: flex;
16
24
  `;
25
+
17
26
  function SearchBox(props) {
18
27
  const {
19
28
  onChange,