@micromag/media-gallery 0.3.507 → 0.3.509

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.
package/lib/index.js CHANGED
@@ -1,1847 +1,268 @@
1
1
  'use strict';
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
4
5
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
5
6
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
6
7
  var classNames = require('classnames');
7
- var isArray = require('lodash/isArray');
8
8
  var PropTypes = require('prop-types');
9
9
  var React = require('react');
10
10
  var reactDom = require('react-dom');
11
- var reactIntl = require('react-intl');
11
+ var data$1 = require('@panneau/data');
12
+ var DisplaysProvider = require('@panneau/displays');
13
+ var FieldsProvider = require('@panneau/fields');
14
+ var FiltersProvider = require('@panneau/filters');
15
+ var medias = require('@panneau/medias');
12
16
  var core = require('@micromag/core');
13
17
  var components = require('@micromag/core/components');
14
- var contexts = require('@micromag/core/contexts');
15
18
  var data = require('@micromag/data');
16
- var hooks = require('@micromag/core/hooks');
17
- var faHeadphonesAlt = require('@fortawesome/free-solid-svg-icons/faHeadphonesAlt');
18
- var faInfoCircle = require('@fortawesome/free-solid-svg-icons/faInfoCircle');
19
- var faPlayCircle = require('@fortawesome/free-solid-svg-icons/faPlayCircle');
20
- var faTimesCircle = require('@fortawesome/free-solid-svg-icons/faTimesCircle');
21
- var reactFontawesome = require('@fortawesome/react-fontawesome');
22
- var uniqBy = require('lodash/uniqBy');
23
- var prettyBytes = require('pretty-bytes');
24
- var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
25
- var faChevronLeft = require('@fortawesome/free-solid-svg-icons/faChevronLeft');
26
- var faPlus = require('@fortawesome/free-solid-svg-icons/faPlus');
27
- var faTimes = require('@fortawesome/free-solid-svg-icons/faTimes');
28
- var faSearch = require('@fortawesome/free-solid-svg-icons/faSearch');
29
- var faSpinner = require('@fortawesome/free-solid-svg-icons/faSpinner');
30
- var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
31
-
32
- var middleEllipsis = function middleEllipsis(string, maxLength) {
33
- if (!string) return string;
34
- if (maxLength < 1) return string;
35
- if (string.length <= maxLength) return string;
36
- if (maxLength === 1) return "".concat(string.substring(0, 1), "...");
37
- var midpoint = Math.ceil(string.length / 2);
38
- var toremove = string.length - maxLength;
39
- var lstrip = Math.ceil(toremove / 2);
40
- var rstrip = toremove - lstrip;
41
- return "".concat(string.substring(0, midpoint - lstrip), "...").concat(string.substring(midpoint + rstrip));
42
- };
43
-
44
- var styles$b = {"container":"micromag-media-gallery-items-gallery-item-container","selected":"micromag-media-gallery-items-gallery-item-selected","imageButton":"micromag-media-gallery-items-gallery-item-imageButton","image":"micromag-media-gallery-items-gallery-item-image","icon":"micromag-media-gallery-items-gallery-item-icon","footer":"micromag-media-gallery-items-gallery-item-footer","label":"micromag-media-gallery-items-gallery-item-label","infoButton":"micromag-media-gallery-items-gallery-item-infoButton","closeButton":"micromag-media-gallery-items-gallery-item-closeButton"};
19
+ var pathToRegexp = require('path-to-regexp');
20
+ var reactIntl = require('react-intl');
45
21
 
46
- var propTypes$b = {
47
- item: core.PropTypes.media,
48
- width: PropTypes.number,
49
- selected: PropTypes.bool,
50
- withInfoButton: PropTypes.bool,
51
- className: PropTypes.string,
52
- onClick: PropTypes.func,
53
- onClickInfo: PropTypes.func,
54
- onClickRemove: PropTypes.func
22
+ /* eslint-disable react/jsx-props-no-spreading */
23
+ var RoutesContext = /*#__PURE__*/React.createContext(null);
24
+ var useRoutesContext = function useRoutesContext() {
25
+ return React.useContext(RoutesContext);
55
26
  };
56
- var defaultProps$b = {
57
- item: null,
58
- width: 0,
59
- selected: false,
60
- withInfoButton: false,
61
- className: null,
62
- onClick: null,
63
- onClickInfo: null,
64
- onClickRemove: null
65
- };
66
- var GalleryItem = function GalleryItem(_ref) {
67
- var item = _ref.item,
68
- width = _ref.width,
69
- selected = _ref.selected,
70
- withInfoButton = _ref.withInfoButton,
71
- className = _ref.className,
72
- onClick = _ref.onClick,
73
- onClickInfo = _ref.onClickInfo,
74
- onClickRemove = _ref.onClickRemove;
75
- var type = item.type,
76
- _item$thumbnail_url = item.thumbnail_url,
77
- thumbnail = _item$thumbnail_url === void 0 ? null : _item$thumbnail_url,
78
- name = item.name,
79
- size = item.size;
80
- var title = name;
81
- if (width < 768) {
82
- title = middleEllipsis(name, Math.floor(Math.max(18, width / 2 / 9)));
83
- } else {
84
- title = middleEllipsis(name, Math.floor(Math.max(25, width / 3 / 8)));
27
+ ({
28
+ children: PropTypes.node.isRequired,
29
+ routes: PropTypes.objectOf(PropTypes.string).isRequired,
30
+ basePath: PropTypes.string
31
+ });
32
+ var compilers = {};
33
+ function generatePath(fullPath, data) {
34
+ var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
35
+ var fullUrlMatches = fullPath.match(/^(https?:\/\/)/);
36
+ if (typeof compilers[fullPath] === 'undefined') {
37
+ compilers[fullPath] = pathToRegexp.compile(fullPath.replace(/^(https?:\/\/)/, ''), opts);
85
38
  }
86
- return /*#__PURE__*/React.createElement(components.Card, {
87
- image: /*#__PURE__*/React.createElement("button", {
88
- className: classNames(['d-block', 'position-relative', 'p-0', 'border-0', 'w-100', 'text-start', 'bg-dark', 'text-black', styles$b.imageButton]),
89
- type: "button",
90
- onClick: onClick
91
- }, /*#__PURE__*/React.createElement("div", {
92
- className: classNames(['card-img-top', styles$b.image]),
93
- style: {
94
- backgroundImage: thumbnail !== null ? "url('".concat(thumbnail, "')") : null
95
- }
96
- })),
97
- beforeBody: /*#__PURE__*/React.createElement(React.Fragment, null, withInfoButton ? /*#__PURE__*/React.createElement(components.Button, {
98
- className: styles$b.infoButton,
99
- onClick: onClickInfo,
100
- withoutStyle: true
101
- }, /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
102
- icon: faInfoCircle.faInfoCircle,
103
- className: styles$b.icon
104
- })) : null, selected ? /*#__PURE__*/React.createElement(components.Button, {
105
- className: classNames(['text-danger', styles$b.closeButton]),
106
- onClick: onClickRemove,
107
- withoutStyle: true
108
- }, /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
109
- icon: faTimesCircle.faTimesCircle,
110
- className: styles$b.icon
111
- })) : null),
112
- footer: /*#__PURE__*/React.createElement(React.Fragment, null, type === 'video' ? /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
113
- className: styles$b.icon,
114
- icon: faPlayCircle.faPlayCircle
115
- }) : null, type === 'audio' ? /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
116
- className: styles$b.icon,
117
- icon: faHeadphonesAlt.faHeadphonesAlt
118
- }) : null, /*#__PURE__*/React.createElement("div", {
119
- className: classNames(['text-truncate', styles$b.label])
120
- }, /*#__PURE__*/React.createElement("small", null, title), size !== null ? /*#__PURE__*/React.createElement("small", {
121
- className: "text-body-secondary ms-1"
122
- }, size) : null)),
123
- theme: selected ? null : null,
124
- className: classNames([styles$b.container, _defineProperty(_defineProperty({}, styles$b.selected, selected), className, className !== null)]),
125
- footerClassName: classNames(['p-1', styles$b.footer]),
126
- onClickFooter: onClick
127
- });
128
- };
129
- GalleryItem.propTypes = propTypes$b;
130
- GalleryItem.defaultProps = defaultProps$b;
131
- var GalleryItem$1 = GalleryItem;
132
-
133
- var styles$a = {};
134
-
135
- var propTypes$a = {
136
- items: core.PropTypes.medias,
137
- selectedItem: core.PropTypes.media,
138
- withInfoButton: PropTypes.bool,
139
- isSmall: PropTypes.bool,
140
- selectedFirst: PropTypes.bool,
141
- className: PropTypes.string,
142
- onClickItem: PropTypes.func,
143
- onClickItemInfo: PropTypes.func,
144
- onClickRemoveItem: PropTypes.func
145
- };
146
- var defaultProps$a = {
147
- items: null,
148
- selectedItem: null,
149
- withInfoButton: false,
150
- isSmall: false,
151
- selectedFirst: false,
152
- className: null,
153
- onClickItem: null,
154
- onClickItemInfo: null,
155
- onClickRemoveItem: null
156
- };
157
- function Gallery(_ref) {
158
- var items = _ref.items,
159
- selectedItem = _ref.selectedItem,
160
- withInfoButton = _ref.withInfoButton,
161
- isSmall = _ref.isSmall,
162
- selectedFirst = _ref.selectedFirst,
163
- className = _ref.className,
164
- onClickItem = _ref.onClickItem,
165
- onClickItemInfo = _ref.onClickItemInfo,
166
- onClickRemoveItem = _ref.onClickRemoveItem;
167
- var _useDimensionObserver = hooks.useDimensionObserver(),
168
- ref = _useDimensionObserver.ref,
169
- width = _useDimensionObserver.width;
170
- var finalItems = React.useMemo(function () {
171
- if (selectedFirst && selectedItem !== null && typeof selectedItem.id !== 'undefined') {
172
- return [selectedItem].concat(_toConsumableArray(items.filter(function (_ref2) {
173
- var id = _ref2.id;
174
- return id !== selectedItem.id;
175
- })));
176
- }
177
- return items;
178
- }, [selectedFirst, selectedItem, items]);
179
- return /*#__PURE__*/React.createElement("div", {
180
- className: classNames([styles$a.container, 'p-2', 'pt-0', _defineProperty({}, className, className !== null)]),
181
- ref: ref
182
- }, /*#__PURE__*/React.createElement("div", {
183
- className: classNames(['row', 'mx-n1', 'row-cols-2', {
184
- 'row-cols-md-3': !isSmall
185
- }])
186
- }, finalItems.map(function (item) {
187
- return /*#__PURE__*/React.createElement("div", {
188
- className: "col px-1 py-1",
189
- key: "gallery-item-".concat(item.id)
190
- }, /*#__PURE__*/React.createElement(GalleryItem$1, {
191
- item: item,
192
- width: width,
193
- selected: selectedItem !== null && selectedItem.id === item.id,
194
- onClick: onClickItem !== null ? function () {
195
- return onClickItem(item);
196
- } : null,
197
- onClickInfo: onClickItemInfo !== null ? function () {
198
- return onClickItemInfo(item);
199
- } : null,
200
- onClickRemove: onClickRemoveItem !== null ? function () {
201
- onClickRemoveItem();
202
- } : null,
203
- withInfoButton: withInfoButton
204
- }));
205
- })));
39
+ var compiler = compilers[fullPath];
40
+ return fullUrlMatches !== null ? "".concat(fullUrlMatches[1]).concat(compiler(data)) : compiler(data);
206
41
  }
