@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,428 @@
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 _ = {
33
+ debounce: _debounce.default
34
+ };
35
+ const ImageSearchBox = (0, _styledComponents.default)(_searchBox.SearchBox)`
36
+ margin-top: 10px;
37
+ `;
38
+ const ImageSelectionWrapper = _styledComponents.default.div`
39
+ overflow: auto;
40
+ margin-top: 10px;
41
+ `;
42
+ const ImageBlockMetaWrapper = _styledComponents.default.div``;
43
+ const ImageGridsWrapper = _styledComponents.default.div`
44
+ display: flex;
45
+ flex-wrap: wrap;
46
+ overflow: auto;
47
+ margin-top: 5px;
48
+ `;
49
+ const ImageGridWrapper = _styledComponents.default.div`
50
+ flex: 0 0 33.3333%;
51
+ cursor: pointer;
52
+ padding: 0 10px 10px;
53
+ `;
54
+ const ImageMetaGridsWrapper = _styledComponents.default.div`
55
+ display: flex;
56
+ flex-wrap: wrap;
57
+ overflow: auto;
58
+ `;
59
+ const ImageMetaGridWrapper = _styledComponents.default.div`
60
+ flex: 0 0 33.3333%;
61
+ cursor: pointer;
62
+ padding: 0 10px 10px;
63
+ `;
64
+ const Image = _styledComponents.default.img`
65
+ display: block;
66
+ width: 100%;
67
+ aspect-ratio: 2;
68
+ object-fit: cover;
69
+ `;
70
+ const Label = _styledComponents.default.label`
71
+ display: block;
72
+ margin: 10px 0;
73
+ font-weight: 600;
74
+ `;
75
+ const SeparationLine = _styledComponents.default.div`
76
+ border: #e1e5e9 1px solid;
77
+ margin-top: 10px;
78
+ margin-bottom: 10px;
79
+ `;
80
+ const ImageSelected = _styledComponents.default.div`
81
+ height: 1.4rem;
82
+ `;
83
+ const ErrorWrapper = _styledComponents.default.div`
84
+ & * {
85
+ margin: 0;
86
+ }
87
+ `;
88
+
89
+ function ImageGrids(props) {
90
+ const {
91
+ images,
92
+ selected,
93
+ onSelect
94
+ } = props;
95
+ return /*#__PURE__*/_react.default.createElement(ImageGridsWrapper, null, images.map(image => {
96
+ return /*#__PURE__*/_react.default.createElement(ImageGrid, {
97
+ key: image.id,
98
+ isSelected: selected === null || selected === void 0 ? void 0 : selected.includes(image),
99
+ onSelect: () => onSelect(image),
100
+ image: image
101
+ });
102
+ }));
103
+ }
104
+
105
+ function ImageGrid(props) {
106
+ var _image$resized;
107
+
108
+ const {
109
+ image,
110
+ onSelect,
111
+ isSelected
112
+ } = props;
113
+ return /*#__PURE__*/_react.default.createElement(ImageGridWrapper, {
114
+ key: image === null || image === void 0 ? void 0 : image.id,
115
+ onClick: () => onSelect(image)
116
+ }, /*#__PURE__*/_react.default.createElement(ImageSelected, null, isSelected ? /*#__PURE__*/_react.default.createElement("i", {
117
+ className: "fas fa-check-circle"
118
+ }) : null), /*#__PURE__*/_react.default.createElement(Image, {
119
+ src: image === null || image === void 0 ? void 0 : (_image$resized = image.resized) === null || _image$resized === void 0 ? void 0 : _image$resized.w800,
120
+ onError: e => {
121
+ var _image$imageFile;
122
+
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;
124
+ }
125
+ }));
126
+ }
127
+
128
+ function ImageMetaGrids(props) {
129
+ const {
130
+ imageMetas,
131
+ onChange,
132
+ enableCaption,
133
+ enableUrl
134
+ } = props;
135
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGridsWrapper, null, imageMetas.map(imageMeta => {
136
+ var _imageMeta$image;
137
+
138
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGrid, {
139
+ key: imageMeta === null || imageMeta === void 0 ? void 0 : (_imageMeta$image = imageMeta.image) === null || _imageMeta$image === void 0 ? void 0 : _imageMeta$image.id,
140
+ imageMeta: imageMeta,
141
+ enableCaption: enableCaption,
142
+ enableUrl: enableUrl,
143
+ onChange: onChange
144
+ });
145
+ }));
146
+ }
147
+
148
+ function ImageMetaGrid(props) {
149
+ var _image$resized2;
150
+
151
+ const {
152
+ imageMeta,
153
+ enableCaption,
154
+ enableUrl,
155
+ onChange
156
+ } = props;
157
+ const {
158
+ image,
159
+ desc,
160
+ url
161
+ } = imageMeta;
162
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGridWrapper, null, /*#__PURE__*/_react.default.createElement(Image, {
163
+ src: image === null || image === void 0 ? void 0 : (_image$resized2 = image.resized) === null || _image$resized2 === void 0 ? void 0 : _image$resized2.w800,
164
+ onError: e => {
165
+ var _image$imageFile2;
166
+
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;
168
+ }
169
+ }), enableCaption && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
170
+ htmlFor: "caption"
171
+ }, "Image Caption:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
172
+ id: "caption",
173
+ type: "text",
174
+ placeholder: image === null || image === void 0 ? void 0 : image.name,
175
+ defaultValue: desc,
176
+ onChange: _.debounce(e => {
177
+ onChange({
178
+ image,
179
+ desc: e.target.value,
180
+ url
181
+ });
182
+ })
183
+ })), enableUrl && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
184
+ htmlFor: "url"
185
+ }, "Url:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
186
+ id: "url",
187
+ type: "text",
188
+ placeholder: "(Optional)",
189
+ defaultValue: url,
190
+ onChange: _.debounce(e => {
191
+ onChange({
192
+ image,
193
+ desc,
194
+ url: e.target.value
195
+ });
196
+ })
197
+ })));
198
+ }
199
+
200
+ function DelayInput(props) {
201
+ const {
202
+ delay,
203
+ onChange
204
+ } = props;
205
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, null, "Slideshow delay:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
206
+ type: "number",
207
+ placeholder: "\u8ACB\u8F38\u5165\u81EA\u52D5\u5207\u63DB\u79D2\u6578",
208
+ step: "0.5",
209
+ min: "1",
210
+ value: delay,
211
+ onChange: e => {
212
+ onChange(e.target.value);
213
+ }
214
+ }));
215
+ }
216
+
217
+ const imagesQuery = (0, _apollo.gql)`
218
+ query Photos($searchText: String!, $take: Int, $skip: Int) {
219
+ photosCount(where: { name: { contains: $searchText } })
220
+ photos(
221
+ where: { name: { contains: $searchText } }
222
+ take: $take
223
+ skip: $skip
224
+ ) {
225
+ id
226
+ name
227
+ imageFile {
228
+ url
229
+ }
230
+ resized {
231
+ original
232
+ w480
233
+ w800
234
+ w1200
235
+ w1600
236
+ w2400
237
+ }
238
+ }
239
+ }
240
+ `;
241
+
242
+ function ImageSelector(props) {
243
+ const [queryImages, {
244
+ loading,
245
+ error,
246
+ data: {
247
+ photos: images = [],
248
+ photosCount: imagesCount = 0
249
+ } = {}
250
+ }] = (0, _apollo.useLazyQuery)(imagesQuery, {
251
+ fetchPolicy: 'no-cache'
252
+ });
253
+ const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
254
+
255
+ const [searchText, setSearchText] = (0, _react.useState)('');
256
+ const [selected, setSelected] = (0, _react.useState)([]);
257
+ const [delay, setDelay] = (0, _react.useState)('5');
258
+ const [align, setAlign] = (0, _react.useState)(undefined);
259
+ const contentWrapperRef = (0, _react.useRef)();
260
+ const pageSize = 6;
261
+ const options = [{
262
+ value: undefined,
263
+ label: 'default',
264
+ isDisabled: false
265
+ }, {
266
+ value: 'left',
267
+ label: 'left',
268
+ isDisabled: false
269
+ }, {
270
+ value: 'right',
271
+ label: 'right',
272
+ isDisabled: false
273
+ }];
274
+ const {
275
+ enableMultiSelect = false,
276
+ enableCaption = false,
277
+ enableUrl = false,
278
+ enableAlignment = false,
279
+ enableDelay = false,
280
+ onChange
281
+ } = props;
282
+
283
+ const onSave = () => {
284
+ let adjustedDelay = +delay;
285
+ adjustedDelay = adjustedDelay < 1 ? 1 : adjustedDelay;
286
+ onChange(selected, align, adjustedDelay);
287
+ };
288
+
289
+ const onCancel = () => {
290
+ onChange([]);
291
+ };
292
+
293
+ const onSearchBoxChange = async searchInput => {
294
+ setSearchText(searchInput);
295
+ setCurrentPage(1);
296
+ };
297
+
298
+ const onDealyChange = delay => {
299
+ setDelay(delay);
300
+ };
301
+
302
+ const onAlignSelectChange = align => {
303
+ setAlign(align);
304
+ };
305
+
306
+ const onAlignSelectOpen = () => {
307
+ var _contentWrapperRef$cu;
308
+
309
+ const scrollWrapper = (_contentWrapperRef$cu = contentWrapperRef.current) === null || _contentWrapperRef$cu === void 0 ? void 0 : _contentWrapperRef$cu.parentElement;
310
+ scrollWrapper.scrollTop = scrollWrapper.scrollHeight;
311
+ };
312
+
313
+ const onImageMetaChange = imageEntityWithMeta => {
314
+ if (enableMultiSelect) {
315
+ const foundIndex = selected.findIndex(ele => {
316
+ var _ele$image, _imageEntityWithMeta$;
317
+
318
+ 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);
319
+ });
320
+
321
+ if (foundIndex !== -1) {
322
+ selected[foundIndex] = imageEntityWithMeta;
323
+ setSelected(selected);
324
+ }
325
+
326
+ return;
327
+ }
328
+
329
+ setSelected([imageEntityWithMeta]);
330
+ };
331
+
332
+ const onImagesGridSelect = imageEntity => {
333
+ setSelected(selected => {
334
+ const filterdSelected = selected.filter(ele => {
335
+ var _ele$image2;
336
+
337
+ return ((_ele$image2 = ele.image) === null || _ele$image2 === void 0 ? void 0 : _ele$image2.id) !== imageEntity.id;
338
+ }); // deselect the image
339
+
340
+ if (filterdSelected.length !== selected.length) {
341
+ return filterdSelected;
342
+ } // add new selected one
343
+
344
+
345
+ if (enableMultiSelect) {
346
+ return selected.concat([{
347
+ image: imageEntity,
348
+ desc: ''
349
+ }]);
350
+ } // single select
351
+
352
+
353
+ return [{
354
+ image: imageEntity,
355
+ desc: ''
356
+ }];
357
+ });
358
+ };
359
+
360
+ const selectedImages = selected.map(ele => {
361
+ return ele.image;
362
+ });
363
+ (0, _react.useEffect)(() => {
364
+ if (currentPage !== 0) {
365
+ queryImages({
366
+ variables: {
367
+ searchText: searchText,
368
+ skip: (currentPage - 1) * pageSize,
369
+ take: pageSize
370
+ }
371
+ });
372
+ }
373
+ }, [currentPage, searchText]);
374
+
375
+ let searchResult = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ImageGrids, {
376
+ images: images,
377
+ selected: selectedImages,
378
+ onSelect: onImagesGridSelect
379
+ }), /*#__PURE__*/_react.default.createElement(_pagination.Pagination, {
380
+ currentPage: currentPage,
381
+ total: imagesCount,
382
+ pageSize: pageSize,
383
+ onChange: pageIndex => {
384
+ setCurrentPage(pageIndex);
385
+ }
386
+ }));
387
+
388
+ if (loading) {
389
+ searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching...");
390
+ }
391
+
392
+ if (error) {
393
+ 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)));
394
+ }
395
+
396
+ return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
397
+ isOpen: true
398
+ }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
399
+ title: "Select image",
400
+ actions: {
401
+ cancel: {
402
+ label: 'Cancel',
403
+ action: onCancel
404
+ },
405
+ confirm: {
406
+ label: 'Confirm',
407
+ action: onSave
408
+ }
409
+ }
410
+ }, /*#__PURE__*/_react.default.createElement("div", {
411
+ ref: contentWrapperRef
412
+ }, /*#__PURE__*/_react.default.createElement(ImageSearchBox, {
413
+ onChange: onSearchBoxChange
414
+ }), /*#__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, {
415
+ imageMetas: selected,
416
+ onChange: onImageMetaChange,
417
+ enableCaption: enableCaption,
418
+ enableUrl: enableUrl
419
+ })), /*#__PURE__*/_react.default.createElement(ImageBlockMetaWrapper, null, (enableDelay || enableAlignment) && /*#__PURE__*/_react.default.createElement(SeparationLine, null), enableDelay && /*#__PURE__*/_react.default.createElement(DelayInput, {
420
+ delay: delay,
421
+ onChange: onDealyChange
422
+ }), enableAlignment && /*#__PURE__*/_react.default.createElement(_alignSelector.AlignSelector, {
423
+ align: align,
424
+ options: options,
425
+ onChange: onAlignSelectChange,
426
+ onOpen: onAlignSelectOpen
427
+ })))));
428
+ }
@@ -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
+ }