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

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 (191) 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 +134 -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 +138 -0
  44. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.js +148 -0
  45. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.js +106 -0
  46. package/lib/website/mirrormedia/custom/block-renderer/divider-block.js +24 -0
  47. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.js +63 -0
  48. package/lib/website/mirrormedia/custom/block-renderer/image-block.js +47 -0
  49. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.js +103 -0
  50. package/lib/website/mirrormedia/custom/block-renderer/media-block.js +65 -0
  51. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.js +51 -0
  52. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.js +119 -0
  53. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.js +71 -0
  54. package/lib/website/mirrormedia/custom/block-renderer/table-block.js +455 -0
  55. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.js +86 -0
  56. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.js +39 -0
  57. package/lib/website/mirrormedia/custom/selector/align-selector.js +71 -0
  58. package/lib/website/mirrormedia/custom/selector/image-selector.js +427 -0
  59. package/lib/website/mirrormedia/custom/selector/pagination.js +82 -0
  60. package/lib/website/mirrormedia/custom/selector/post-selector.js +318 -0
  61. package/lib/website/mirrormedia/custom/selector/search-box.js +46 -0
  62. package/lib/website/mirrormedia/custom/selector/video-selector.js +282 -0
  63. package/lib/website/mirrormedia/draft-editor/block-renderer-fn.js +117 -0
  64. package/lib/website/mirrormedia/draft-editor/entity-decorator.js +16 -0
  65. package/lib/website/mirrormedia/draft-editor/index.js +799 -0
  66. package/lib/website/mirrormedia/draft-renderer/block-renderer-fn.js +117 -0
  67. package/lib/website/mirrormedia/draft-renderer/entity-decorator.js +16 -0
  68. package/lib/website/mirrormedia/draft-renderer/index.js +160 -0
  69. package/lib/website/readr/custom/block-renderer/background-image-block.js +138 -0
  70. package/lib/website/readr/custom/block-renderer/background-video-block.js +148 -0
  71. package/lib/website/readr/custom/block-renderer/color-box-block.js +106 -0
  72. package/lib/website/readr/custom/block-renderer/divider-block.js +24 -0
  73. package/lib/website/readr/custom/block-renderer/embedded-code-block.js +63 -0
  74. package/lib/website/readr/custom/block-renderer/image-block.js +47 -0
  75. package/lib/website/readr/custom/block-renderer/info-box-block.js +103 -0
  76. package/lib/website/readr/custom/block-renderer/media-block.js +65 -0
  77. package/lib/website/readr/custom/block-renderer/related-post-block.js +51 -0
  78. package/lib/website/readr/custom/block-renderer/side-index-block.js +119 -0
  79. package/lib/website/readr/custom/block-renderer/slideshow-block.js +71 -0
  80. package/lib/website/readr/custom/block-renderer/table-block.js +455 -0
  81. package/lib/website/readr/custom/entity-decorator/annotation-decorator.js +86 -0
  82. package/lib/website/readr/custom/entity-decorator/link-decorator.js +39 -0
  83. package/lib/website/readr/custom/selector/align-selector.js +71 -0
  84. package/lib/website/readr/custom/selector/image-selector.js +427 -0
  85. package/lib/website/readr/custom/selector/pagination.js +82 -0
  86. package/lib/website/readr/custom/selector/post-selector.js +318 -0
  87. package/lib/website/readr/custom/selector/search-box.js +46 -0
  88. package/lib/website/readr/custom/selector/video-selector.js +282 -0
  89. package/lib/website/readr/draft-editor/block-renderer-fn.js +117 -0
  90. package/lib/website/readr/draft-editor/entity-decorator.js +16 -0
  91. package/lib/website/readr/draft-editor/index.js +799 -0
  92. package/lib/website/readr/draft-renderer/block-renderer-fn.js +117 -0
  93. package/lib/website/readr/draft-renderer/entity-decorator.js +16 -0
  94. package/lib/website/readr/draft-renderer/index.js +160 -0
  95. package/package.json +1 -1
  96. package/lib/draft-js/block-renderer/background-image-block.tsx +0 -113
  97. package/lib/draft-js/block-renderer/background-video-block.tsx +0 -120
  98. package/lib/draft-js/block-renderer/color-box-block.tsx +0 -85
  99. package/lib/draft-js/block-renderer/divider-block.tsx +0 -12
  100. package/lib/draft-js/block-renderer/embedded-code-block.tsx +0 -65
  101. package/lib/draft-js/block-renderer/image-block.tsx +0 -41
  102. package/lib/draft-js/block-renderer/info-box-block.tsx +0 -85
  103. package/lib/draft-js/block-renderer/media-block.tsx +0 -36
  104. package/lib/draft-js/block-renderer/related-post-block.tsx +0 -47
  105. package/lib/draft-js/block-renderer/side-index-block.tsx +0 -113
  106. package/lib/draft-js/block-renderer/slideshow-block.tsx +0 -62
  107. package/lib/draft-js/block-renderer/table-block.tsx +0 -488
  108. package/lib/draft-js/buttons/annotation.tsx +0 -113
  109. package/lib/draft-js/buttons/background-color.tsx +0 -125
  110. package/lib/draft-js/buttons/background-image.tsx +0 -276
  111. package/lib/draft-js/buttons/background-video.tsx +0 -275
  112. package/lib/draft-js/buttons/color-box.tsx +0 -207
  113. package/lib/draft-js/buttons/divider.tsx +0 -56
  114. package/lib/draft-js/buttons/embedded-code.tsx +0 -126
  115. package/lib/draft-js/buttons/enlarge.tsx +0 -11
  116. package/lib/draft-js/buttons/font-color.tsx +0 -113
  117. package/lib/draft-js/buttons/image.tsx +0 -71
  118. package/lib/draft-js/buttons/info-box.tsx +0 -170
  119. package/lib/draft-js/buttons/link.tsx +0 -103
  120. package/lib/draft-js/buttons/media.tsx +0 -120
  121. package/lib/draft-js/buttons/related-post.tsx +0 -81
  122. package/lib/draft-js/buttons/selector/align-selector.tsx +0 -65
  123. package/lib/draft-js/buttons/selector/image-selector.tsx +0 -485
  124. package/lib/draft-js/buttons/selector/pagination.tsx +0 -83
  125. package/lib/draft-js/buttons/selector/post-selector.tsx +0 -367
  126. package/lib/draft-js/buttons/selector/search-box.tsx +0 -39
  127. package/lib/draft-js/buttons/selector/video-selector.tsx +0 -312
  128. package/lib/draft-js/buttons/side-index.tsx +0 -257
  129. package/lib/draft-js/buttons/slideshow.tsx +0 -81
  130. package/lib/draft-js/buttons/table.tsx +0 -63
  131. package/lib/draft-js/buttons/text-align.tsx +0 -88
  132. package/lib/draft-js/editor/basic-editor.tsx +0 -384
  133. package/lib/draft-js/editor/block-redender-fn.tsx +0 -77
  134. package/lib/draft-js/editor/entity-decorator.tsx +0 -7
  135. package/lib/draft-js/editor/modifier.tsx +0 -71
  136. package/lib/draft-js/entity-decorator/annotation-decorator.tsx +0 -81
  137. package/lib/draft-js/entity-decorator/link-decorator.tsx +0 -27
  138. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.tsx +0 -128
  139. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.tsx +0 -135
  140. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.tsx +0 -98
  141. package/lib/website/mirrormedia/custom/block-renderer/divider-block.tsx +0 -12
  142. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.tsx +0 -65
  143. package/lib/website/mirrormedia/custom/block-renderer/image-block.tsx +0 -41
  144. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.tsx +0 -98
  145. package/lib/website/mirrormedia/custom/block-renderer/media-block.tsx +0 -36
  146. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.tsx +0 -47
  147. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.tsx +0 -125
  148. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.tsx +0 -62
  149. package/lib/website/mirrormedia/custom/block-renderer/table-block.tsx +0 -537
  150. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.tsx +0 -81
  151. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.tsx +0 -27
  152. package/lib/website/mirrormedia/custom/selector/align-selector.tsx +0 -65
  153. package/lib/website/mirrormedia/custom/selector/image-selector.tsx +0 -485
  154. package/lib/website/mirrormedia/custom/selector/pagination.tsx +0 -83
  155. package/lib/website/mirrormedia/custom/selector/post-selector.tsx +0 -367
  156. package/lib/website/mirrormedia/custom/selector/search-box.tsx +0 -39
  157. package/lib/website/mirrormedia/custom/selector/video-selector.tsx +0 -310
  158. package/lib/website/mirrormedia/draft-editor/block-redender-fn.tsx +0 -77
  159. package/lib/website/mirrormedia/draft-editor/entity-decorator.tsx +0 -7
  160. package/lib/website/mirrormedia/draft-editor/index.tsx +0 -909
  161. package/lib/website/mirrormedia/draft-renderer/block-redender-fn.tsx +0 -77
  162. package/lib/website/mirrormedia/draft-renderer/entity-decorator.tsx +0 -7
  163. package/lib/website/mirrormedia/draft-renderer/index-deprecated.tsx +0 -43
  164. package/lib/website/mirrormedia/draft-renderer/index.tsx +0 -150
  165. package/lib/website/readr/custom/block-renderer/background-image-block.tsx +0 -128
  166. package/lib/website/readr/custom/block-renderer/background-video-block.tsx +0 -135
  167. package/lib/website/readr/custom/block-renderer/color-box-block.tsx +0 -98
  168. package/lib/website/readr/custom/block-renderer/divider-block.tsx +0 -12
  169. package/lib/website/readr/custom/block-renderer/embedded-code-block.tsx +0 -65
  170. package/lib/website/readr/custom/block-renderer/image-block.tsx +0 -41
  171. package/lib/website/readr/custom/block-renderer/info-box-block.tsx +0 -98
  172. package/lib/website/readr/custom/block-renderer/media-block.tsx +0 -36
  173. package/lib/website/readr/custom/block-renderer/related-post-block.tsx +0 -47
  174. package/lib/website/readr/custom/block-renderer/side-index-block.tsx +0 -125
  175. package/lib/website/readr/custom/block-renderer/slideshow-block.tsx +0 -62
  176. package/lib/website/readr/custom/block-renderer/table-block.tsx +0 -537
  177. package/lib/website/readr/custom/entity-decorator/annotation-decorator.tsx +0 -81
  178. package/lib/website/readr/custom/entity-decorator/link-decorator.tsx +0 -27
  179. package/lib/website/readr/custom/selector/align-selector.tsx +0 -65
  180. package/lib/website/readr/custom/selector/image-selector.tsx +0 -485
  181. package/lib/website/readr/custom/selector/pagination.tsx +0 -83
  182. package/lib/website/readr/custom/selector/post-selector.tsx +0 -367
  183. package/lib/website/readr/custom/selector/search-box.tsx +0 -39
  184. package/lib/website/readr/custom/selector/video-selector.tsx +0 -310
  185. package/lib/website/readr/draft-editor/block-redender-fn.tsx +0 -77
  186. package/lib/website/readr/draft-editor/entity-decorator.tsx +0 -7
  187. package/lib/website/readr/draft-editor/index.tsx +0 -909
  188. package/lib/website/readr/draft-renderer/block-redender-fn.tsx +0 -77
  189. package/lib/website/readr/draft-renderer/entity-decorator.tsx +0 -7
  190. package/lib/website/readr/draft-renderer/index-deprecated.tsx +0 -43
  191. 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
+ }