207
- Gallery.propTypes = propTypes$a;
208
- Gallery.defaultProps = defaultProps$a;
209
-
210
- var styles$9 = {"container":"micromag-media-gallery-partials-media-metadata-container","image":"micromag-media-gallery-partials-media-metadata-image","video":"micromag-media-gallery-partials-media-metadata-video","player":"micromag-media-gallery-partials-media-metadata-player","audio":"micromag-media-gallery-partials-media-metadata-audio","placeholder":"micromag-media-gallery-partials-media-metadata-placeholder"};
211
-
212
- var propTypes$9 = {
213
- media: core.PropTypes.media,
214
- tags: core.PropTypes.tags,
215
- onChange: PropTypes.func,
216
- onClickClose: PropTypes.func,
217
- onClickSave: PropTypes.func,
218
- onClickDelete: PropTypes.func,
219
- className: PropTypes.string
220
- };
221
- var defaultProps$9 = {
222
- media: null,
223
- tags: [],
224
- onChange: null,
225
- onClickClose: null,
226
- onClickSave: null,
227
- onClickDelete: null,
228
- className: null
229
- };
230
- function MediaMetadata(_ref) {
231
- var media = _ref.media,
232
- allTags = _ref.tags,
233
- onChange = _ref.onChange,
234
- onClickClose = _ref.onClickClose,
235
- onClickSave = _ref.onClickSave,
236
- onClickDelete = _ref.onClickDelete,
237
- className = _ref.className;
238
- var _ref2 = media || {},
239
- mediaId = _ref2.id,
240
- type = _ref2.type,
241
- _ref2$url = _ref2.url,
242
- url = _ref2$url === void 0 ? null : _ref2$url,
243
- _ref2$thumbnail_url = _ref2.thumbnail_url,
244
- thumbnail = _ref2$thumbnail_url === void 0 ? null : _ref2$thumbnail_url,
245
- _ref2$name = _ref2.name,
246
- mediaName = _ref2$name === void 0 ? null : _ref2$name,
247
- _ref2$metadata = _ref2.metadata,
248
- metadata = _ref2$metadata === void 0 ? {} : _ref2$metadata;
249
- var _ref3 = metadata || {},
250
- _ref3$filename = _ref3.filename,
251
- filename = _ref3$filename === void 0 ? null : _ref3$filename,
252
- _ref3$size = _ref3.size,
253
- size = _ref3$size === void 0 ? null : _ref3$size,
254
- _ref3$width = _ref3.width,
255
- width = _ref3$width === void 0 ? null : _ref3$width,
256
- _ref3$height = _ref3.height,
257
- height = _ref3$height === void 0 ? null : _ref3$height,
258
- _ref3$duration = _ref3.duration,
259
- duration = _ref3$duration === void 0 ? null : _ref3$duration,
260
- _ref3$user = _ref3.user,
261
- user = _ref3$user === void 0 ? null : _ref3$user,
262
- _ref3$description = _ref3.description,
263
- mediaDescription = _ref3$description === void 0 ? null : _ref3$description,
264
- _ref3$tags = _ref3.tags,
265
- mediaTags = _ref3$tags === void 0 ? [] : _ref3$tags;
266
- var _useMediaUpdate = data.useMediaUpdate(),
267
- update = _useMediaUpdate.update;
268
- var _useMediaRequestDelet = data.useMediaRequestDelete(),
269
- requestDeleteMedia = _useMediaRequestDelet.requestDeleteMedia;
270
- var _useMediaDelete = data.useMediaDelete(),
271
- deleteMedia = _useMediaDelete.deleteMedia;
272
- var getOptionLabel = React.useCallback(function (_ref4) {
273
- var name = _ref4.name;
274
- return name;
275
- }, []);
276
- var getOptionValue = React.useCallback(function (_ref5) {
277
- var name = _ref5.name;
278
- return name;
279
- }, []);
280
- var getNewOptionData = React.useCallback(function (inputValue) {
281
- return {
282
- name: inputValue
283
- };
284
- }, []);
285
- var finalTags = React.useMemo(function () {
286
- return allTags !== null ? uniqBy(mediaTags.concat(allTags), function (_ref6) {
287
- var id = _ref6.id;
288
- return id;
289
- }) : mediaTags;
290
- }, [mediaTags, allTags]);
291
- var _useState = React.useState(mediaName),
292
- _useState2 = _slicedToArray(_useState, 2),
293
- name = _useState2[0],
294
- setName = _useState2[1];
295
- var _useState3 = React.useState(mediaDescription),
296
- _useState4 = _slicedToArray(_useState3, 2),
297
- description = _useState4[0],
298
- setDescription = _useState4[1];
299
- var _useState5 = React.useState(mediaTags.map(getOptionValue)),
300
- _useState6 = _slicedToArray(_useState5, 2),
301
- tags = _useState6[0],
302
- setTags = _useState6[1];
303
- var _useState7 = React.useState(false),
304
- _useState8 = _slicedToArray(_useState7, 2),
305
- changed = _useState8[0],
306
- setChanged = _useState8[1];
307
- var onTagChange = React.useCallback(function (val) {
308
- setTags(val);
309
- setChanged(true);
310
- }, [tags, setTags, setChanged]);
311
- var onNameChange = React.useCallback(function (val) {
312
- setName(val);
313
- setChanged(true);
314
- }, [tags, setName, setChanged]);
315
- var onDescriptionChange = React.useCallback(function (val) {
316
- setDescription(val);
317
- setChanged(true);
318
- }, [tags, setDescription, setChanged]);
319
- var _useState9 = React.useState(null),
320
- _useState10 = _slicedToArray(_useState9, 2),
321
- saveState = _useState10[0],
322
- setSaveState = _useState10[1];
323
- var onSave = React.useCallback(function () {
324
- return update(mediaId, {
325
- name: name,
326
- tags: tags,
327
- description: description
328
- }).then(function (response) {
329
- setChanged(false);
330
- setSaveState(null);
331
- if (onClickSave !== null) {
332
- onClickSave();
333
- }
334
- if (onChange !== null) {
335
- onChange(response);
336
- }
337
- })["catch"](function () {
338
- setSaveState(false);
339
- });
340
- }, [mediaId, name, tags, description, metadata, update, onChange, onClickSave, onClickClose, setChanged, setSaveState]);
341
- var _useState11 = React.useState(null),
342
- _useState12 = _slicedToArray(_useState11, 2),
343
- deletedState = _useState12[0],
344
- setDeletedState = _useState12[1];
345
- var _useState13 = React.useState(null),
346
- _useState14 = _slicedToArray(_useState13, 2),
347
- confirmation = _useState14[0],
348
- setConfirmation = _useState14[1];
349
- React.useEffect(function () {
350
- setDeletedState(null);
351
- setConfirmation(null);
352
- }, [mediaId, setDeletedState, setConfirmation]);
353
- var onConfirm = React.useCallback(function () {
354
- requestDeleteMedia(mediaId).then(function (response) {
355
- var _ref7 = response || {},
356
- state = _ref7.state,
357
- _ref7$items = _ref7.items,
358
- items = _ref7$items === void 0 ? [] : _ref7$items;
359
- if (state === 'needs_confirmation') {
360
- setConfirmation(items || []);
361
- } else {
362
- setConfirmation(null);
363
- }
364
- })["catch"](function () {
365
- setConfirmation(null);
366
- });
367
- }, [mediaId, requestDeleteMedia, setConfirmation]);
368
- var onDelete = React.useCallback(function () {
369
- deleteMedia(mediaId).then(function () {
370
- setChanged(false);
371
- setDeletedState(true);
372
- setConfirmation(null);
373
- if (onClickDelete !== null) {
374
- onClickDelete(mediaId);
375
- }
376
- })["catch"](function () {
377
- setDeletedState(false);
378
- setConfirmation(null);
379
- });
380
- }, [mediaId, deleteMedia, onClickDelete, setChanged, setDeletedState, setConfirmation]);
381
- var onCancelDelete = React.useCallback(function () {
382
- setConfirmation(null);
383
- setDeletedState(null);
384
- }, [setConfirmation, setDeletedState]);
385
- React.useEffect(function () {
386
- if (media !== null) {
387
- setTags(mediaTags);
388
- setName(mediaName);
389
- setDescription(mediaDescription);
390
- } else {
391
- setTags([]);
392
- setName(null);
393
- setDescription(null);
42
+ var useUrlGeneratorPathToRepexp = function useUrlGeneratorPathToRepexp() {
43
+ var _ref2 = useRoutesContext() || {},
44
+ _ref2$routes = _ref2.routes,
45
+ routes = _ref2$routes === void 0 ? null : _ref2$routes,
46
+ _ref2$basePath = _ref2.basePath,
47
+ basePath = _ref2$basePath === void 0 ? null : _ref2$basePath;
48
+ var urlGenerator = React.useCallback(function (key, data, opts) {
49
+ var path = routes !== null ? routes[key] || null : null;
50
+ if (path === null) {
51
+ return null;
394
52
  }
395
- setChanged(false);
396
- }, [media, setTags, setName, setDescription, setChanged]);
397
- var TextField = contexts.useFieldComponent('text');
398
- var TokensField = contexts.useFieldComponent('tokens');
399
- return /*#__PURE__*/React.createElement("div", {
400
- className: classNames([styles$9.container, _defineProperty({}, className, className)])
401
- }, /*#__PURE__*/React.createElement("div", {
402
- className: classNames(['position-relative', _defineProperty({
403
- 'bg-light': type === 'audio',
404
- 'bg-black': type === 'image'
405
- }, styles$9.video, type === 'video')])
406
- }, type === 'video' ? /*#__PURE__*/React.createElement("video", {
407
- className: styles$9.player,
408
- controls: true,
409
- src: url
410
- }) : null, type === 'audio' ? /*#__PURE__*/React.createElement("div", {
411
- className: styles$9.audio
412
- }, /*#__PURE__*/React.createElement("audio", {
413
- className: styles$9.player,
414
- controls: true,
415
- src: url
416
- })) : null, type !== 'video' && thumbnail !== null ? /*#__PURE__*/React.createElement("img", {
417
- src: thumbnail,
418
- className: styles$9.image,
419
- alt: filename
420
- }) : /*#__PURE__*/React.createElement("div", {
421
- className: styles$9.placeholder
422
- })), /*#__PURE__*/React.createElement("div", {
423
- className: "p-2"
424
- }, /*#__PURE__*/React.createElement("div", {
425
- className: "tags mb-4"
426
- }, /*#__PURE__*/React.createElement("div", {
427
- className: "my-3"
428
- }, /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
429
- id: "kBz8vF",
430
- defaultMessage: [{
431
- "type": 0,
432
- "value": "Name"
433
- }]
434
- })), /*#__PURE__*/React.createElement(TextField, {
435
- value: name,
436
- onChange: onNameChange
437
- })), /*#__PURE__*/React.createElement("div", {
438
- className: "my-3"
439
- }, /*#__PURE__*/React.createElement("h6", {
440
- className: "mb-0"
441
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
442
- id: "YJZtWR",
443
- defaultMessage: [{
444
- "type": 0,
445
- "value": "Description"
446
- }]
447
- })), /*#__PURE__*/React.createElement("p", {
448
- className: "mb-1"
449
- }, /*#__PURE__*/React.createElement("small", null, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
450
- id: "EDFyUp",
451
- defaultMessage: [{
452
- "type": 0,
453
- "value": "Alternative text (accessibility)"
454
- }]
455
- }))), /*#__PURE__*/React.createElement(TextField, {
456
- value: description,
457
- onChange: onDescriptionChange
458
- })), /*#__PURE__*/React.createElement("div", {
459
- className: "my-3"
460
- }, /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
461
- id: "4fHMVj",
462
- defaultMessage: [{
463
- "type": 0,
464
- "value": "Tags"
465
- }]
466
- })), /*#__PURE__*/React.createElement(TokensField, {
467
- value: tags,
468
- options: finalTags
469
- // loadOptions={loadTags}
470
- ,
471
- getOptionLabel: getOptionLabel,
472
- getOptionValue: getOptionValue,
473
- getNewOptionData: getNewOptionData,
474
- onChange: onTagChange
475
- })), changed ? /*#__PURE__*/React.createElement(components.Button, {
476
- theme: "primary",
477
- onClick: onSave
478
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
479
- id: "qIw1nW",
480
- defaultMessage: [{
481
- "type": 0,
482
- "value": "Save"
483
- }]
484
- })) : null, saveState === false ? /*#__PURE__*/React.createElement("p", {
485
- className: "pt-1 text-danger"
486
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
487
- id: "DYjRd/",
488
- defaultMessage: [{
489
- "type": 0,
490
- "value": "Sorry, this media could not be saved."
491
- }]
492
- })) : null), /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
493
- id: "c9VwT/",
494
- defaultMessage: [{
495
- "type": 0,
496
- "value": "Technical details"
497
- }]
498
- })), /*#__PURE__*/React.createElement("ul", {
499
- className: "list-group"
500
- }, type !== null ? /*#__PURE__*/React.createElement("li", {
501
- className: "list-group-item py-2 px-2"
502
- }, /*#__PURE__*/React.createElement("div", {
503
- className: "row"
504
- }, /*#__PURE__*/React.createElement("div", {
505
- className: "col-4 text-body-secondary"
506
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
507
- id: "OkNUmk",
508
- defaultMessage: [{
509
- "type": 0,
510
- "value": "Type"
511
- }]
512
- })), /*#__PURE__*/React.createElement("div", {
513
- className: "col text-capitalize"
514
- }, /*#__PURE__*/React.createElement("small", null, type)))) : null, filename !== null ? /*#__PURE__*/React.createElement("li", {
515
- className: "list-group-item py-2 px-2"
516
- }, /*#__PURE__*/React.createElement("div", {
517
- className: "row"
518
- }, /*#__PURE__*/React.createElement("div", {
519
- className: "col-4 text-body-secondary"
520
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
521
- id: "aovRFH",
522
- defaultMessage: [{
523
- "type": 0,
524
- "value": "Filename"
525
- }]
526
- })), /*#__PURE__*/React.createElement("div", {
527
- className: "col"
528
- }, /*#__PURE__*/React.createElement("small", null, filename)))) : null, duration ? /*#__PURE__*/React.createElement("li", {
529
- className: "list-group-item py-2 px-2"
530
- }, /*#__PURE__*/React.createElement("div", {
531
- className: "row"
532
- }, /*#__PURE__*/React.createElement("div", {
533
- className: "col-4 text-body-secondary"
534
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
535
- id: "eoW0tZ",
536
- defaultMessage: [{
537
- "type": 0,
538
- "value": "Duration"
539
- }]
540
- })), /*#__PURE__*/React.createElement("div", {
541
- className: "col"
542
- }, /*#__PURE__*/React.createElement("small", null, duration)))) : null, width !== null || height !== null ? /*#__PURE__*/React.createElement("li", {
543
- className: "list-group-item py-2 px-2"
544
- }, /*#__PURE__*/React.createElement("div", {
545
- className: "row"
546
- }, /*#__PURE__*/React.createElement("div", {
547
- className: "col-4 text-body-secondary"
548
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
549
- id: "mv37oK",
550
- defaultMessage: [{
551
- "type": 0,
552
- "value": "Dimension"
553
- }]
554
- })), /*#__PURE__*/React.createElement("div", {
555
- className: "col"
556
- }, /*#__PURE__*/React.createElement("small", null, width, "x", height)))) : null, size !== null ? /*#__PURE__*/React.createElement("li", {
557
- className: "list-group-item py-2 px-2"
558
- }, /*#__PURE__*/React.createElement("div", {
559
- className: "row"
560
- }, /*#__PURE__*/React.createElement("div", {
561
- className: "col-4 text-body-secondary"
562
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
563
- id: "liyV7Y",
564
- defaultMessage: [{
565
- "type": 0,
566
- "value": "Size"
567
- }]
568
- })), /*#__PURE__*/React.createElement("div", {
569
- className: "col"
570
- }, /*#__PURE__*/React.createElement("small", null, prettyBytes(size))))) : null, description !== null ? /*#__PURE__*/React.createElement("li", {
571
- className: "list-group-item py-2 px-2"
572
- }, /*#__PURE__*/React.createElement("div", {
573
- className: "row"
574
- }, /*#__PURE__*/React.createElement("div", {
575
- className: "col-4 text-body-secondary"
576
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
577
- id: "7uyslu",
578
- defaultMessage: [{
579
- "type": 0,
580
- "value": "Description"
581
- }]
582
- })), /*#__PURE__*/React.createElement("div", {
583
- className: "col"
584
- }, /*#__PURE__*/React.createElement("small", null, description)))) : null, user !== null && user.name ? /*#__PURE__*/React.createElement("li", {
585
- className: "list-group-item py-2 px-2"
586
- }, /*#__PURE__*/React.createElement("div", {
587
- className: "row"
588
- }, /*#__PURE__*/React.createElement("div", {
589
- className: "col-4 text-body-secondary"
590
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
591
- id: "sUR1xV",
592
- defaultMessage: [{
593
- "type": 0,
594
- "value": "Author"
595
- }]
596
- })), /*#__PURE__*/React.createElement("div", {
597
- className: "col"
598
- }, /*#__PURE__*/React.createElement("small", null, user.name)))) : null), /*#__PURE__*/React.createElement("div", {
599
- className: "py-3"
600
- }, confirmation !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, confirmation.length > 0 ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {
601
- className: "pt-1 text-danger"
602
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
603
- id: "2FD6tj",
604
- defaultMessage: [{
605
- "type": 0,
606
- "value": "This media is used by the following documents:"
607
- }]
608
- })), /*#__PURE__*/React.createElement("ul", null, confirmation.map(function (it, i) {
609
- return /*#__PURE__*/React.createElement("li", {
610
- key: "".concat(it, "-").concat(i + 1),
611
- className: "text-danger"
612
- }, it);
613
- }))) : null, /*#__PURE__*/React.createElement("p", {
614
- className: "pt-1 text-danger"
615
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
616
- id: "wy2g+x",
617
- defaultMessage: [{
618
- "type": 0,
619
- "value": "Are you sure you want to continue?"
620
- }]
621
- }))) : null, /*#__PURE__*/React.createElement("div", {
622
- className: "d-flex"
623
- }, /*#__PURE__*/React.createElement(components.Button, {
624
- className: "me-2",
625
- theme: "danger",
626
- outline: true,
627
- onClick: confirmation === null ? onConfirm : onDelete
628
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
629
- id: "/KQ87r",
630
- defaultMessage: [{
631
- "type": 0,
632
- "value": "Delete media"
633
- }]
634
- })), confirmation !== null ? /*#__PURE__*/React.createElement(components.Button, {
635
- theme: "primary",
636
- outline: true,
637
- onClick: onCancelDelete
638
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
639
- id: "Xb6r3F",
640
- defaultMessage: [{
641
- "type": 0,
642
- "value": "Cancel"
643
- }]
644
- })) : null), deletedState === false ? /*#__PURE__*/React.createElement("p", {
645
- className: "pt-1 text-danger"
646
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
647
- id: "rqbRV2",
648
- defaultMessage: [{
649
- "type": 0,
650
- "value": "Sorry, this media could not be deleted."
651
- }]
652
- })) : null)));
653
- }
654
- MediaMetadata.propTypes = propTypes$9;
655
- MediaMetadata.defaultProps = defaultProps$9;
656
-
657
- var useSearchFilters = function useSearchFilters(_ref) {
658
- var _ref$recent = _ref.recent,
659
- recent = _ref$recent === void 0 ? [] : _ref$recent,
660
- _ref$tags = _ref.tags,
661
- tags = _ref$tags === void 0 ? [] : _ref$tags,
662
- _ref$team = _ref.team,
663
- team = _ref$team === void 0 ? [] : _ref$team,
664
- _ref$sources = _ref.sources,
665
- upstreamSources = _ref$sources === void 0 ? [] : _ref$sources,
666
- _ref$withType = _ref.withType,
667
- withType = _ref$withType === void 0 ? false : _ref$withType,
668
- _ref$storyId = _ref.storyId,
669
- storyId = _ref$storyId === void 0 ? null : _ref$storyId;
670
- var sources = [].concat(_toConsumableArray(storyId !== null ? [{
671
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
672
- id: "eiaIIB",
673
- defaultMessage: [{
674
- "type": 0,
675
- "value": "This Micromag"
676
- }]
677
- }),
678
- value: "document-".concat(storyId)
679
- }] : []), [{
680
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
681
- id: "xAzv6g",
682
- defaultMessage: [{
683
- "type": 0,
684
- "value": "All sources"
685
- }]
686
- }),
687
- value: 'all'
688
- }], _toConsumableArray(team !== null && team.length > 0 ? [{
689
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
690
- id: "/62oe4",
691
- defaultMessage: [{
692
- "type": 0,
693
- "value": "My files"
694
- }]
695
- }),
696
- value: 'user'
697
- }] : []), _toConsumableArray(upstreamSources)).filter(function (it) {
698
- return it !== null;
699
- });
700
- var types = [{
701
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
702
- id: "2J05S0",
703
- defaultMessage: [{
704
- "type": 0,
705
- "value": "Images"
706
- }]
707
- }),
708
- value: 'image'
709
- }, {
710
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
711
- id: "QBlqW9",
712
- defaultMessage: [{
713
- "type": 0,
714
- "value": "Videos"
715
- }]
716
- }),
717
- value: 'video'
53
+ var url = generatePath(path, data, opts);
54
+ return basePath !== null ? "".concat(basePath.replace(/\/$/, ''), "/").concat(url.replace(/^\//, '')) : url;
55
+ }, [routes, basePath]);
56
+ return urlGenerator;
57
+ };
58
+ var useUrlGeneratorPathToRegexp = useUrlGeneratorPathToRepexp;
59
+
60
+ function filters() {
61
+ var route = useUrlGeneratorPathToRegexp();
62
+ return [{
63
+ id: 'search',
64
+ component: 'search',
65
+ name: 'search'
718
66
  }, {
719
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
720
- id: "PNMMo/",
67
+ id: 'types',
68
+ component: 'select',
69
+ name: 'types',
70
+ placeholder: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
71
+ id: "9/t5wK",
721
72
  defaultMessage: [{
722
73
  "type": 0,
723
- "value": "Audios"
74
+ "value": "Type"
724
75
  }]
725
76
  }),
726
- value: 'audio'
727
- }];
728
- var usage = [{
729
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
730
- id: "tmfbUn",
731
- defaultMessage: [{
732
- "type": 0,
733
- "value": "Unused"
734
- }]
735
- }),
736
- value: 'unused'
737
- }, {
738
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
739
- id: "AQ8Aig",
740
- defaultMessage: [{
741
- "type": 0,
742
- "value": "Used"
743
- }]
744
- }),
745
- value: 'used'
746
- }];
747
- var sections = [withType ? {
748
- value: 'types',
749
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
750
- id: "/ca7BX",
751
- defaultMessage: [{
752
- "type": 0,
753
- "value": "Types"
754
- }]
755
- }),
756
- items: types
757
- } : null, {
758
- value: 'recent',
759
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
760
- id: "vYunz+",
761
- defaultMessage: [{
762
- "type": 0,
763
- "value": "Recent searches"
764
- }]
765
- }),
766
- items: recent
77
+ options: [{
78
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
79
+ id: "yHAmDD",
80
+ defaultMessage: [{
81
+ "type": 0,
82
+ "value": "Image"
83
+ }]
84
+ }),
85
+ value: 'image'
86
+ }, {
87
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
88
+ id: "xSERPA",
89
+ defaultMessage: [{
90
+ "type": 0,
91
+ "value": "Video"
92
+ }]
93
+ }),
94
+ value: 'video'
95
+ }, {
96
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
97
+ id: "yQRtgx",
98
+ defaultMessage: [{
99
+ "type": 0,
100
+ "value": "Audio"
101
+ }]
102
+ }),
103
+ value: 'audio'
104
+ }],
105
+ multiple: true
767
106
  }, {
768
- value: 'tags',
769
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
770
- id: "/OM5UY",
107
+ id: 'source',
108
+ component: 'select',
109
+ placeholder: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
110
+ id: "Pc4AD8",
771
111
  defaultMessage: [{
772
112
  "type": 0,
773
- "value": "Tags"
113
+ "value": "Source"
774
114
  }]
775
115
  }),
776
- items: tags
116
+ name: 'source',
117
+ options: [{
118
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
119
+ id: "DYxnlo",
120
+ defaultMessage: [{
121
+ "type": 0,
122
+ "value": "All"
123
+ }]
124
+ }),
125
+ value: 'all'
126
+ }, {
127
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
128
+ id: "AgH3AR",
129
+ defaultMessage: [{
130
+ "type": 0,
131
+ "value": "This micromag"
132
+ }]
133
+ }),
134
+ value: 'video'
135
+ }]
777
136
  }, {
778
- value: 'users',
779
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
780
- id: "pfvDzR",
137
+ id: 'authors',
138
+ component: 'select',
139
+ name: 'authors',
140
+ placeholder: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
141
+ id: "skmuWU",
781
142
  defaultMessage: [{
782
143
  "type": 0,
783
- "value": "Added by"
144
+ "value": "Author"
784
145
  }]
785
146
  }),
786
- items: team
147
+ requestUrl: route('medias.authors') || '/api/medias/authors',
148
+ itemLabelPath: 'name',
149
+ multiple: true
787
150
  }, {
788
- value: 'usage',
789
- label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
790
- id: "mOSkbf",
791
- defaultMessage: [{
792
- "type": 0,
793
- "value": "Usage"
794
- }]
795
- }),
796
- items: usage
797
- }].filter(function (it) {
798
- return it !== null;
799
- });
800
- return {
801
- sources: sources,
802
- sections: sections,
803
- types: types
804
- };
805
- };
806
-
807
- // eslint-disable-next-line import/prefer-default-export
808
- var filtersValue = PropTypes.shape({
809
- search: PropTypes.string
810
- });
811
- PropTypes.shape({
812
- types: PropTypes.arrayOf(PropTypes.string),
813
- tags: PropTypes.arrayOf(PropTypes.string),
814
- users: PropTypes.arrayOf(PropTypes.string),
815
- usage: PropTypes.arrayOf(PropTypes.oneOf(['used', 'unused']))
816
- });
817
-
818
- var styles$8 = {"container":"micromag-media-gallery-forms-dropdown-section-container","dropdownToggle":"micromag-media-gallery-forms-dropdown-section-dropdownToggle","label":"micromag-media-gallery-forms-dropdown-section-label","dropdown":"micromag-media-gallery-forms-dropdown-section-dropdown"};
819
-
820
- var propTypes$8 = {
821
- value: PropTypes.string,
822
- items: PropTypes.arrayOf(PropTypes.shape({
823
- label: core.PropTypes.label,
824
- value: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
825
- active: PropTypes.bool
826
- })),
827
- onChange: PropTypes.func,
828
- className: PropTypes.string
829
- };
830
- var defaultProps$8 = {
831
- value: null,
832
- items: null,
833
- onChange: null,
834
- className: null
835
- };
836
- function DropdownSection(_ref) {
837
- var value = _ref.value,
838
- items = _ref.items,
839
- onChange = _ref.onChange,
840
- className = _ref.className;
841
- var _useState = React.useState(false),
842
- _useState2 = _slicedToArray(_useState, 2),
843
- open = _useState2[0],
844
- setOpen = _useState2[1];
845
- var currentItem = items.find(function (i) {
846
- return i.value === value;
847
- });
848
- var onOpen = React.useCallback(function () {
849
- setOpen(!open);
850
- }, [open, setOpen]);
851
- var onBlur = React.useCallback(function () {
852
- // Work around the event call order
853
- setTimeout(function () {
854
- setOpen(false);
855
- }, 300);
856
- }, [setOpen]);
857
- var onItemClick = React.useCallback(function (e) {
858
- var val = e.target.dataset.value || null;
859
- setOpen(false);
860
- onChange(val);
861
- }, [setOpen]);
862
- return items !== null && items.length > 1 ? /*#__PURE__*/React.createElement("div", {
863
- className: classNames([styles$8.container, 'dropdown', _defineProperty({}, className, className !== null)])
864
- }, /*#__PURE__*/React.createElement("span", {
865
- className: styles$8.label
866
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
867
- id: "9ZdD+Q",
868
- defaultMessage: [{
869
- "type": 0,
870
- "value": "Library for"
871
- }]
872
- })), /*#__PURE__*/React.createElement("button", {
873
- className: classNames([styles$8.dropdownToggle, 'dropdown-toggle', {
874
- open: open === true
875
- }]),
876
- type: "button",
877
- onClick: onOpen,
878
- onBlur: onBlur
879
- }, (currentItem ? currentItem.label : null) || /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
880
- id: "15GBmG",
881
- defaultMessage: [{
882
- "type": 0,
883
- "value": "All"
884
- }]
885
- })), /*#__PURE__*/React.createElement("div", {
886
- className: classNames([styles$8.dropdown, 'dropdown-menu', {
887
- show: open === true
888
- }])
889
- }, items.map(function (_ref3) {
890
- var label = _ref3.label,
891
- itemValue = _ref3.value;
892
- var itemClassNames = classNames(['dropdown-item', {
893
- active: itemValue === value
894
- }]);
895
- return /*#__PURE__*/React.createElement("button", {
896
- className: itemClassNames,
897
- type: "button",
898
- key: "drop-".concat(itemValue),
899
- onClick: onItemClick,
900
- "data-value": itemValue
901
- }, label);
902
- }))) : null;
903
- }
904
- DropdownSection.propTypes = propTypes$8;
905
- DropdownSection.defaultProps = defaultProps$8;
906
-
907
- var styles$7 = {"container":"micromag-media-gallery-forms-search-container","input":"micromag-media-gallery-forms-search-input","active":"micromag-media-gallery-forms-search-active"};
908
-
909
- var propTypes$7 = {
910
- value: PropTypes.string,
911
- loading: PropTypes.bool,
912
- onChange: PropTypes.func,
913
- onFocus: PropTypes.func,
914
- onBlur: PropTypes.func,
915
- onClickIcon: PropTypes.func,
916
- className: PropTypes.string
917
- };
918
- var defaultProps$7 = {
919
- value: null,
920
- loading: false,
921
- onChange: null,
922
- onFocus: null,
923
- onBlur: null,
924
- onClickIcon: null,
925
- className: null
926
- };
927
- var Search = function Search(_ref) {
928
- var value = _ref.value,
929
- loading = _ref.loading,
930
- onChange = _ref.onChange,
931
- onFocus = _ref.onFocus,
932
- onBlur = _ref.onBlur,
933
- onClickIcon = _ref.onClickIcon,
934
- className = _ref.className;
935
- var intl = reactIntl.useIntl();
936
- var onSearchChange = React.useCallback(function (e) {
937
- var newValue = e.currentTarget.value.length > 0 ? e.currentTarget.value : null;
938
- if (onChange !== null) {
939
- onChange(newValue);
940
- }
941
- }, [onChange]);
942
- React.useCallback(function () {
943
- if (onChange !== null) {
944
- onChange('');
945
- }
946
- }, [onChange]);
947
- var onClickSearchIcon = React.useCallback(function () {
948
- if (onClickIcon !== null) {
949
- onClickIcon();
950
- }
951
- }, [onClickIcon]);
952
- return /*#__PURE__*/React.createElement("form", {
953
- method: "post",
954
- className: classNames([styles$7.container, 'w-100', 'border', 'border-dark', 'rounded', _defineProperty({}, className, className !== null)]),
955
- onSubmit: function onSubmit(e) {
956
- return e.preventDefault();
957
- }
958
- }, /*#__PURE__*/React.createElement("div", {
959
- className: "input-group w-100"
960
- }, /*#__PURE__*/React.createElement("button", {
961
- type: "button",
962
- className: "btn",
963
- onClick: onClickSearchIcon
964
- }, /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
965
- icon: loading ? faSpinner.faSpinner : faSearch.faSearch,
966
- spin: loading
967
- })), /*#__PURE__*/React.createElement("input", {
968
- className: classNames([styles$7.input, 'form-control', {
969
- 'bg-light': !!value,
970
- 'text-dark': value
971
- }]),
972
- type: "text",
973
- value: value || '',
974
- placeholder: intl.formatMessage({
975
- id: "n/SxMs",
151
+ id: 'tags',
152
+ component: 'select',
153
+ name: 'tags',
154
+ placeholder: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
155
+ id: "hnLSrX",
976
156
  defaultMessage: [{
977
157
  "type": 0,
978
- "value": "Search medias"
158
+ "value": "Tag"
979
159
  }]
980
160
  }),
981
- onChange: onSearchChange,
982
- onFocus: onFocus,
983
- onBlur: onBlur
984
- }), null));
985
- };
986
- Search.propTypes = propTypes$7;
987
- Search.defaultProps = defaultProps$7;
988
- var SearchForm = Search;
989
-
990
- var styles$6 = {"container":"micromag-media-gallery-forms-tag-dropdown-container","select":"micromag-media-gallery-forms-tag-dropdown-select"};
991
-
992
- var propTypes$6 = {
993
- tags: PropTypes.arrayOf(PropTypes.shape({
994
- label: PropTypes.string,
995
- value: PropTypes.oneOf([PropTypes.string, PropTypes.node]),
996
- active: PropTypes.bool
997
- })),
998
- parent: PropTypes.string,
999
- onChange: PropTypes.func,
1000
- className: PropTypes.string
1001
- };
1002
- var defaultProps$6 = {
1003
- tags: null,
1004
- parent: null,
1005
- onChange: null,
1006
- className: null
1007
- };
1008
- var TagDropdown = function TagDropdown(_ref) {
1009
- var tags = _ref.tags,
1010
- parent = _ref.parent,
1011
- onChange = _ref.onChange,
1012
- className = _ref.className;
1013
- var onItemChange = React.useCallback(function (e) {
1014
- var val = e.target.dataset.value || null;
1015
- onChange(val, parent);
1016
- }, [onChange, parent]);
1017
- return /*#__PURE__*/React.createElement("div", {
1018
- className: classNames([styles$6.container, 'd-flex', 'mt-1', _defineProperty({}, className, className !== null)])
1019
- }, /*#__PURE__*/React.createElement("select", {
1020
- className: classNames(['form-select', styles$6.select])
1021
- }, tags !== null ? tags.map(function (_ref3) {
1022
- var label = _ref3.label,
1023
- value = _ref3.value,
1024
- active = _ref3.active;
1025
- var itemClassNames = classNames([styles$6.tag, 'fs-6', {
1026
- 'btn-primary': active === true
1027
- }]);
1028
- return /*#__PURE__*/React.createElement("option", {
1029
- className: itemClassNames,
1030
- type: "button",
1031
- key: "option-".concat(value),
1032
- onClick: onItemChange,
1033
- "data-value": value,
1034
- value: value
1035
- }, label);
1036
- }) : null));
1037
- };
1038
- TagDropdown.propTypes = propTypes$6;
1039
- TagDropdown.defaultProps = defaultProps$6;
1040
- var TagDropdown$1 = TagDropdown;
1041
-
1042
- var styles$5 = {"container":"micromag-media-gallery-forms-tag-section-container","tag":"micromag-media-gallery-forms-tag-section-tag"};
1043
-
1044
- var propTypes$5 = {
1045
- tags: PropTypes.arrayOf(PropTypes.shape({
1046
- label: PropTypes.string,
1047
- value: PropTypes.oneOf([PropTypes.string, PropTypes.node]),
1048
- active: PropTypes.bool
1049
- })),
1050
- parent: PropTypes.string,
1051
- onChange: PropTypes.func,
1052
- className: PropTypes.string
1053
- };
1054
- var defaultProps$5 = {
1055
- tags: null,
1056
- parent: null,
1057
- onChange: null,
1058
- className: null
1059
- };
1060
- var TagSection = function TagSection(_ref) {
1061
- var tags = _ref.tags,
1062
- parent = _ref.parent,
1063
- onChange = _ref.onChange,
1064
- className = _ref.className;
1065
- var onItemChange = React.useCallback(function (e) {
1066
- var val = e.target.dataset.value || null;
1067
- onChange(val, parent);
1068
- }, [onChange, parent]);
1069
- return /*#__PURE__*/React.createElement("div", {
1070
- className: classNames([styles$5.container, 'd-flex', 'mt-1', _defineProperty({}, className, className !== null)])
1071
- }, tags !== null ? tags.map(function (_ref3) {
1072
- var label = _ref3.label,
1073
- value = _ref3.value,
1074
- active = _ref3.active;
1075
- var itemClassNames = classNames([styles$5.tag, 'btn', 'btn-sm', 'mb-1', 'me-1', 'p-1', 'btn-secondary', 'text-truncate', {
1076
- 'btn-primary': active === true
1077
- // 'btn-outline-light': active === false,
1078
- }]);
1079
- return /*#__PURE__*/React.createElement("button", {
1080
- className: itemClassNames,
1081
- type: "button",
1082
- key: "tag-".concat(value),
1083
- onClick: onItemChange,
1084
- "data-value": value
1085
- }, label);
1086
- }) : null);
1087
- };
1088
- TagSection.propTypes = propTypes$5;
1089
- TagSection.defaultProps = defaultProps$5;
1090
- var TagSection$1 = TagSection;
1091
-
1092
- var styles$4 = {"container":"micromag-media-gallery-forms-search-filters-container","closeBtn":"micromag-media-gallery-forms-search-filters-closeBtn","section":"micromag-media-gallery-forms-search-filters-section","title":"micromag-media-gallery-forms-search-filters-title","tags":"micromag-media-gallery-forms-search-filters-tags"};
1093
-
1094
- var propTypes$4 = {
1095
- filters: PropTypes.object,
1096
- // eslint-disable-line
1097
- sections: PropTypes.arrayOf(PropTypes.shape({})),
1098
- onChange: PropTypes.func,
1099
- onClose: PropTypes.func,
1100
- className: PropTypes.string
1101
- };
1102
- var defaultProps$4 = {
1103
- filters: null,
1104
- sections: [],
1105
- onChange: null,
1106
- onClose: null,
1107
- className: null
1108
- };
1109
- var SearchFilters = function SearchFilters(_ref) {
1110
- var filters = _ref.filters,
1111
- sections = _ref.sections,
1112
- onChange = _ref.onChange,
1113
- onClose = _ref.onClose,
1114
- className = _ref.className;
1115
- var intl = reactIntl.useIntl();
1116
- var getActive = React.useCallback(function (items, sectionFilters) {
1117
- return items !== null ? items.map(function (it) {
1118
- return _objectSpread(_objectSpread({}, it), {}, {
1119
- active: sectionFilters ? !!sectionFilters.find(function (f) {
1120
- return f === it.value;
1121
- }) : false
1122
- });
1123
- }) : [];
1124
- }, []);
1125
- var activeSections = React.useMemo(function () {
1126
- return sections.map(function (section) {
1127
- return _objectSpread(_objectSpread({}, section), {}, {
1128
- items: getActive(section.items, filters[section.value])
1129
- });
1130
- });
1131
- }, [getActive, sections, filters]);
1132
- var onSectionChange = React.useCallback(function (data, section) {
1133
- var val = filters[section] ? filters[section] : [];
1134
- var found = !!val.find(function (f) {
1135
- return f === data;
1136
- });
1137
- if (found) {
1138
- onChange(section, val.filter(function (f) {
1139
- return f !== data;
1140
- }));
1141
- } else if (data) {
1142
- if (section === 'recent') {
1143
- onChange('search', data);
1144
- } else if (section === 'usage') {
1145
- onChange(section, [data]);
1146
- } else {
1147
- onChange(section, [].concat(_toConsumableArray(val), [data]));
1148
- }
1149
- }
1150
- }, [filters, onChange]);
1151
- return /*#__PURE__*/React.createElement("div", {
1152
- className: classNames([styles$4.container, 'flex-nowrap', 'mt-1', _defineProperty({}, className, className !== null)])
1153
- }, activeSections.length > 0 ? /*#__PURE__*/React.createElement("div", {
1154
- className: classNames(['bg-dark', 'flex-nowrap', 'text-dark', 'py-1', 'px-3', 'rounded'])
1155
- }, /*#__PURE__*/React.createElement(components.Button, {
1156
- className: classNames([styles$4.closeBtn, 'py-1', 'px-1', 'text-light']),
1157
- icon: /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
1158
- icon: faTimes.faTimes
1159
- }),
1160
- onClick: onClose,
1161
- title: intl.formatMessage({
1162
- id: "yCXMzz",
1163
- defaultMessage: [{
1164
- "type": 0,
1165
- "value": "Close"
1166
- }]
1167
- })
1168
- }), activeSections.map(function (_ref3) {
1169
- var value = _ref3.value,
1170
- label = _ref3.label,
1171
- items = _ref3.items;
1172
- return items.length > 0 ? /*#__PURE__*/React.createElement("div", {
1173
- key: "filter-".concat(value),
1174
- className: classNames([styles$4.section, 'py-2'])
1175
- }, /*#__PURE__*/React.createElement("p", {
1176
- className: classNames([styles$4.title, 'm-0'])
1177
- }, label), value === 'tags' || value === 'recent' || value === 'users' ? /*#__PURE__*/React.createElement(TagDropdown$1, {
1178
- className: classNames([styles$4.tags]),
1179
- tags: items,
1180
- parent: value,
1181
- onChange: onSectionChange
1182
- }) : /*#__PURE__*/React.createElement(TagSection$1, {
1183
- className: classNames([styles$4.tags]),
1184
- tags: items,
1185
- parent: value,
1186
- onChange: onSectionChange
1187
- })) : null;
1188
- })) : null);
1189
- };
1190
- SearchFilters.propTypes = propTypes$4;
1191
- SearchFilters.defaultProps = defaultProps$4;
1192
- var SearchFilters$1 = SearchFilters;
1193
-
1194
- var styles$3 = {"container":"micromag-media-gallery-buttons-close-container"};
1195
-
1196
- var _excluded = ["className"];
1197
- var propTypes$3 = {
1198
- className: PropTypes.string
1199
- };
1200
- var defaultProps$3 = {
1201
- className: null
1202
- };
1203
- var CloseButton = function CloseButton(_ref) {
1204
- var className = _ref.className,
1205
- props = _objectWithoutProperties(_ref, _excluded);
1206
- return /*#__PURE__*/React.createElement(components.Button, Object.assign({
1207
- className: classNames([styles$3.container, _defineProperty({}, className, className !== null)]),
1208
- withoutStyle: true,
1209
- icon: /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
1210
- icon: faTimes.faTimes,
1211
- className: styles$3.icon
1212
- }),
1213
- iconPosition: "right"
1214
- }, props));
1215
- };
1216
- CloseButton.propTypes = propTypes$3;
1217
- CloseButton.defaultProps = defaultProps$3;
1218
- var CloseButton$1 = CloseButton;
1219
-
1220
- var styles$2 = {"container":"micromag-media-gallery-partials-active-filters-container","heading":"micromag-media-gallery-partials-active-filters-heading","title":"micromag-media-gallery-partials-active-filters-title","resetButton":"micromag-media-gallery-partials-active-filters-resetButton","activeTag":"micromag-media-gallery-partials-active-filters-activeTag"};
1221
-
1222
- var propTypes$2 = {
1223
- filters: PropTypes.shape({
1224
- types: PropTypes.arrayOf(PropTypes.string),
1225
- tags: PropTypes.arrayOf(PropTypes.string),
1226
- users: PropTypes.arrayOf(PropTypes.string),
1227
- usage: PropTypes.arrayOf(PropTypes.oneOf(['used', 'unused']))
1228
- }),
1229
- onChange: PropTypes.func,
1230
- onReset: PropTypes.func,
1231
- sections: PropTypes.arrayOf(PropTypes.shape({})),
1232
- className: PropTypes.string
1233
- };
1234
- var defaultProps$2 = {
1235
- filters: null,
1236
- onChange: null,
1237
- onReset: null,
1238
- sections: [],
1239
- className: null
1240
- };
1241
- function ActiveFilters(_ref) {
1242
- var filters = _ref.filters,
1243
- onChange = _ref.onChange,
1244
- onReset = _ref.onReset,
1245
- sections = _ref.sections,
1246
- className = _ref.className;
1247
- var handleReset = React.useCallback(function () {
1248
- if (onReset !== null) {
1249
- onReset();
1250
- }
1251
- }, [onReset]);
1252
- var removeFilter = React.useCallback(function (key, activeValue) {
1253
- var newFilterValue = filters[key].filter(function (it) {
1254
- return it !== activeValue;
1255
- });
1256
- var newValue = newFilterValue.length > 0 ? newFilterValue : null;
1257
- if (onChange !== null) {
1258
- onChange(key, newValue);
1259
- }
1260
- }, [onChange, filters]);
1261
- var hasValue = Object.keys(filters).reduce(function (oneHasValue, key) {
1262
- return oneHasValue || filters[key] !== null;
1263
- }, false);
1264
- return /*#__PURE__*/React.createElement("div", {
1265
- className: classNames(['w-100', styles$2.container, _defineProperty({}, className, className)])
1266
- }, hasValue ? /*#__PURE__*/React.createElement("div", {
1267
- className: styles$2.heading
1268
- }, /*#__PURE__*/React.createElement("div", {
1269
- className: styles$2.title
1270
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1271
- id: "t2cFdl",
1272
- defaultMessage: [{
1273
- "type": 0,
1274
- "value": "Active filters"
1275
- }]
1276
- })), /*#__PURE__*/React.createElement(CloseButton$1, {
1277
- className: styles$2.resetButton,
1278
- onClick: handleReset
1279
- }, /*#__PURE__*/React.createElement("u", null, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1280
- id: "/T/UDH",
1281
- defaultMessage: [{
1282
- "type": 0,
1283
- "value": "Remove all"
1284
- }]
1285
- })))) : null, filters !== null ? Object.keys(filters).map(function (key) {
1286
- var section = sections.find(function (s) {
1287
- return s.value === key;
1288
- });
1289
- return section && filters[key] !== null ? filters[key].map(function (activeValue) {
1290
- var current = section.items.find(function (s) {
1291
- return s.value === activeValue;
1292
- });
1293
- var _ref3 = current || {},
1294
- _ref3$label = _ref3.label,
1295
- label = _ref3$label === void 0 ? '' : _ref3$label;
1296
- return /*#__PURE__*/React.createElement(components.Button, {
1297
- className: styles$2.activeTag,
1298
- key: "filter-button-".concat(activeValue),
1299
- type: "submit",
1300
- size: "sm",
1301
- label: /*#__PURE__*/React.createElement("span", null, section.label, " : ", label),
1302
- theme: "secondary",
1303
- icon: /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
1304
- icon: faTimes.faTimes
1305
- }),
1306
- iconPosition: "right",
1307
- onClick: function onClick() {
1308
- return removeFilter(key, activeValue);
1309
- }
1310
- });
1311
- }) : null;
1312
- }) : null);
161
+ requestUrl: route('medias.tags.get') || '/api/medias/tags',
162
+ itemLabelPath: 'name',
163
+ itemValuePath: 'id',
164
+ multiple: true,
165
+ // requestQuery: { page: 1 },
166
+ paginated: true
167
+ // options: null,
168
+ }];
1313
169
  }
1314
- ActiveFilters.propTypes = propTypes$2;
1315
- ActiveFilters.defaultProps = defaultProps$2;
1316
-
1317
- var styles$1 = {"container":"micromag-media-gallery-partials-navbar-container","inner":"micromag-media-gallery-partials-navbar-inner","mediaPreview":"micromag-media-gallery-partials-navbar-mediaPreview","thumbnail":"micromag-media-gallery-partials-navbar-thumbnail","mediaLabel":"micromag-media-gallery-partials-navbar-mediaLabel"};
1318
-
1319
- var propTypes$1 = {
1320
- types: PropTypes.arrayOf(PropTypes.string),
1321
- filters: filtersValue,
1322
- media: core.PropTypes.media,
1323
- selectedMedia: core.PropTypes.media,
1324
- storyId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
1325
- tags: core.PropTypes.tags,
1326
- authors: PropTypes.arrayOf(PropTypes.shape({
1327
- name: PropTypes.string
1328
- })),
1329
- loading: PropTypes.bool,
1330
- withoutSource: PropTypes.bool,
1331
- withoutType: PropTypes.bool,
1332
- onClickAdd: PropTypes.func,
1333
- onClickItem: PropTypes.func,
1334
- onClickItemInfo: PropTypes.func,
1335
- onClickClear: PropTypes.func,
1336
- // TODO: still needed?
1337
- onFocusSearch: PropTypes.func,
1338
- onFiltersChange: PropTypes.func,
1339
- onClickBack: PropTypes.func,
1340
- className: PropTypes.string
1341
- };
1342
- var defaultProps$1 = {
1343
- types: null,
1344
- filters: null,
1345
- media: null,
1346
- selectedMedia: null,
1347
- storyId: null,
1348
- tags: [],
1349
- authors: [],
1350
- loading: false,
1351
- withoutSource: false,
1352
- withoutType: true,
1353
- onClickAdd: null,
1354
- onClickItem: null,
1355
- onClickItemInfo: null,
1356
- onClickClear: null,
1357
- onFocusSearch: null,
1358
- onFiltersChange: null,
1359
- onClickBack: null,
1360
- className: null
1361
- };
1362
- function Navbar(_ref) {
1363
- var types = _ref.types,
1364
- filters = _ref.filters,
1365
- media = _ref.media,
1366
- selectedMedia = _ref.selectedMedia,
1367
- storyId = _ref.storyId,
1368
- tags = _ref.tags,
1369
- authors = _ref.authors,
1370
- loading = _ref.loading,
1371
- withoutSource = _ref.withoutSource,
1372
- withoutType = _ref.withoutType,
1373
- className = _ref.className,
1374
- onClickAdd = _ref.onClickAdd,
1375
- onClickItem = _ref.onClickItem,
1376
- onClickItemInfo = _ref.onClickItemInfo,
1377
- onClickClear = _ref.onClickClear,
1378
- onFocusSearch = _ref.onFocusSearch,
1379
- onFiltersChange = _ref.onFiltersChange,
1380
- onClickBack = _ref.onClickBack;
1381
- var intl = reactIntl.useIntl();
1382
- var throttle = React.useRef(null);
1383
- var _useState = React.useState(false),
1384
- _useState2 = _slicedToArray(_useState, 2),
1385
- open = _useState2[0],
1386
- setOpen = _useState2[1];
1387
170
 
1388
- // TODO: get data from api for real testing
171
+ var styles = {"container":"micromag-media-gallery-new-media-gallery-container","browser":"micromag-media-gallery-new-media-gallery-browser"};
1389
172
 
1390
- var _useMediasRecentSearc = data.useMediasRecentSearches(),
1391
- getSearches = _useMediasRecentSearc.getSearches,
1392
- createSearch = _useMediasRecentSearc.createSearch;
1393
- var recent = React.useMemo(function () {
1394
- return getSearches();
1395
- }, [getSearches]);
1396
- var _useSearchFilters = useSearchFilters({
1397
- recent: recent.map(function (val) {
1398
- return {
1399
- value: val,
1400
- label: val
1401
- };
1402
- }),
1403
- tags: tags !== null ? tags.map(function (t) {
1404
- return {
1405
- value: t.name,
1406
- label: t.name
1407
- };
1408
- }) : [],
1409
- team: authors || [],
1410
- withType: !withoutType,
1411
- storyId: storyId
1412
- }),
1413
- sources = _useSearchFilters.sources,
1414
- sections = _useSearchFilters.sections;
1415
- var searchValue = filters !== null ? filters.search || null : null;
1416
- var hasFilter = filters !== null ? Object.keys(filters).reduce(function (acc, val) {
1417
- if (val !== 'type' && val !== 'search' && val !== 'source' && filters[val] !== null && filters[val].length > 0) {
1418
- return true;
1419
- }
1420
- return acc;
1421
- }, false) : false;
1422
- var onFilterChange = React.useCallback(function (type, value) {
1423
- var isOpen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1424
- var newFiltersValue = _objectSpread(_objectSpread({}, filters), {}, _defineProperty({}, type, value));
1425
- if (onFiltersChange !== null) {
1426
- onFiltersChange(newFiltersValue);
1427
- }
1428
- setOpen(isOpen);
1429
- }, [filters, onFiltersChange, setOpen]);
1430
- var onFiltersReset = React.useCallback(function () {
1431
- onFiltersChange({
1432
- type: filters.type || null,
1433
- search: filters.search || null,
1434
- source: filters.source || null
1435
- });
1436
- setOpen(false);
1437
- }, [filters, onFiltersChange]);
1438
- var onSearchChange = React.useCallback(function (value) {
1439
- if (throttle.current !== null) {
1440
- clearTimeout(throttle.current);
1441
- }
1442
- throttle.current = setTimeout(function () {
1443
- createSearch(value);
1444
- throttle.current = null;
1445
- }, 5000);
1446
- onFilterChange('search', value, !!value);
1447
- setOpen(false);
1448
- }, [onFilterChange, createSearch, setOpen, throttle]);
1449
- var onSourceChange = React.useCallback(function (value) {
1450
- onFilterChange('source', value);
1451
- }, [onFilterChange]);
1452
- var onSearchFocus = React.useCallback(function () {
1453
- if (onFocusSearch !== null) {
1454
- onFocusSearch();
1455
- }
1456
- }, [onFocusSearch]);
1457
- var onCloseFilters = React.useCallback(function () {
1458
- setOpen(false);
1459
- }, [setOpen]);
1460
- var onToggleMenu = React.useCallback(function () {
1461
- setOpen(!open);
1462
- }, [open, setOpen]);
1463
- var onClickRemove = React.useCallback(function () {
1464
- if (onClickClear !== null) {
1465
- onClickClear();
1466
- } else if (onClickItem !== null) {
1467
- onClickItem(null);
1468
- }
1469
- }, [onClickClear, onClickItem]);
1470
- var uploadMessage = React.useMemo(function () {
1471
- var message = /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1472
- id: "3Ap0C1",
1473
- defaultMessage: [{
1474
- "type": 0,
1475
- "value": "Upload a media"
1476
- }]
1477
- });
1478
- if (types !== null) {
1479
- if (types.indexOf('video') !== -1 && types.indexOf('image') !== -1) {
1480
- message = /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1481
- id: "KK5teQ",
1482
- defaultMessage: [{
1483
- "type": 0,
1484
- "value": "Upload a visual file"
1485
- }]
1486
- });
1487
- } else if (types.indexOf('video') !== -1) {
1488
- message = /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1489
- id: "WeD4nB",
1490
- defaultMessage: [{
1491
- "type": 0,
1492
- "value": "Upload a video file"
1493
- }]
1494
- });
1495
- } else if (types.indexOf('image') !== -1) {
1496
- message = /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1497
- id: "KdAKt7",
1498
- defaultMessage: [{
1499
- "type": 0,
1500
- "value": "Upload an image file"
1501
- }]
1502
- });
1503
- } else if (types.indexOf('audio') !== -1) {
1504
- message = /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1505
- id: "6W4St0",
1506
- defaultMessage: [{
1507
- "type": 0,
1508
- "value": "Upload an audio file"
1509
- }]
1510
- });
1511
- } else if (types.indexOf('subtitle') !== -1) {
1512
- message = /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1513
- id: "BAfC6s",
1514
- defaultMessage: [{
1515
- "type": 0,
1516
- "value": "Upload a closed captions file"
1517
- }]
1518
- });
1519
- }
1520
- }
1521
- return message;
1522
- }, [types]);
1523
- return /*#__PURE__*/React.createElement("nav", {
1524
- className: classNames([styles$1.container, 'navbar', _defineProperty({}, className, className !== null)])
1525
- }, /*#__PURE__*/React.createElement("div", {
1526
- className: classNames([styles$1.inner])
1527
- }, media === null ? /*#__PURE__*/React.createElement("div", {
1528
- className: classNames(['list-group-item rounded w-100 mw-100 navbar-text mb-2', {
1529
- 'border border-primary bg-dark py-2 px-2': selectedMedia !== null
1530
- }])
1531
- }, selectedMedia !== null ? /*#__PURE__*/React.createElement("div", {
1532
- className: ""
1533
- }, /*#__PURE__*/React.createElement("div", {
1534
- className: "d-flex align-items-center mb-2 overflow-hidden"
1535
- }, /*#__PURE__*/React.createElement(components.Media, {
1536
- className: styles$1.mediaPreview,
1537
- thumbnailClassName: styles$1.thumbnail,
1538
- thumbnail: selectedMedia === null || selectedMedia === void 0 ? void 0 : selectedMedia.thumbnail_url,
1539
- thumbnailAlign: "center"
1540
- }), /*#__PURE__*/React.createElement("span", {
1541
- className: classNames([styles$1.mediaLabel, 'd-inline-block', 'text-break', 'mx-1', 'me-2'])
1542
- }, selectedMedia.name || /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1543
- id: "fVqgfl",
1544
- defaultMessage: [{
1545
- "type": 0,
1546
- "value": "[no title]"
1547
- }]
1548
- }))), /*#__PURE__*/React.createElement("div", {
1549
- className: "d-flex w-100 align-content-center justify-content-between"
1550
- }, /*#__PURE__*/React.createElement(components.Button, {
1551
- onClick: function onClick() {
1552
- return onClickItemInfo(selectedMedia);
1553
- },
1554
- theme: "secondary",
1555
- size: "sm",
1556
- iconPosition: "right",
1557
- icon: /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
1558
- icon: faInfoCircle.faInfoCircle
1559
- }),
1560
- outline: true
1561
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1562
- id: "iCf/MP",
1563
- defaultMessage: [{
1564
- "type": 0,
1565
- "value": "Edit"
1566
- }]
1567
- })), /*#__PURE__*/React.createElement(components.Button, {
1568
- theme: "secondary",
1569
- size: "sm",
1570
- outline: true,
1571
- iconPosition: "right",
1572
- icon: /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
1573
- icon: faTimes.faTimes
1574
- }),
1575
- onClick: onClickRemove,
1576
- title: intl.formatMessage({
1577
- id: "UG3SXh",
1578
- defaultMessage: [{
1579
- "type": 0,
1580
- "value": "Remove"
1581
- }]
1582
- })
1583
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1584
- id: "8TbpT7",
1585
- defaultMessage: [{
1586
- "type": 0,
1587
- "value": "Remove"
1588
- }]
1589
- })))) : /*#__PURE__*/React.createElement(components.Button, {
1590
- className: "w-100",
1591
- theme: "primary",
1592
- icon: /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
1593
- icon: faPlus.faPlus
1594
- }),
1595
- onClick: onClickAdd,
1596
- title: intl.formatMessage({
1597
- id: "Tt4jN1",
1598
- defaultMessage: [{
1599
- "type": 0,
1600
- "value": "Add"
1601
- }]
1602
- })
1603
- }, /*#__PURE__*/React.createElement("span", {
1604
- className: "ps-2"
1605
- }, uploadMessage))) : null, !withoutSource && media === null && sources !== null && sources.length > 1 ? /*#__PURE__*/React.createElement("div", {
1606
- className: "mb-2 d-flex w-100 align-items-center flex-nowrap"
1607
- }, /*#__PURE__*/React.createElement(DropdownSection, {
1608
- items: sources,
1609
- value: filters.source || null,
1610
- onChange: onSourceChange
1611
- })) : null, media !== null ? /*#__PURE__*/React.createElement("div", {
1612
- className: "w-100 d-flex flex-nowrap justify-content-between"
1613
- }, /*#__PURE__*/React.createElement("form", {
1614
- className: classNames(['d-flex', 'me-2'])
1615
- }, /*#__PURE__*/React.createElement(components.Button, {
1616
- theme: "secondary",
1617
- outline: true,
1618
- size: "sm",
1619
- icon: /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
1620
- icon: faChevronLeft.faChevronLeft
1621
- }),
1622
- onClick: onClickBack
1623
- })), /*#__PURE__*/React.createElement("strong", {
1624
- className: "navbar-text me-auto w-100 text-truncate text-light"
1625
- }, media !== null ? media.name : null)) : null, media === null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1626
- className: "d-flex w-100 flex-nowrap justify-content-between"
1627
- }, /*#__PURE__*/React.createElement(SearchForm, {
1628
- value: searchValue,
1629
- onChange: onSearchChange,
1630
- onFocus: onSearchFocus,
1631
- onClickIcon: onToggleMenu,
1632
- loading: loading,
1633
- className: classNames(['d-flex'])
1634
- })), open ? /*#__PURE__*/React.createElement("div", {
1635
- className: "d-flex w-100 my-1 flex-nowrap justify-content-between"
1636
- }, /*#__PURE__*/React.createElement(SearchFilters$1, {
1637
- filters: filters,
1638
- sections: sections,
1639
- onChange: onFilterChange,
1640
- onClose: onCloseFilters
1641
- })) : null) : null, hasFilter && !open && media === null ? /*#__PURE__*/React.createElement("div", {
1642
- className: "list-group-item py-2 px-2 d-flex w-100 my-2 flex-nowrap justify-content-between"
1643
- }, /*#__PURE__*/React.createElement(ActiveFilters, {
1644
- filters: filters,
1645
- sections: sections,
1646
- onChange: onFilterChange,
1647
- onReset: onFiltersReset
1648
- })) : null));
1649
- }
1650
- Navbar.propTypes = propTypes$1;
1651
- Navbar.defaultProps = defaultProps$1;
173
+ // const videoTypes = ['video', 'image/gif'];
1652
174
 
1653
- var styles = {"container":"micromag-media-gallery-container","metadataOpened":"micromag-media-gallery-metadataOpened","gallery":"micromag-media-gallery-gallery","mediaMetadata":"micromag-media-gallery-mediaMetadata","content":"micromag-media-gallery-content","loading":"micromag-media-gallery-loading"};
1654
-
1655
- var videoTypes = ['video', 'image/gif'];
1656
175
  var propTypes = {
1657
- type: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
176
+ value: PropTypes.shape({
177
+ id: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
178
+ }),
179
+ types: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
1658
180
  source: PropTypes.string,
181
+ filters: PropTypes.arrayOf(PropTypes.shape({
182
+ id: PropTypes.string
183
+ })),
1659
184
  isPicker: PropTypes.bool,
1660
- isSmall: PropTypes.bool,
1661
- withoutTitle: PropTypes.bool,
1662
- withoutSource: PropTypes.bool,
1663
- withoutType: PropTypes.bool,
185
+ multiple: PropTypes.bool,
1664
186
  medias: core.PropTypes.medias,
1665
- selectedMedia: core.PropTypes.media,
187
+ buttons: PropTypes.arrayOf(PropTypes.shape({})),
1666
188
  className: PropTypes.string,
1667
- navbarClassName: PropTypes.string,
1668
- onChange: PropTypes.func,
1669
- onClickMedia: PropTypes.func,
1670
- onClearMedia: PropTypes.func
189
+ onChange: PropTypes.func
1671
190
  };
1672
191
  var defaultProps = {
1673
- type: null,
192
+ value: null,
193
+ types: null,
1674
194
  source: 'all',
195
+ filters: null,
1675
196
  isPicker: false,
1676
- isSmall: false,
1677
- withoutTitle: false,
1678
- withoutSource: false,
1679
- withoutType: true,
197
+ multiple: false,
1680
198
  medias: null,
1681
- selectedMedia: null,
199
+ buttons: null,
1682
200
  className: null,
1683
- navbarClassName: null,
1684
- onChange: null,
1685
- onClickMedia: null,
1686
- onClearMedia: null
201
+ onChange: null
1687
202
  };
1688
203
  function MediaGallery(_ref) {
1689
- var type = _ref.type,
204
+ var value = _ref.value,
205
+ types = _ref.types,
1690
206
  source = _ref.source,
207
+ filters$1 = _ref.filters,
1691
208
  isPicker = _ref.isPicker,
1692
- isSmall = _ref.isSmall,
1693
- withoutTitle = _ref.withoutTitle,
1694
- withoutSource = _ref.withoutSource,
1695
- withoutType = _ref.withoutType,
209
+ multiple = _ref.multiple,
1696
210
  initialMedias = _ref.medias,
1697
- selectedMedia = _ref.selectedMedia,
211
+ buttons = _ref.buttons,
1698
212
  className = _ref.className,
1699
- navbarClassName = _ref.navbarClassName,
1700
- onChange = _ref.onChange,
1701
- onClickMedia = _ref.onClickMedia,
1702
- onClearMedia = _ref.onClearMedia;
1703
- var intl = reactIntl.useIntl();
1704
- // Base state for filters
1705
- var defaultFilters = {
1706
- type: type,
1707
- source: source
1708
- };
1709
-
1710
- // Filters
1711
- var throttle = React.useRef(null);
1712
- var _useState = React.useState(defaultFilters),
1713
- _useState2 = _slicedToArray(_useState, 2),
1714
- queryValue = _useState2[0],
1715
- setQueryValue = _useState2[1];
1716
- var _useState3 = React.useState(defaultFilters),
1717
- _useState4 = _slicedToArray(_useState3, 2),
1718
- filtersValue = _useState4[0],
1719
- setFiltersValue = _useState4[1];
1720
- var story = contexts.useStory();
1721
- var _ref2 = story || {},
1722
- _ref2$id = _ref2.id,
1723
- storyId = _ref2$id === void 0 ? null : _ref2$id;
1724
- var _useMediaTags = data.useMediaTags(),
1725
- tags = _useMediaTags.tags;
1726
- var _useMediaAuthors = data.useMediaAuthors(),
1727
- authors = _useMediaAuthors.authors;
1728
- var onFiltersChange = React.useCallback(function (value) {
1729
- if (throttle.current !== null) {
1730
- clearTimeout(throttle.current);
1731
- }
1732
- throttle.current = setTimeout(function () {
1733
- setQueryValue(value);
1734
- throttle.current = null;
1735
- }, 500);
1736
- setFiltersValue(value);
1737
- }, [setFiltersValue, setQueryValue, throttle]);
1738
- var _useState5 = React.useState(initialMedias),
1739
- _useState6 = _slicedToArray(_useState5, 2),
1740
- defaultItems = _useState6[0],
1741
- setDefaultItems = _useState6[1];
1742
-
1743
- // Items
1744
- var _useMedias = data.useMedias(queryValue, 1, 30, {
1745
- pages: defaultItems
1746
- }),
1747
- loadedMedias = _useMedias.items,
1748
- _useMedias$loading = _useMedias.loading,
1749
- loading = _useMedias$loading === void 0 ? false : _useMedias$loading,
1750
- _useMedias$loadNextPa = _useMedias.loadNextPage,
1751
- loadNextPage = _useMedias$loadNextPa === void 0 ? null : _useMedias$loadNextPa,
1752
- _useMedias$allLoaded = _useMedias.allLoaded,
1753
- allLoaded = _useMedias$allLoaded === void 0 ? false : _useMedias$allLoaded;
1754
-
1755
- // Temporary type filter
1756
- var _useState7 = React.useState([]),
1757
- _useState8 = _slicedToArray(_useState7, 2),
1758
- addedMedias = _useState8[0],
1759
- setAddedMedias = _useState8[1];
1760
- var medias = React.useMemo(function () {
1761
- var allMedias = [].concat(_toConsumableArray(addedMedias), _toConsumableArray(loadedMedias || []));
1762
- return allMedias.length > 0 ? allMedias : null;
1763
- }, [loadedMedias, addedMedias]);
1764
-
1765
- // Medias
1766
- var _useState9 = React.useState(null),
1767
- _useState10 = _slicedToArray(_useState9, 2),
1768
- metadataMedia = _useState10[0],
1769
- setMetadataMedia = _useState10[1];
1770
- var onClickItem = React.useCallback(function (media) {
1771
- var _ref3 = media || {},
1772
- _ref3$id = _ref3.id,
1773
- mediaId = _ref3$id === void 0 ? null : _ref3$id;
1774
- var _ref4 = selectedMedia || {},
1775
- _ref4$id = _ref4.id,
1776
- selectedId = _ref4$id === void 0 ? null : _ref4$id;
1777
- var different = mediaId !== selectedId;
1778
- if (!isPicker) {
1779
- setMetadataMedia(media);
1780
- } else if (onClickMedia !== null) {
1781
- if (different) {
1782
- onClickMedia(media);
213
+ onChange = _ref.onChange;
214
+ var api = data.useApi();
215
+ var mediasApi = React.useMemo(function () {
216
+ return {
217
+ get: function get() {
218
+ var _api$medias;
219
+ return (_api$medias = api.medias).get.apply(_api$medias, arguments);
220
+ },
221
+ getTrashed: function getTrashed() {
222
+ var _api$medias2;
223
+ return (_api$medias2 = api.medias).get.apply(_api$medias2, arguments);
224
+ },
225
+ find: function find() {
226
+ var _api$medias3;
227
+ return (_api$medias3 = api.medias).find.apply(_api$medias3, arguments);
228
+ },
229
+ create: function create() {
230
+ var _api$medias4;
231
+ return (_api$medias4 = api.medias).create.apply(_api$medias4, arguments);
232
+ },
233
+ update: function update() {
234
+ var _api$medias5;
235
+ return (_api$medias5 = api.medias).update.apply(_api$medias5, arguments);
236
+ },
237
+ "delete": function _delete() {
238
+ var _api$medias6;
239
+ return (_api$medias6 = api.medias)["delete"].apply(_api$medias6, arguments);
240
+ },
241
+ trash: function trash() {
242
+ var _api$medias7;
243
+ return (_api$medias7 = api.medias)["delete"].apply(_api$medias7, arguments);
1783
244
  }
1784
- }
1785
- }, [isPicker, setMetadataMedia, onClickMedia, selectedMedia]);
1786
- var onClickRemoveItem = React.useCallback(function () {
1787
- setMetadataMedia(null);
1788
- if (onClickMedia !== null) {
1789
- onClickMedia(null);
1790
- }
1791
- }, [isPicker, setMetadataMedia, onClickMedia]);
1792
- var onClickItemInfo = React.useCallback(function (media) {
1793
- return setMetadataMedia(media);
1794
- }, [setMetadataMedia]);
1795
- var onMetadataClickClose = React.useCallback(function () {
1796
- setMetadataMedia(null);
1797
- }, [setMetadataMedia]);
1798
- var onMetadataClickDelete = React.useCallback(function () {
1799
- var mediaId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1800
- var _ref5 = selectedMedia || {},
1801
- _ref5$id = _ref5.id,
1802
- selectedId = _ref5$id === void 0 ? null : _ref5$id;
1803
- if (mediaId !== null && mediaId === selectedId && onClickMedia !== null) {
1804
- onClickMedia(null);
1805
- }
1806
- setMetadataMedia(null);
1807
- }, [setMetadataMedia, onClickMedia, selectedMedia]);
1808
- var onMetadataChange = React.useCallback(function (val) {
1809
- setMetadataMedia(val);
1810
- var _ref6 = val || {},
1811
- _ref6$id = _ref6.id,
1812
- mediaId = _ref6$id === void 0 ? null : _ref6$id;
1813
- var _ref7 = selectedMedia || {},
1814
- _ref7$id = _ref7.id,
1815
- selectedId = _ref7$id === void 0 ? null : _ref7$id;
1816
- if (onChange !== null && mediaId === selectedId) {
1817
- onChange(val);
1818
- }
1819
- }, [setMetadataMedia, selectedMedia, onChange]);
1820
- React.useEffect(function () {
1821
- if (metadataMedia !== null) {
1822
- window.scrollTo(0, 0);
1823
- }
1824
- }, [metadataMedia]);
1825
-
1826
- // Navigation
1827
- var onClickBack = React.useCallback(function () {
1828
- setMetadataMedia(null);
1829
- }, [setMetadataMedia, setDefaultItems, setQueryValue]);
245
+ };
246
+ }, [api]);
1830
247
 
1831
248
  // Upload modal
1832
- var _useState11 = React.useState(false),
1833
- _useState12 = _slicedToArray(_useState11, 2),
1834
- uploading = _useState12[0],
1835
- setUploading = _useState12[1];
1836
- var _useState13 = React.useState(false),
1837
- _useState14 = _slicedToArray(_useState13, 2),
1838
- uploadModalOpened = _useState14[0],
1839
- setUploadModalOpened = _useState14[1];
1840
- var _useMediaCreate = data.useMediaCreate(),
1841
- createMedia = _useMediaCreate.create;
1842
- var onClickAdd = React.useCallback(function () {
249
+ var _useState = React.useState([]),
250
+ _useState2 = _slicedToArray(_useState, 2),
251
+ addedMedias = _useState2[0],
252
+ setAddedMedias = _useState2[1];
253
+ var _useState3 = React.useState(false),
254
+ _useState4 = _slicedToArray(_useState3, 2);
255
+ _useState4[0];
256
+ var setUploading = _useState4[1];
257
+ var _useState5 = React.useState(false),
258
+ _useState6 = _slicedToArray(_useState5, 2),
259
+ uploadModalOpened = _useState6[0],
260
+ setUploadModalOpened = _useState6[1];
261
+ React.useCallback(function () {
1843
262
  return setUploadModalOpened(true);
1844
263
  }, [setUploadModalOpened]);
264
+ var _useMediaCreate = data.useMediaCreate(),
265
+ createMedia = _useMediaCreate.create;
1845
266
  var onUploadCompleted = React.useCallback(function (newMedias) {
1846
267
  setUploading(true);
1847
268
  Promise.all(newMedias.map(createMedia)).then(function (newAddedMedias) {
@@ -1852,67 +273,69 @@ function MediaGallery(_ref) {
1852
273
  var onUploadRequestClose = React.useCallback(function () {
1853
274
  return setUploadModalOpened(false);
1854
275
  }, [setUploadModalOpened]);
276
+ var partialFilters = filters$1 || filters() || [];
277
+ var finalFilters = React.useMemo(function () {
278
+ return partialFilters.map(function (filter) {
279
+ var _ref2 = filter || {},
280
+ _ref2$id = _ref2.id,
281
+ id = _ref2$id === void 0 ? null : _ref2$id;
282
+ if (id === 'sources') {
283
+ return filter;
284
+ }
285
+ // if (id === 'tags' && tags !== null) {
286
+ // return { ...filter, options: tags };
287
+ // }
288
+ return filter;
289
+ });
290
+ }, [partialFilters]);
291
+ var _useState7 = React.useState(source !== null ? {
292
+ source: source
293
+ } : null),
294
+ _useState8 = _slicedToArray(_useState7, 2),
295
+ query = _useState8[0],
296
+ setQuery = _useState8[1];
297
+ var finalQuery = React.useMemo(function () {
298
+ setQuery(_objectSpread(_objectSpread({}, query || null), source !== null ? {
299
+ source: source
300
+ } : null));
301
+ }, [source, setQuery]);
302
+
303
+ // const finalValue = useMemo(() => {
304
+ // const allMedias = [...addedMedias, ...(value || [])];
305
+ // return allMedias.length > 0 ? allMedias : null;
306
+ // }, [value, addedMedias]);
307
+
1855
308
  return /*#__PURE__*/React.createElement("div", {
1856
- className: classNames([styles.container, _defineProperty(_defineProperty({}, styles.metadataOpened, metadataMedia !== null), className, className)])
1857
- }, /*#__PURE__*/React.createElement(Navbar, {
1858
- types: isArray(type) ? type : [type],
1859
- filters: filtersValue,
1860
- media: metadataMedia !== null ? metadataMedia : null,
1861
- selectedMedia: selectedMedia,
1862
- onFiltersChange: onFiltersChange,
1863
- onClickAdd: onClickAdd,
1864
- onClickItem: onClickItem,
1865
- onClickItemInfo: onClickItemInfo,
1866
- onClickBack: onClickBack,
1867
- onClickClear: onClearMedia,
1868
- withoutTitle: withoutTitle,
1869
- withoutSource: withoutSource,
1870
- withoutType: withoutType,
1871
- storyId: storyId,
1872
- authors: authors,
1873
- tags: tags,
1874
- loading: loading || uploading,
1875
- className: navbarClassName
1876
- }), /*#__PURE__*/React.createElement("div", {
1877
- className: styles.content
1878
- }, /*#__PURE__*/React.createElement("div", {
1879
- className: styles.gallery
1880
- }, medias !== null && !uploading ? /*#__PURE__*/React.createElement(Gallery, {
1881
- items: medias,
1882
- selectedItem: selectedMedia,
1883
- selectedFirst: true,
1884
- withInfoButton: isPicker,
1885
- isSmall: isSmall,
1886
- onClickItem: onClickItem,
1887
- onClickItemInfo: onClickItemInfo,
1888
- onClickRemoveItem: onClickRemoveItem
1889
- }) : null, !allLoaded ? /*#__PURE__*/React.createElement("div", {
1890
- className: "w-100 mb-2"
1891
- }, loading || uploading ? /*#__PURE__*/React.createElement(components.Spinner, {
1892
- className: styles.loading
1893
- }) : null, !loading && !uploading ? /*#__PURE__*/React.createElement(components.Button, {
1894
- className: "d-block mx-auto",
1895
- theme: "secondary",
1896
- outline: true,
1897
- onClick: loadNextPage
1898
- }, intl.formatMessage({
1899
- id: "ur6G0U",
1900
- defaultMessage: [{
1901
- "type": 0,
1902
- "value": "Load more"
1903
- }]
1904
- })) : null) : null), /*#__PURE__*/React.createElement("div", {
1905
- className: styles.mediaMetadata
1906
- }, /*#__PURE__*/React.createElement(MediaMetadata, {
1907
- media: metadataMedia,
1908
- tags: tags,
1909
- onChange: onMetadataChange,
1910
- onClickClose: onMetadataClickClose
1911
- // onClickSave={onMetadataClickSave}
1912
- ,
1913
- onClickDelete: onMetadataClickDelete
1914
- }))), /*#__PURE__*/reactDom.createPortal( /*#__PURE__*/React.createElement(components.UploadModal, {
1915
- type: type === 'video' ? videoTypes : type,
309
+ className: classNames([styles.container, _defineProperty({}, className, className)])
310
+ }, /*#__PURE__*/React.createElement(data$1.QueryProvider, null, /*#__PURE__*/React.createElement(FieldsProvider, null, /*#__PURE__*/React.createElement(DisplaysProvider, null, /*#__PURE__*/React.createElement(FiltersProvider, null, isPicker ? /*#__PURE__*/React.createElement(medias.MediasPickerContainer, {
311
+ className: styles.browser,
312
+ api: mediasApi,
313
+ value: value,
314
+ theme: "dark",
315
+ types: types,
316
+ query: finalQuery,
317
+ multiple: multiple,
318
+ items: initialMedias,
319
+ filters: finalFilters,
320
+ onChange: onChange,
321
+ buttons: buttons,
322
+ buttonsClassName: "ms-xl-auto",
323
+ withStickySelection: true
324
+ }) : /*#__PURE__*/React.createElement(medias.MediasBrowserContainer, {
325
+ className: styles.browser,
326
+ api: mediasApi,
327
+ value: value,
328
+ theme: "dark",
329
+ types: types,
330
+ query: finalQuery,
331
+ multiple: multiple,
332
+ items: initialMedias,
333
+ filters: finalFilters,
334
+ buttons: buttons,
335
+ buttonsClassName: "ms-xl-auto",
336
+ withStickySelection: true
337
+ }))))), /*#__PURE__*/reactDom.createPortal( /*#__PURE__*/React.createElement(components.UploadModal, {
338
+ types: types,
1916
339
  opened: uploadModalOpened,
1917
340
  onUploaded: onUploadCompleted,
1918
341
  onRequestClose: onUploadRequestClose