@micromag/media-gallery 0.2.394 → 0.2.398

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/es/index.js CHANGED
@@ -2,458 +2,525 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
3
3
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
4
4
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
- import React, { useState, useCallback, useMemo, useRef, useEffect } from 'react';
6
- import PropTypes from 'prop-types';
5
+ import { PropTypes } from '@micromag/core';
6
+ import { Card, Button, Media, Spinner, UploadModal } from '@micromag/core/components';
7
+ import { useFieldComponent, useStory } from '@micromag/core/contexts';
8
+ import { useMediaUpdate, useMediasRecentSearches, useMediaTags, useMediaAuthors, useMedias, useMediaCreate } from '@micromag/data';
7
9
  import classNames from 'classnames';
8
- import { useMediasRecentSearches, useMediaTags, useMediaUpdate, useMedias, useMediaCreate } from '@micromag/data';
9
- import { PropTypes as PropTypes$1 } from '@micromag/core';
10
- import { Button, Card, Spinner, UploadModal } from '@micromag/core/components';
11
- import { FormattedMessage, useIntl } from 'react-intl';
12
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
13
- import { faSearch, faTimes, faChevronLeft, faPlus, faInfoCircle, faTimesCircle, faPlayCircle, faHeadphonesAlt } from '@fortawesome/free-solid-svg-icons';
14
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
10
+ import PropTypes$1 from 'prop-types';
11
+ import React, { useMemo, useCallback, useState, useEffect, useRef } from 'react';
15
12
  import { useResizeObserver } from '@micromag/core/hooks';
16
- import { useStory, useFieldComponent } from '@micromag/core/contexts';
13
+ import { faInfoCircle, faTimesCircle, faPlayCircle, faHeadphonesAlt, faSearch, faTimes, faPlus, faChevronLeft } from '@fortawesome/free-solid-svg-icons';
14
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
17
15
  import uniqBy from 'lodash/uniqBy';
18
16
  import prettyBytes from 'pretty-bytes';
17
+ import { FormattedMessage, useIntl } from 'react-intl';
18
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
19
+
20
+ var styles$8 = {"container":"micromag-media-gallery-container","mediaMetadata":"micromag-media-gallery-mediaMetadata","metadataOpened":"micromag-media-gallery-metadataOpened","gallery":"micromag-media-gallery-gallery","content":"micromag-media-gallery-content","loading":"micromag-media-gallery-loading"};
21
+
22
+ var middleEllipsis = function middleEllipsis(string, maxLength) {
23
+ if (!string) return string;
24
+ if (maxLength < 1) return string;
25
+ if (string.length <= maxLength) return string;
26
+ if (maxLength === 1) return "".concat(string.substring(0, 1), "...");
27
+ var midpoint = Math.ceil(string.length / 2);
28
+ var toremove = string.length - maxLength;
29
+ var lstrip = Math.ceil(toremove / 2);
30
+ var rstrip = toremove - lstrip;
31
+ return "".concat(string.substring(0, midpoint - lstrip), "...").concat(string.substring(midpoint + rstrip));
32
+ };
19
33
 
20
- 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"};
34
+ var styles$7 = {"container":"micromag-media-gallery-items-gallery-item-container","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","closeIcon":"micromag-media-gallery-items-gallery-item-closeIcon","infoButton":"micromag-media-gallery-items-gallery-item-infoButton"};
21
35
 
22
36
  var propTypes$a = {
23
- value: PropTypes.string,
24
- items: PropTypes.arrayOf(PropTypes.shape({
25
- label: PropTypes$1.label,
26
- value: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
27
- active: PropTypes.bool
28
- })),
29
- onChange: PropTypes.func,
30
- className: PropTypes.string
37
+ item: PropTypes.media,
38
+ width: PropTypes$1.number,
39
+ selected: PropTypes$1.bool,
40
+ withInfoButton: PropTypes$1.bool,
41
+ className: PropTypes$1.string,
42
+ onClick: PropTypes$1.func,
43
+ onClickInfo: PropTypes$1.func
31
44
  };
32
45
  var defaultProps$a = {
33
- value: null,
34
- items: null,
35
- onChange: null,
36
- className: null
46
+ item: null,
47
+ width: 0,
48
+ selected: false,
49
+ withInfoButton: false,
50
+ className: null,
51
+ onClick: null,
52
+ onClickInfo: null
37
53
  };
38
54
 
39
- var DropdownSection = function DropdownSection(_ref) {
40
- var value = _ref.value,
41
- items = _ref.items,
42
- onChange = _ref.onChange,
43
- className = _ref.className;
55
+ var GalleryItem = function GalleryItem(_ref) {
56
+ var item = _ref.item,
57
+ width = _ref.width,
58
+ selected = _ref.selected,
59
+ withInfoButton = _ref.withInfoButton,
60
+ className = _ref.className,
61
+ onClick = _ref.onClick,
62
+ onClickInfo = _ref.onClickInfo;
63
+ var type = item.type,
64
+ _item$thumbnail_url = item.thumbnail_url,
65
+ thumbnail = _item$thumbnail_url === void 0 ? null : _item$thumbnail_url,
66
+ name = item.name,
67
+ size = item.size;
68
+ var title = name;
44
69
 
45
- var _useState = useState(false),
46
- _useState2 = _slicedToArray(_useState, 2),
47
- open = _useState2[0],
48
- setOpen = _useState2[1];
70
+ if (width < 768) {
71
+ title = middleEllipsis(name, Math.floor(Math.max(18, width / 2 / 9)));
72
+ } else {
73
+ title = middleEllipsis(name, Math.floor(Math.max(25, width / 3 / 8)));
74
+ }
49
75
 
50
- var currentItem = items.find(function (i) {
51
- return i.value === value;
52
- });
53
- var onOpen = useCallback(function () {
54
- setOpen(!open);
55
- }, [open, setOpen]);
56
- var onBlur = useCallback(function () {
57
- // Work around the event call order
58
- setTimeout(function () {
59
- setOpen(false);
60
- }, 300);
61
- }, [setOpen]);
62
- var onItemClick = useCallback(function (e) {
63
- var val = e.target.dataset.value || null;
64
- setOpen(false);
65
- onChange(val);
66
- }, [setOpen]);
67
- return items !== null && items.length > 1 ? /*#__PURE__*/React.createElement("div", {
68
- className: classNames([styles$8.container, 'dropdown', _defineProperty({}, className, className !== null)])
69
- }, /*#__PURE__*/React.createElement("span", {
70
- className: styles$8.label
71
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
72
- id: "9ZdD+Q",
73
- defaultMessage: [{
74
- "type": 0,
75
- "value": "Library for"
76
- }]
77
- })), /*#__PURE__*/React.createElement("button", {
78
- className: classNames([styles$8.dropdownToggle, 'dropdown-toggle', {
79
- open: open === true
80
- }]),
81
- type: "button",
82
- onClick: onOpen,
83
- onBlur: onBlur
84
- }, (currentItem ? currentItem.label : null) || /*#__PURE__*/React.createElement(FormattedMessage, {
85
- id: "15GBmG",
86
- defaultMessage: [{
87
- "type": 0,
88
- "value": "All"
89
- }]
90
- })), /*#__PURE__*/React.createElement("div", {
91
- className: classNames([styles$8.dropdown, 'dropdown-menu', {
92
- show: open === true
93
- }])
94
- }, items.map(function (_ref3) {
95
- var label = _ref3.label,
96
- itemValue = _ref3.value;
97
- var itemClassNames = classNames(['dropdown-item', {
98
- active: itemValue === value
99
- }]);
100
- return /*#__PURE__*/React.createElement("button", {
101
- className: itemClassNames,
76
+ return /*#__PURE__*/React.createElement(Card, {
77
+ image: /*#__PURE__*/React.createElement("button", {
102
78
  type: "button",
103
- key: "drop-".concat(itemValue),
104
- onClick: onItemClick,
105
- "data-value": itemValue
106
- }, label);
107
- }))) : null;
79
+ className: classNames(['d-block', 'position-relative', 'p-0', 'border-0', 'w-100', 'text-left', 'bg-light', 'text-black', styles$7.imageButton]),
80
+ onClick: onClick
81
+ }, /*#__PURE__*/React.createElement("div", {
82
+ className: classNames(['card-img-top', styles$7.image]),
83
+ style: {
84
+ backgroundImage: thumbnail !== null ? "url('".concat(thumbnail, "')") : null
85
+ }
86
+ })),
87
+ beforeBody: /*#__PURE__*/React.createElement(React.Fragment, null, withInfoButton ? /*#__PURE__*/React.createElement(Button, {
88
+ className: styles$7.infoButton,
89
+ onClick: onClickInfo,
90
+ withoutStyle: true
91
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
92
+ icon: faInfoCircle,
93
+ className: styles$7.icon
94
+ })) : null, selected ? /*#__PURE__*/React.createElement("div", {
95
+ className: classNames(['text-danger', styles$7.closeIcon])
96
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
97
+ icon: faTimesCircle,
98
+ className: styles$7.icon
99
+ })) : null),
100
+ footer: /*#__PURE__*/React.createElement(React.Fragment, null, type === 'video' ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
101
+ className: styles$7.icon,
102
+ icon: faPlayCircle
103
+ }) : null, type === 'audio' ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
104
+ className: styles$7.icon,
105
+ icon: faHeadphonesAlt
106
+ }) : null, /*#__PURE__*/React.createElement("div", {
107
+ className: classNames(['text-truncate', styles$7.label])
108
+ }, /*#__PURE__*/React.createElement("small", null, title), size !== null ? /*#__PURE__*/React.createElement("small", {
109
+ className: "text-muted ml-1"
110
+ }, size) : null)),
111
+ theme: selected ? 'primary' : null,
112
+ className: classNames([styles$7.container, _defineProperty({
113
+ 'border-primary': selected
114
+ }, className, className !== null)]),
115
+ footerClassName: classNames(['p-2', styles$7.footer]),
116
+ onClickFooter: onClick
117
+ });
108
118
  };
109
119
 
110
- DropdownSection.propTypes = propTypes$a;
111
- DropdownSection.defaultProps = defaultProps$a;
120
+ GalleryItem.propTypes = propTypes$a;
121
+ GalleryItem.defaultProps = defaultProps$a;
122
+
123
+ var styles$6 = {};
112
124
 
113
125
  var propTypes$9 = {
114
- tags: PropTypes.arrayOf(PropTypes.shape({
115
- label: PropTypes.string,
116
- value: PropTypes.oneOf([PropTypes.string, PropTypes.node]),
117
- active: PropTypes.bool
118
- })),
119
- parent: PropTypes.string,
120
- onChange: PropTypes.func,
121
- className: PropTypes.string
126
+ items: PropTypes.medias,
127
+ selectedItem: PropTypes.media,
128
+ withInfoButton: PropTypes$1.bool,
129
+ isSmall: PropTypes$1.bool,
130
+ selectedFirst: PropTypes$1.bool,
131
+ className: PropTypes$1.string,
132
+ onClickItem: PropTypes$1.func,
133
+ onClickItemInfo: PropTypes$1.func
122
134
  };
123
135
  var defaultProps$9 = {
124
- tags: null,
125
- parent: null,
126
- onChange: null,
127
- className: null
136
+ items: null,
137
+ selectedItem: null,
138
+ withInfoButton: false,
139
+ isSmall: false,
140
+ selectedFirst: false,
141
+ className: null,
142
+ onClickItem: null,
143
+ onClickItemInfo: null
128
144
  };
129
145
 
130
- var TagSection = function TagSection(_ref) {
131
- var tags = _ref.tags,
132
- parent = _ref.parent,
133
- onChange = _ref.onChange,
134
- className = _ref.className;
135
- var onItemChange = useCallback(function (e) {
136
- var val = e.target.dataset.value || null;
137
- onChange(val, parent);
138
- }, [onChange, parent]);
139
- return /*#__PURE__*/React.createElement("div", {
140
- className: classNames(['d-flex', 'mt-1', _defineProperty({}, className, className !== null)])
141
- }, tags !== null ? tags.map(function (_ref3) {
142
- var label = _ref3.label,
143
- value = _ref3.value,
144
- active = _ref3.active;
145
- var itemClassNames = classNames(['btn', 'btn-sm', 'mb-1', 'mr-1', 'btn-dark', {
146
- 'btn-primary': active === true // 'btn-outline-light': active === false,
146
+ var Gallery = function Gallery(_ref) {
147
+ var items = _ref.items,
148
+ selectedItem = _ref.selectedItem,
149
+ withInfoButton = _ref.withInfoButton,
150
+ isSmall = _ref.isSmall,
151
+ selectedFirst = _ref.selectedFirst,
152
+ className = _ref.className,
153
+ onClickItem = _ref.onClickItem,
154
+ onClickItemInfo = _ref.onClickItemInfo;
147
155
 
148
- }]);
149
- return /*#__PURE__*/React.createElement("button", {
150
- className: itemClassNames,
151
- type: "button",
152
- key: "tag-".concat(value),
153
- onClick: onItemChange,
154
- "data-value": value
155
- }, label);
156
- }) : null);
156
+ var _useResizeObserver = useResizeObserver(),
157
+ ref = _useResizeObserver.ref,
158
+ contentRect = _useResizeObserver.entry.contentRect;
159
+
160
+ var _ref2 = contentRect || {},
161
+ width = _ref2.width;
162
+
163
+ var finalItems = useMemo(function () {
164
+ if (selectedFirst && selectedItem !== null && typeof selectedItem.id !== 'undefined') {
165
+ return [selectedItem].concat(_toConsumableArray(items.filter(function (_ref3) {
166
+ var id = _ref3.id;
167
+ return id !== selectedItem.id;
168
+ })));
169
+ }
170
+
171
+ return items;
172
+ }, [selectedFirst, selectedItem, items]);
173
+ return /*#__PURE__*/React.createElement("div", {
174
+ className: classNames([styles$6.container, 'p-2', _defineProperty({}, className, className !== null)]),
175
+ ref: ref
176
+ }, /*#__PURE__*/React.createElement("div", {
177
+ className: classNames(['row', 'mx-n1', 'row-cols-2', {
178
+ 'row-cols-md-3': !isSmall
179
+ }])
180
+ }, finalItems.map(function (item) {
181
+ return /*#__PURE__*/React.createElement("div", {
182
+ className: "col px-1 py-1",
183
+ key: "gallery-item-".concat(item.id)
184
+ }, /*#__PURE__*/React.createElement(GalleryItem, {
185
+ item: item,
186
+ width: width,
187
+ selected: selectedItem !== null && selectedItem.id === item.id,
188
+ onClick: onClickItem !== null ? function () {
189
+ return onClickItem(item);
190
+ } : null,
191
+ onClickInfo: onClickItemInfo !== null ? function () {
192
+ return onClickItemInfo(item);
193
+ } : null,
194
+ withInfoButton: withInfoButton
195
+ }));
196
+ })));
157
197
  };
158
198
 
159
- TagSection.propTypes = propTypes$9;
160
- TagSection.defaultProps = defaultProps$9;
199
+ Gallery.propTypes = propTypes$9;
200
+ Gallery.defaultProps = defaultProps$9;
161
201
 
162
- var styles$7 = {"container":"micromag-media-gallery-forms-search-filters-container","section":"micromag-media-gallery-forms-search-filters-section","title":"micromag-media-gallery-forms-search-filters-title","tags":"micromag-media-gallery-forms-search-filters-tags"};
202
+ var styles$5 = {"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"};
163
203
 
164
204
  var propTypes$8 = {
165
- filters: PropTypes.object,
166
- // eslint-disable-line
167
- sections: PropTypes.arrayOf(PropTypes.object),
168
- onChange: PropTypes.func,
169
- className: PropTypes.string
205
+ media: PropTypes.media,
206
+ tags: PropTypes.tags,
207
+ className: PropTypes$1.string
170
208
  };
171
209
  var defaultProps$8 = {
172
- filters: null,
173
- sections: [],
174
- onChange: null,
210
+ media: null,
211
+ tags: [],
175
212
  className: null
176
213
  };
177
214
 
178
- var SearchFilters = function SearchFilters(_ref) {
179
- var filters = _ref.filters,
180
- sections = _ref.sections,
181
- onChange = _ref.onChange,
215
+ var MediaMetadata = function MediaMetadata(_ref) {
216
+ var media = _ref.media,
217
+ allTags = _ref.tags,
182
218
  className = _ref.className;
183
- var getActive = useCallback(function (items, sectionFilters) {
184
- return items !== null ? items.map(function (it) {
185
- return _objectSpread(_objectSpread({}, it), {}, {
186
- active: sectionFilters ? !!sectionFilters.find(function (f) {
187
- return f === it.value;
188
- }) : false
189
- });
190
- }) : [];
191
- }, []);
192
- var activeSections = useMemo(function () {
193
- return sections.map(function (section) {
194
- return _objectSpread(_objectSpread({}, section), {}, {
195
- items: getActive(section.items, filters[section.value])
196
- });
197
- });
198
- }, [getActive, sections, filters]);
199
- var onSectionChange = useCallback(function (data, section) {
200
- var val = filters[section] ? filters[section] : [];
201
- var found = !!val.find(function (f) {
202
- return f === data;
203
- });
204
-
205
- if (found) {
206
- onChange(section, val.filter(function (f) {
207
- return f !== data;
208
- }));
209
- } else if (data) {
210
- if (section === 'recent') {
211
- onChange('search', data);
212
- } else if (section === 'usage') {
213
- onChange(section, [data]);
214
- } else {
215
- onChange(section, [].concat(_toConsumableArray(val), [data]));
216
- }
217
- }
218
- }, [filters, onChange]);
219
- return /*#__PURE__*/React.createElement("div", {
220
- className: classNames([styles$7.container, 'flex-nowrap', 'mt-1', _defineProperty({}, className, className !== null)])
221
- }, activeSections.length > 0 ? /*#__PURE__*/React.createElement("div", {
222
- className: classNames(['bg-light', 'flex-nowrap', 'text-dark', 'py-1', 'px-3', 'rounded'])
223
- }, activeSections.map(function (_ref3) {
224
- var value = _ref3.value,
225
- label = _ref3.label,
226
- items = _ref3.items;
227
- return items.length > 0 ? /*#__PURE__*/React.createElement("div", {
228
- key: "filter-".concat(value),
229
- className: classNames([styles$7.section, 'py-2'])
230
- }, /*#__PURE__*/React.createElement("p", {
231
- className: classNames([styles$7.title, 'm-0'])
232
- }, label), /*#__PURE__*/React.createElement(TagSection, {
233
- className: classNames([styles$7.tags]),
234
- tags: items,
235
- parent: value,
236
- onChange: onSectionChange
237
- })) : null;
238
- })) : null);
239
- };
240
-
241
- SearchFilters.propTypes = propTypes$8;
242
- SearchFilters.defaultProps = defaultProps$8;
243
-
244
- var propTypes$7 = {
245
- value: PropTypes.string,
246
- onChange: PropTypes.func,
247
- onFocus: PropTypes.func,
248
- onBlur: PropTypes.func,
249
- onClickIcon: PropTypes.func,
250
- className: PropTypes.string
251
- };
252
- var defaultProps$7 = {
253
- value: null,
254
- onChange: null,
255
- onFocus: null,
256
- onBlur: null,
257
- onClickIcon: null,
258
- className: null
259
- };
260
-
261
- var Search = function Search(_ref) {
262
- var value = _ref.value,
263
- onChange = _ref.onChange,
264
- onFocus = _ref.onFocus,
265
- onBlur = _ref.onBlur,
266
- onClickIcon = _ref.onClickIcon,
267
- className = _ref.className;
268
- var intl = useIntl();
269
- var onSearchChange = useCallback(function (e) {
270
- var newValue = e.currentTarget.value.length > 0 ? e.currentTarget.value : null;
271
-
272
- if (onChange !== null) {
273
- onChange(newValue);
274
- }
275
- }, [onChange]);
276
- useCallback(function () {
277
- if (onChange !== null) {
278
- onChange('');
279
- }
280
- }, [onChange]);
281
- var onClickSearchIcon = useCallback(function () {
282
- if (onClickIcon !== null) {
283
- onClickIcon();
284
- }
285
- }, [onClickIcon]);
286
- return /*#__PURE__*/React.createElement("form", {
287
- method: "post",
288
- className: classNames(['w-100', _defineProperty({}, className, className !== null)]),
289
- onSubmit: function onSubmit(e) {
290
- return e.preventDefault();
291
- }
292
- }, /*#__PURE__*/React.createElement("div", {
293
- className: "input-group w-100"
294
- }, /*#__PURE__*/React.createElement("span", {
295
- type: "span",
296
- className: "input-group-prepend"
297
- }, /*#__PURE__*/React.createElement("button", {
298
- type: "button",
299
- className: "input-group-text reset-button",
300
- onClick: onClickSearchIcon
301
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
302
- icon: faSearch
303
- }))), /*#__PURE__*/React.createElement("input", {
304
- className: classNames(['form-control', {
305
- 'bg-light': !!value,
306
- 'text-dark': value
307
- }]),
308
- type: "text",
309
- value: value || '',
310
- placeholder: intl.formatMessage({
311
- "id": "gprXiG",
312
- "defaultMessage": [{
313
- "type": 0,
314
- "value": "Search..."
315
- }]
316
- }),
317
- onChange: onSearchChange,
318
- onFocus: onFocus,
319
- onBlur: onBlur
320
- }), null));
321
- };
322
219
 
323
- Search.propTypes = propTypes$7;
324
- Search.defaultProps = defaultProps$7;
220
+ var _ref2 = media || {},
221
+ mediaId = _ref2.id,
222
+ type = _ref2.type,
223
+ _ref2$url = _ref2.url,
224
+ url = _ref2$url === void 0 ? null : _ref2$url,
225
+ _ref2$thumbnail_url = _ref2.thumbnail_url,
226
+ thumbnail = _ref2$thumbnail_url === void 0 ? null : _ref2$thumbnail_url,
227
+ _ref2$name = _ref2.name,
228
+ mediaName = _ref2$name === void 0 ? null : _ref2$name,
229
+ _ref2$metadata = _ref2.metadata,
230
+ metadata = _ref2$metadata === void 0 ? {} : _ref2$metadata;
325
231
 
326
- var styles$6 = {"container":"micromag-media-gallery-buttons-close-container"};
232
+ var _ref3 = metadata || {},
233
+ _ref3$filename = _ref3.filename,
234
+ filename = _ref3$filename === void 0 ? null : _ref3$filename,
235
+ _ref3$size = _ref3.size,
236
+ size = _ref3$size === void 0 ? null : _ref3$size,
237
+ _ref3$width = _ref3.width,
238
+ width = _ref3$width === void 0 ? null : _ref3$width,
239
+ _ref3$height = _ref3.height,
240
+ height = _ref3$height === void 0 ? null : _ref3$height,
241
+ _ref3$duration = _ref3.duration,
242
+ duration = _ref3$duration === void 0 ? null : _ref3$duration,
243
+ _ref3$user = _ref3.user,
244
+ user = _ref3$user === void 0 ? null : _ref3$user,
245
+ _ref3$description = _ref3.description,
246
+ mediaDescription = _ref3$description === void 0 ? null : _ref3$description,
247
+ _ref3$tags = _ref3.tags,
248
+ mediaTags = _ref3$tags === void 0 ? [] : _ref3$tags;
327
249
 
328
- var _excluded = ["className"];
329
- var propTypes$6 = {
330
- className: PropTypes.string
331
- };
332
- var defaultProps$6 = {
333
- className: null
334
- };
250
+ var _useMediaUpdate = useMediaUpdate(),
251
+ update = _useMediaUpdate.update;
335
252
 
336
- var CloseButton = function CloseButton(_ref) {
337
- var className = _ref.className,
338
- props = _objectWithoutProperties(_ref, _excluded);
253
+ var getOptionLabel = useCallback(function (_ref4) {
254
+ var name = _ref4.name;
255
+ return name;
256
+ }, []);
257
+ var getOptionValue = useCallback(function (_ref5) {
258
+ var name = _ref5.name;
259
+ return name;
260
+ }, []);
261
+ var getNewOptionData = useCallback(function (inputValue) {
262
+ return {
263
+ name: inputValue
264
+ };
265
+ }, []);
266
+ var finalTags = useMemo(function () {
267
+ return allTags !== null ? uniqBy(mediaTags.concat(allTags), function (_ref6) {
268
+ var id = _ref6.id;
269
+ return id;
270
+ }) : mediaTags;
271
+ }, [mediaTags, allTags]);
339
272
 
340
- return /*#__PURE__*/React.createElement(Button, Object.assign({
341
- className: classNames([styles$6.container, _defineProperty({}, className, className !== null)]),
342
- withoutStyle: true,
343
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
344
- icon: faTimes,
345
- className: styles$6.icon
346
- }),
347
- iconPosition: "right"
348
- }, props));
349
- };
273
+ var _useState = useState(mediaName),
274
+ _useState2 = _slicedToArray(_useState, 2),
275
+ name = _useState2[0],
276
+ setName = _useState2[1];
350
277
 
351
- CloseButton.propTypes = propTypes$6;
352
- CloseButton.defaultProps = defaultProps$6;
278
+ var _useState3 = useState(mediaDescription),
279
+ _useState4 = _slicedToArray(_useState3, 2),
280
+ description = _useState4[0],
281
+ setDescription = _useState4[1];
353
282
 
354
- var styles$5 = {"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"};
283
+ var _useState5 = useState(mediaTags.map(getOptionValue)),
284
+ _useState6 = _slicedToArray(_useState5, 2),
285
+ tags = _useState6[0],
286
+ setTags = _useState6[1];
355
287
 
356
- var propTypes$5 = {
357
- filters: PropTypes.shape({
358
- types: PropTypes.arrayOf(PropTypes.string),
359
- tags: PropTypes.arrayOf(PropTypes.string),
360
- users: PropTypes.arrayOf(PropTypes.string),
361
- usage: PropTypes.arrayOf(PropTypes.oneOf(['used', 'unused']))
362
- }),
363
- onChange: PropTypes.func,
364
- onReset: PropTypes.func,
365
- sections: PropTypes.arrayOf(PropTypes.object),
366
- className: PropTypes.string
367
- };
368
- var defaultProps$5 = {
369
- filters: null,
370
- onChange: null,
371
- onReset: null,
372
- sections: [],
373
- className: null
374
- };
288
+ var _useState7 = useState(false),
289
+ _useState8 = _slicedToArray(_useState7, 2),
290
+ changed = _useState8[0],
291
+ setChanged = _useState8[1];
375
292
 
376
- var ActiveFilters = function ActiveFilters(_ref) {
377
- var filters = _ref.filters,
378
- onChange = _ref.onChange,
379
- onReset = _ref.onReset,
380
- sections = _ref.sections,
381
- className = _ref.className;
382
- var handleReset = useCallback(function () {
383
- if (onReset !== null) {
384
- onReset();
385
- }
386
- }, [onReset]);
387
- var removeFilter = useCallback(function (key, activeValue) {
388
- var newFilterValue = filters[key].filter(function (it) {
389
- return it !== activeValue;
293
+ var onTagChange = useCallback(function (val) {
294
+ setTags(val);
295
+ setChanged(true);
296
+ }, [tags, setTags, setChanged]);
297
+ var onNameChange = useCallback(function (val) {
298
+ setName(val);
299
+ setChanged(true);
300
+ }, [tags, setName, setChanged]);
301
+ var onDescriptionChange = useCallback(function (val) {
302
+ setDescription(val);
303
+ setChanged(true);
304
+ }, [tags, setDescription, setChanged]);
305
+ var onSave = useCallback(function () {
306
+ return update(mediaId, {
307
+ name: name,
308
+ tags: tags,
309
+ description: description
310
+ }).then(function () {
311
+ setChanged(false);
390
312
  });
391
- var newValue = newFilterValue.length > 0 ? newFilterValue : null;
392
-
393
- if (onChange !== null) {
394
- onChange(key, newValue);
313
+ }, [mediaId, name, tags, description, metadata, update]);
314
+ useEffect(function () {
315
+ if (media !== null) {
316
+ setTags(mediaTags);
317
+ setName(mediaName);
318
+ setDescription(mediaDescription);
319
+ } else {
320
+ setTags([]);
321
+ setName(null);
322
+ setDescription(null);
395
323
  }
396
- }, [onChange, filters]);
397
- var hasValue = Object.keys(filters).reduce(function (oneHasValue, key) {
398
- return oneHasValue || filters[key] !== null;
399
- }, false);
324
+
325
+ setChanged(false);
326
+ }, [media, setTags, setName, setDescription, setChanged]);
327
+ var TextField = useFieldComponent('text');
328
+ var TokensField = useFieldComponent('tokens');
400
329
  return /*#__PURE__*/React.createElement("div", {
401
- className: classNames(['w-100', styles$5.container, _defineProperty({}, className, className)])
402
- }, hasValue ? /*#__PURE__*/React.createElement("div", {
403
- className: styles$5.heading
330
+ className: classNames([styles$5.container, _defineProperty({}, className, className)])
404
331
  }, /*#__PURE__*/React.createElement("div", {
405
- className: styles$5.title
406
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
407
- id: "t2cFdl",
408
- defaultMessage: [{
332
+ className: classNames(['position-relative', _defineProperty({
333
+ 'bg-light': type === 'audio',
334
+ 'bg-black': type === 'image'
335
+ }, styles$5.video, type === 'video')])
336
+ }, type === 'video' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("video", {
337
+ className: styles$5.player,
338
+ controls: true,
339
+ src: url
340
+ })) : null, type === 'audio' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
341
+ className: styles$5.audio
342
+ }, /*#__PURE__*/React.createElement("audio", {
343
+ className: styles$5.player,
344
+ controls: true,
345
+ src: url
346
+ }))) : null, type !== 'video' ? /*#__PURE__*/React.createElement("img", {
347
+ src: thumbnail,
348
+ className: styles$5.image,
349
+ alt: filename
350
+ }) : null), /*#__PURE__*/React.createElement("div", {
351
+ className: "p-2"
352
+ }, /*#__PURE__*/React.createElement("div", {
353
+ className: "tags mb-4"
354
+ }, /*#__PURE__*/React.createElement("div", {
355
+ className: "form-group"
356
+ }, /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(FormattedMessage, {
357
+ id: "kBz8vF",
358
+ defaultMessage: [{
409
359
  "type": 0,
410
- "value": "Active filters"
360
+ "value": "Name"
411
361
  }]
412
- })), /*#__PURE__*/React.createElement(CloseButton, {
413
- className: styles$5.resetButton,
414
- onClick: handleReset
415
- }, /*#__PURE__*/React.createElement("u", null, /*#__PURE__*/React.createElement(FormattedMessage, {
416
- id: "/T/UDH",
362
+ })), /*#__PURE__*/React.createElement(TextField, {
363
+ value: name,
364
+ onChange: onNameChange
365
+ })), /*#__PURE__*/React.createElement("div", {
366
+ className: "form-group"
367
+ }, /*#__PURE__*/React.createElement("h6", {
368
+ className: "mb-0"
369
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
370
+ id: "YJZtWR",
417
371
  defaultMessage: [{
418
372
  "type": 0,
419
- "value": "Remove all"
373
+ "value": "Description"
420
374
  }]
421
- })))) : null, filters !== null ? Object.keys(filters).map(function (key) {
422
- var section = sections.find(function (s) {
423
- return s.value === key;
424
- });
425
- return section && filters[key] !== null ? filters[key].map(function (activeValue) {
426
- var current = section.items.find(function (s) {
427
- return s.value === activeValue;
428
- });
429
-
430
- var _ref3 = current || {},
431
- _ref3$label = _ref3.label,
432
- label = _ref3$label === void 0 ? '' : _ref3$label;
433
-
434
- return /*#__PURE__*/React.createElement(Button, {
435
- className: styles$5.activeTag,
436
- key: "filter-button-".concat(activeValue),
437
- type: "submit",
438
- size: "sm",
439
- label: /*#__PURE__*/React.createElement("span", null, section.label, " : ", label),
440
- theme: "secondary",
441
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
442
- icon: faTimes
443
- }),
444
- iconPosition: "right",
445
- onClick: function onClick() {
446
- return removeFilter(key, activeValue);
447
- }
448
- });
449
- }) : null;
450
- }) : null);
375
+ })), /*#__PURE__*/React.createElement("p", {
376
+ className: "mb-1"
377
+ }, /*#__PURE__*/React.createElement("small", null, /*#__PURE__*/React.createElement(FormattedMessage, {
378
+ id: "EDFyUp",
379
+ defaultMessage: [{
380
+ "type": 0,
381
+ "value": "Alternative text (accessibility)"
382
+ }]
383
+ }))), /*#__PURE__*/React.createElement(TextField, {
384
+ value: description,
385
+ onChange: onDescriptionChange
386
+ })), /*#__PURE__*/React.createElement("div", {
387
+ className: "form-group"
388
+ }, /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(FormattedMessage, {
389
+ id: "4fHMVj",
390
+ defaultMessage: [{
391
+ "type": 0,
392
+ "value": "Tags"
393
+ }]
394
+ })), /*#__PURE__*/React.createElement(TokensField, {
395
+ value: tags,
396
+ options: finalTags // loadOptions={loadTags}
397
+ ,
398
+ getOptionLabel: getOptionLabel,
399
+ getOptionValue: getOptionValue,
400
+ getNewOptionData: getNewOptionData,
401
+ onChange: onTagChange
402
+ })), changed ? /*#__PURE__*/React.createElement(Button, {
403
+ theme: "primary",
404
+ onClick: onSave
405
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
406
+ id: "qIw1nW",
407
+ defaultMessage: [{
408
+ "type": 0,
409
+ "value": "Save"
410
+ }]
411
+ })) : null), /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(FormattedMessage, {
412
+ id: "c9VwT/",
413
+ defaultMessage: [{
414
+ "type": 0,
415
+ "value": "Technical details"
416
+ }]
417
+ })), /*#__PURE__*/React.createElement("ul", {
418
+ className: "list-group"
419
+ }, type !== null ? /*#__PURE__*/React.createElement("li", {
420
+ className: "list-group-item py-2 px-2"
421
+ }, /*#__PURE__*/React.createElement("div", {
422
+ className: "row"
423
+ }, /*#__PURE__*/React.createElement("div", {
424
+ className: "col-4 text-muted"
425
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
426
+ id: "OkNUmk",
427
+ defaultMessage: [{
428
+ "type": 0,
429
+ "value": "Type"
430
+ }]
431
+ })), /*#__PURE__*/React.createElement("div", {
432
+ className: "col text-capitalize"
433
+ }, /*#__PURE__*/React.createElement("small", null, type)))) : null, filename !== null ? /*#__PURE__*/React.createElement("li", {
434
+ className: "list-group-item py-2 px-2"
435
+ }, /*#__PURE__*/React.createElement("div", {
436
+ className: "row"
437
+ }, /*#__PURE__*/React.createElement("div", {
438
+ className: "col-4 text-muted"
439
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
440
+ id: "aovRFH",
441
+ defaultMessage: [{
442
+ "type": 0,
443
+ "value": "Filename"
444
+ }]
445
+ })), /*#__PURE__*/React.createElement("div", {
446
+ className: "col"
447
+ }, /*#__PURE__*/React.createElement("small", null, filename)))) : null, duration ? /*#__PURE__*/React.createElement("li", {
448
+ className: "list-group-item py-2 px-2"
449
+ }, /*#__PURE__*/React.createElement("div", {
450
+ className: "row"
451
+ }, /*#__PURE__*/React.createElement("div", {
452
+ className: "col-4 text-muted"
453
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
454
+ id: "eoW0tZ",
455
+ defaultMessage: [{
456
+ "type": 0,
457
+ "value": "Duration"
458
+ }]
459
+ })), /*#__PURE__*/React.createElement("div", {
460
+ className: "col"
461
+ }, /*#__PURE__*/React.createElement("small", null, duration)))) : null, width !== null || height !== null ? /*#__PURE__*/React.createElement("li", {
462
+ className: "list-group-item py-2 px-2"
463
+ }, /*#__PURE__*/React.createElement("div", {
464
+ className: "row"
465
+ }, /*#__PURE__*/React.createElement("div", {
466
+ className: "col-4 text-muted"
467
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
468
+ id: "mv37oK",
469
+ defaultMessage: [{
470
+ "type": 0,
471
+ "value": "Dimension"
472
+ }]
473
+ })), /*#__PURE__*/React.createElement("div", {
474
+ className: "col"
475
+ }, /*#__PURE__*/React.createElement("small", null, width, "x", height)))) : null, size !== null ? /*#__PURE__*/React.createElement("li", {
476
+ className: "list-group-item py-2 px-2"
477
+ }, /*#__PURE__*/React.createElement("div", {
478
+ className: "row"
479
+ }, /*#__PURE__*/React.createElement("div", {
480
+ className: "col-4 text-muted"
481
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
482
+ id: "liyV7Y",
483
+ defaultMessage: [{
484
+ "type": 0,
485
+ "value": "Size"
486
+ }]
487
+ })), /*#__PURE__*/React.createElement("div", {
488
+ className: "col"
489
+ }, /*#__PURE__*/React.createElement("small", null, prettyBytes(size))))) : null, description !== null ? /*#__PURE__*/React.createElement("li", {
490
+ className: "list-group-item py-2 px-2"
491
+ }, /*#__PURE__*/React.createElement("div", {
492
+ className: "row"
493
+ }, /*#__PURE__*/React.createElement("div", {
494
+ className: "col-4 text-muted"
495
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
496
+ id: "7uyslu",
497
+ defaultMessage: [{
498
+ "type": 0,
499
+ "value": "Description"
500
+ }]
501
+ })), /*#__PURE__*/React.createElement("div", {
502
+ className: "col"
503
+ }, /*#__PURE__*/React.createElement("small", null, description)))) : null, user !== null && user.name ? /*#__PURE__*/React.createElement("li", {
504
+ className: "list-group-item py-2 px-2"
505
+ }, /*#__PURE__*/React.createElement("div", {
506
+ className: "row"
507
+ }, /*#__PURE__*/React.createElement("div", {
508
+ className: "col-4 text-muted"
509
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
510
+ id: "sUR1xV",
511
+ defaultMessage: [{
512
+ "type": 0,
513
+ "value": "Author"
514
+ }]
515
+ })), /*#__PURE__*/React.createElement("div", {
516
+ className: "col"
517
+ }, /*#__PURE__*/React.createElement("small", null, user.name)))) : null)));
451
518
  };
452
519
 
453
- ActiveFilters.propTypes = propTypes$5;
454
- ActiveFilters.defaultProps = defaultProps$5;
520
+ MediaMetadata.propTypes = propTypes$8;
521
+ MediaMetadata.defaultProps = defaultProps$8;
455
522
 
456
- var useSearchSections = function useSearchSections(_ref) {
523
+ var useSearchFilters = function useSearchFilters(_ref) {
457
524
  var _ref$recent = _ref.recent,
458
525
  recent = _ref$recent === void 0 ? [] : _ref$recent,
459
526
  _ref$tags = _ref.tags,
@@ -463,26 +530,28 @@ var useSearchSections = function useSearchSections(_ref) {
463
530
  _ref$sources = _ref.sources,
464
531
  upstreamSources = _ref$sources === void 0 ? [] : _ref$sources,
465
532
  _ref$withType = _ref.withType,
466
- withType = _ref$withType === void 0 ? false : _ref$withType;
467
- var sources = [{
533
+ withType = _ref$withType === void 0 ? false : _ref$withType,
534
+ _ref$storyId = _ref.storyId,
535
+ storyId = _ref$storyId === void 0 ? null : _ref$storyId;
536
+ var sources = [].concat(_toConsumableArray(storyId !== null ? [{
468
537
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
469
- id: "xAzv6g",
538
+ id: "eiaIIB",
470
539
  defaultMessage: [{
471
540
  "type": 0,
472
- "value": "All sources"
541
+ "value": "This Micromag"
473
542
  }]
474
543
  }),
475
- value: 'all'
476
- }, {
544
+ value: storyId
545
+ }] : []), [{
477
546
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
478
- id: "eiaIIB",
547
+ id: "xAzv6g",
479
548
  defaultMessage: [{
480
549
  "type": 0,
481
- "value": "This Micromag"
550
+ "value": "All sources"
482
551
  }]
483
552
  }),
484
- value: 'micromag'
485
- }].concat(_toConsumableArray(team.length > 0 ? [{
553
+ value: 'all'
554
+ }], _toConsumableArray(team !== null && team.length > 0 ? [{
486
555
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
487
556
  id: "/62oe4",
488
557
  defaultMessage: [{
@@ -601,769 +670,735 @@ var useSearchSections = function useSearchSections(_ref) {
601
670
  };
602
671
  };
603
672
 
604
- var filtersValue = PropTypes.shape({
605
- search: PropTypes.string
673
+ var filtersValue = PropTypes$1.shape({
674
+ search: PropTypes$1.string
606
675
  });
607
- PropTypes.shape({
608
- types: PropTypes.arrayOf(PropTypes.string),
609
- tags: PropTypes.arrayOf(PropTypes.string),
610
- users: PropTypes.arrayOf(PropTypes.string),
611
- usage: PropTypes.arrayOf(PropTypes.oneOf(['used', 'unused']))
676
+ PropTypes$1.shape({
677
+ types: PropTypes$1.arrayOf(PropTypes$1.string),
678
+ tags: PropTypes$1.arrayOf(PropTypes$1.string),
679
+ users: PropTypes$1.arrayOf(PropTypes$1.string),
680
+ usage: PropTypes$1.arrayOf(PropTypes$1.oneOf(['used', 'unused']))
612
681
  });
613
682
 
614
- var styles$4 = {"container":"micromag-media-gallery-partials-navbar-container","inner":"micromag-media-gallery-partials-navbar-inner"};
683
+ var styles$4 = {"container":"micromag-media-gallery-partials-navbar-container","inner":"micromag-media-gallery-partials-navbar-inner","mediaPreview":"micromag-media-gallery-partials-navbar-mediaPreview"};
615
684
 
616
- var propTypes$4 = {
617
- filters: filtersValue,
618
- media: PropTypes$1.media,
619
- withoutTitle: PropTypes.bool,
620
- withoutSource: PropTypes.bool,
621
- withoutType: PropTypes.bool,
622
- onClickAdd: PropTypes.func,
623
- onClickCancel: PropTypes.func,
624
- onFocusSearch: PropTypes.func,
625
- onFiltersChange: PropTypes.func,
626
- onClickBack: PropTypes.func,
627
- className: PropTypes.string
685
+ var styles$3 = {"container":"micromag-media-gallery-forms-dropdown-section-container","dropdownToggle":"micromag-media-gallery-forms-dropdown-section-dropdownToggle","label":"micromag-media-gallery-forms-dropdown-section-label"};
686
+
687
+ var propTypes$7 = {
688
+ value: PropTypes$1.string,
689
+ items: PropTypes$1.arrayOf(PropTypes$1.shape({
690
+ label: PropTypes.label,
691
+ value: PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.node]),
692
+ active: PropTypes$1.bool
693
+ })),
694
+ onChange: PropTypes$1.func,
695
+ className: PropTypes$1.string
628
696
  };
629
- var defaultProps$4 = {
630
- filters: null,
631
- media: null,
632
- withoutTitle: false,
633
- withoutSource: false,
634
- withoutType: true,
635
- onClickAdd: null,
636
- onClickCancel: null,
637
- onFocusSearch: null,
638
- onFiltersChange: null,
639
- onClickBack: null,
697
+ var defaultProps$7 = {
698
+ value: null,
699
+ items: null,
700
+ onChange: null,
640
701
  className: null
641
702
  };
642
703
 
643
- var Navbar = function Navbar(_ref) {
644
- var filters = _ref.filters,
645
- media = _ref.media,
646
- withoutTitle = _ref.withoutTitle,
647
- withoutSource = _ref.withoutSource,
648
- withoutType = _ref.withoutType,
649
- className = _ref.className,
650
- onClickAdd = _ref.onClickAdd;
651
- _ref.onClickCancel;
652
- var onFocusSearch = _ref.onFocusSearch,
653
- onFiltersChange = _ref.onFiltersChange,
654
- onClickBack = _ref.onClickBack;
655
- var throttle = useRef(null);
704
+ var DropdownSection = function DropdownSection(_ref) {
705
+ var value = _ref.value,
706
+ items = _ref.items,
707
+ onChange = _ref.onChange,
708
+ className = _ref.className;
656
709
 
657
710
  var _useState = useState(false),
658
711
  _useState2 = _slicedToArray(_useState, 2),
659
712
  open = _useState2[0],
660
- setOpen = _useState2[1]; // TODO: get data from api for real testing
713
+ setOpen = _useState2[1];
661
714
 
662
-
663
- var _useMediasRecentSearc = useMediasRecentSearches(),
664
- getSearches = _useMediasRecentSearc.getSearches,
665
- createSearch = _useMediasRecentSearc.createSearch;
666
-
667
- var recent = useMemo(function () {
668
- return getSearches();
669
- }, [getSearches]);
670
-
671
- var _useMediaTags = useMediaTags(),
672
- _useMediaTags$tags = _useMediaTags.tags,
673
- tags = _useMediaTags$tags === void 0 ? [] : _useMediaTags$tags; // const { team } = useOrganisationTeam();
674
-
675
-
676
- var team = [];
677
-
678
- var _useSearchFilters = useSearchSections({
679
- recent: recent.map(function (val) {
680
- return {
681
- value: val,
682
- label: val
683
- };
684
- }),
685
- tags: tags !== null ? tags.map(function (t) {
686
- return {
687
- value: t.name,
688
- label: t.name
689
- };
690
- }) : [],
691
- team: team,
692
- withType: !withoutType
693
- }),
694
- sources = _useSearchFilters.sources,
695
- sections = _useSearchFilters.sections;
696
-
697
- var searchValue = filters !== null ? filters.search || null : null;
698
- var hasFilter = filters !== null ? Object.keys(filters).reduce(function (acc, val) {
699
- if (val !== 'type' && val !== 'search' && val !== 'source' && filters[val] !== null && filters[val].length > 0) {
700
- return true;
701
- }
702
-
703
- return acc;
704
- }, false) : false;
705
- var onFilterChange = useCallback(function (type, value) {
706
- var isOpen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
707
-
708
- var newFiltersValue = _objectSpread(_objectSpread({}, filters), {}, _defineProperty({}, type, value));
709
-
710
- if (onFiltersChange !== null) {
711
- onFiltersChange(newFiltersValue);
712
- }
713
-
714
- setOpen(isOpen);
715
- }, [filters, onFiltersChange, setOpen]);
716
- var onFiltersReset = useCallback(function () {
717
- onFiltersChange({
718
- type: filters.type || null,
719
- search: filters.search || null,
720
- source: filters.source || null
721
- });
722
- setOpen(false);
723
- }, [filters, onFiltersChange]);
724
- var onSearchChange = useCallback(function (value) {
725
- if (throttle.current !== null) {
726
- clearTimeout(throttle.current);
727
- }
728
-
729
- throttle.current = setTimeout(function () {
730
- createSearch(value);
731
- throttle.current = null;
732
- }, 5000);
733
- onFilterChange('search', value, !!value);
734
- setOpen(false);
735
- }, [onFilterChange, createSearch, setOpen, throttle]);
736
- var onSourceChange = useCallback(function (value) {
737
- onFilterChange('source', value);
738
- }, [onFilterChange]);
739
- var onSearchFocus = useCallback(function () {
740
- if (onFocusSearch !== null) {
741
- onFocusSearch();
742
- }
743
-
744
- setOpen(true);
715
+ var currentItem = items.find(function (i) {
716
+ return i.value === value;
745
717
  });
746
- var onClear = useCallback(function () {
747
- setOpen(false);
748
- }, [setOpen]);
749
- var onToggleMenu = useCallback(function () {
718
+ var onOpen = useCallback(function () {
750
719
  setOpen(!open);
751
720
  }, [open, setOpen]);
752
- var title = !withoutTitle ? /*#__PURE__*/React.createElement(FormattedMessage, {
753
- id: "JV5hRr",
721
+ var onBlur = useCallback(function () {
722
+ // Work around the event call order
723
+ setTimeout(function () {
724
+ setOpen(false);
725
+ }, 300);
726
+ }, [setOpen]);
727
+ var onItemClick = useCallback(function (e) {
728
+ var val = e.target.dataset.value || null;
729
+ setOpen(false);
730
+ onChange(val);
731
+ }, [setOpen]);
732
+ return items !== null && items.length > 1 ? /*#__PURE__*/React.createElement("div", {
733
+ className: classNames([styles$3.container, 'dropdown', _defineProperty({}, className, className !== null)])
734
+ }, /*#__PURE__*/React.createElement("span", {
735
+ className: styles$3.label
736
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
737
+ id: "9ZdD+Q",
754
738
  defaultMessage: [{
755
739
  "type": 0,
756
- "value": "Media gallery"
740
+ "value": "Library for"
757
741
  }]
758
- }) : null;
759
- return /*#__PURE__*/React.createElement("nav", {
760
- className: classNames([styles$4.container, 'navbar', _defineProperty({}, className, className !== null)])
761
- }, /*#__PURE__*/React.createElement("div", {
762
- className: styles$4.inner
763
- }, !withoutSource && media === null ? /*#__PURE__*/React.createElement("div", {
764
- className: "d-flex w-100 flex-nowrap justify-content-center"
765
- }, /*#__PURE__*/React.createElement(DropdownSection, {
766
- items: sources,
767
- value: filters.source || null,
768
- onChange: onSourceChange
769
- })) : null, /*#__PURE__*/React.createElement("div", {
770
- className: "w-100 d-flex flex-nowrap justify-content-between"
771
- }, media !== null ? /*#__PURE__*/React.createElement("form", {
772
- className: classNames(['form-inline', 'mr-2'])
773
- }, /*#__PURE__*/React.createElement(Button, {
774
- theme: "secondary",
775
- outline: true,
776
- size: "sm",
777
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
778
- icon: faChevronLeft
779
- }),
780
- onClick: onClickBack
781
- })) : null, /*#__PURE__*/React.createElement("strong", {
782
- className: "navbar-text mr-auto w-100 d-flex align-items-center justify-content-between"
783
- }, media !== null ? media.name : title, media === null ? /*#__PURE__*/React.createElement(Button, {
784
- theme: "primary",
785
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
786
- icon: faPlus
787
- }),
788
- onClick: onClickAdd
789
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
790
- id: "Tt4jN1",
742
+ })), /*#__PURE__*/React.createElement("button", {
743
+ className: classNames([styles$3.dropdownToggle, 'dropdown-toggle', {
744
+ open: open === true
745
+ }]),
746
+ type: "button",
747
+ onClick: onOpen,
748
+ onBlur: onBlur
749
+ }, (currentItem ? currentItem.label : null) || /*#__PURE__*/React.createElement(FormattedMessage, {
750
+ id: "15GBmG",
791
751
  defaultMessage: [{
792
752
  "type": 0,
793
- "value": "Add"
753
+ "value": "All"
794
754
  }]
795
- })) : null)), media === null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
796
- className: "d-flex w-100 flex-nowrap justify-content-between"
797
- }, /*#__PURE__*/React.createElement(Search, {
798
- value: searchValue,
799
- onChange: onSearchChange,
800
- onFocus: onSearchFocus,
801
- onClickIcon: onToggleMenu,
802
- className: classNames(['form-inline'])
803
- }), /*#__PURE__*/React.createElement("form", {
804
- className: classNames(['form-inline'])
805
- }, open ? /*#__PURE__*/React.createElement(Button, {
806
- className: "ml-2",
807
- theme: "primary",
808
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
809
- icon: faTimes
810
- }),
811
- onClick: onClear
812
- }) : null)), open ? /*#__PURE__*/React.createElement("div", {
813
- className: "d-flex w-100 my-1 flex-nowrap justify-content-between"
814
- }, /*#__PURE__*/React.createElement(SearchFilters, {
815
- filters: filters,
816
- sections: sections,
817
- onChange: onFilterChange
818
- })) : null) : null, hasFilter && !open && media === null ? /*#__PURE__*/React.createElement("div", {
819
- className: "d-flex w-100 my-1 flex-nowrap justify-content-between"
820
- }, /*#__PURE__*/React.createElement(ActiveFilters, {
821
- filters: filters,
822
- sections: sections,
823
- onChange: onFilterChange,
824
- onReset: onFiltersReset
825
- })) : null));
826
- };
827
-
828
- Navbar.propTypes = propTypes$4;
829
- Navbar.defaultProps = defaultProps$4;
830
-
831
- var middleEllipsis = function middleEllipsis(string, maxLength) {
832
- if (!string) return string;
833
- if (maxLength < 1) return string;
834
- if (string.length <= maxLength) return string;
835
- if (maxLength === 1) return "".concat(string.substring(0, 1), "...");
836
- var midpoint = Math.ceil(string.length / 2);
837
- var toremove = string.length - maxLength;
838
- var lstrip = Math.ceil(toremove / 2);
839
- var rstrip = toremove - lstrip;
840
- return "".concat(string.substring(0, midpoint - lstrip), "...").concat(string.substring(midpoint + rstrip));
755
+ })), /*#__PURE__*/React.createElement("div", {
756
+ className: classNames([styles$3.dropdown, 'dropdown-menu', {
757
+ show: open === true
758
+ }])
759
+ }, items.map(function (_ref3) {
760
+ var label = _ref3.label,
761
+ itemValue = _ref3.value;
762
+ var itemClassNames = classNames(['dropdown-item', {
763
+ active: itemValue === value
764
+ }]);
765
+ return /*#__PURE__*/React.createElement("button", {
766
+ className: itemClassNames,
767
+ type: "button",
768
+ key: "drop-".concat(itemValue),
769
+ onClick: onItemClick,
770
+ "data-value": itemValue
771
+ }, label);
772
+ }))) : null;
841
773
  };
842
774
 
843
- var styles$3 = {"container":"micromag-media-gallery-items-gallery-item-container","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","closeIcon":"micromag-media-gallery-items-gallery-item-closeIcon","infoButton":"micromag-media-gallery-items-gallery-item-infoButton"};
775
+ DropdownSection.propTypes = propTypes$7;
776
+ DropdownSection.defaultProps = defaultProps$7;
844
777
 
845
- var propTypes$3 = {
846
- item: PropTypes$1.media,
847
- width: PropTypes.number,
848
- selected: PropTypes.bool,
849
- withInfoButton: PropTypes.bool,
850
- className: PropTypes.string,
851
- onClick: PropTypes.func,
852
- onClickInfo: PropTypes.func
778
+ var propTypes$6 = {
779
+ value: PropTypes$1.string,
780
+ onChange: PropTypes$1.func,
781
+ onFocus: PropTypes$1.func,
782
+ onBlur: PropTypes$1.func,
783
+ onClickIcon: PropTypes$1.func,
784
+ className: PropTypes$1.string
853
785
  };
854
- var defaultProps$3 = {
855
- item: null,
856
- width: 0,
857
- selected: false,
858
- withInfoButton: false,
859
- className: null,
860
- onClick: null,
861
- onClickInfo: null
786
+ var defaultProps$6 = {
787
+ value: null,
788
+ onChange: null,
789
+ onFocus: null,
790
+ onBlur: null,
791
+ onClickIcon: null,
792
+ className: null
862
793
  };
863
794
 
864
- var GalleryItem = function GalleryItem(_ref) {
865
- var item = _ref.item,
866
- width = _ref.width,
867
- selected = _ref.selected,
868
- withInfoButton = _ref.withInfoButton,
869
- className = _ref.className,
870
- onClick = _ref.onClick,
871
- onClickInfo = _ref.onClickInfo;
872
- var type = item.type,
873
- _item$thumbnail_url = item.thumbnail_url,
874
- thumbnail = _item$thumbnail_url === void 0 ? null : _item$thumbnail_url,
875
- name = item.name,
876
- size = item.size;
877
- var title = name;
878
-
879
- if (width < 768) {
880
- title = middleEllipsis(name, Math.floor(Math.max(18, width / 2 / 9)));
881
- } else {
882
- title = middleEllipsis(name, Math.floor(Math.max(25, width / 3 / 8)));
883
- }
795
+ var Search = function Search(_ref) {
796
+ var value = _ref.value,
797
+ onChange = _ref.onChange,
798
+ onFocus = _ref.onFocus,
799
+ onBlur = _ref.onBlur,
800
+ onClickIcon = _ref.onClickIcon,
801
+ className = _ref.className;
802
+ var intl = useIntl();
803
+ var onSearchChange = useCallback(function (e) {
804
+ var newValue = e.currentTarget.value.length > 0 ? e.currentTarget.value : null;
884
805
 
885
- return /*#__PURE__*/React.createElement(Card, {
886
- image: /*#__PURE__*/React.createElement("button", {
887
- type: "button",
888
- className: classNames(['d-block', 'position-relative', 'p-0', 'border-0', 'w-100', 'text-left', 'bg-light', 'text-black', styles$3.imageButton]),
889
- onClick: onClick
890
- }, /*#__PURE__*/React.createElement("div", {
891
- className: classNames(['card-img-top', styles$3.image]),
892
- style: {
893
- backgroundImage: thumbnail !== null ? "url('".concat(thumbnail, "')") : null
894
- }
895
- })),
896
- beforeBody: /*#__PURE__*/React.createElement(React.Fragment, null, withInfoButton ? /*#__PURE__*/React.createElement(Button, {
897
- className: styles$3.infoButton,
898
- onClick: onClickInfo,
899
- withoutStyle: true
900
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
901
- icon: faInfoCircle,
902
- className: styles$3.icon
903
- })) : null, selected ? /*#__PURE__*/React.createElement("div", {
904
- className: classNames(['text-primary', styles$3.closeIcon])
905
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
906
- icon: faTimesCircle,
907
- className: styles$3.icon
908
- })) : null),
909
- footer: /*#__PURE__*/React.createElement(React.Fragment, null, type === 'video' ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
910
- className: styles$3.icon,
911
- icon: faPlayCircle
912
- }) : null, type === 'audio' ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
913
- className: styles$3.icon,
914
- icon: faHeadphonesAlt
915
- }) : null, /*#__PURE__*/React.createElement("div", {
916
- className: classNames(['text-truncate', styles$3.label])
917
- }, /*#__PURE__*/React.createElement("small", null, title), size !== null ? /*#__PURE__*/React.createElement("small", {
918
- className: "text-muted ml-1"
919
- }, size) : null)),
920
- theme: selected ? 'primary' : null,
921
- className: classNames([styles$3.container, _defineProperty({
922
- 'border-primary': selected
923
- }, className, className !== null)]),
924
- footerClassName: classNames(['p-2', styles$3.footer]),
925
- onClickFooter: onClick
926
- });
806
+ if (onChange !== null) {
807
+ onChange(newValue);
808
+ }
809
+ }, [onChange]);
810
+ useCallback(function () {
811
+ if (onChange !== null) {
812
+ onChange('');
813
+ }
814
+ }, [onChange]);
815
+ var onClickSearchIcon = useCallback(function () {
816
+ if (onClickIcon !== null) {
817
+ onClickIcon();
818
+ }
819
+ }, [onClickIcon]);
820
+ return /*#__PURE__*/React.createElement("form", {
821
+ method: "post",
822
+ className: classNames(['w-100', _defineProperty({}, className, className !== null)]),
823
+ onSubmit: function onSubmit(e) {
824
+ return e.preventDefault();
825
+ }
826
+ }, /*#__PURE__*/React.createElement("div", {
827
+ className: "input-group w-100"
828
+ }, /*#__PURE__*/React.createElement("span", {
829
+ type: "span",
830
+ className: "input-group-prepend"
831
+ }, /*#__PURE__*/React.createElement("button", {
832
+ type: "button",
833
+ className: "input-group-text reset-button",
834
+ onClick: onClickSearchIcon
835
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
836
+ icon: faSearch
837
+ }))), /*#__PURE__*/React.createElement("input", {
838
+ className: classNames(['form-control', {
839
+ 'bg-light': !!value,
840
+ 'text-dark': value
841
+ }]),
842
+ type: "text",
843
+ value: value || '',
844
+ placeholder: intl.formatMessage({
845
+ "id": "gprXiG",
846
+ "defaultMessage": [{
847
+ "type": 0,
848
+ "value": "Search..."
849
+ }]
850
+ }),
851
+ onChange: onSearchChange,
852
+ onFocus: onFocus,
853
+ onBlur: onBlur
854
+ }), null));
927
855
  };
928
856
 
929
- GalleryItem.propTypes = propTypes$3;
930
- GalleryItem.defaultProps = defaultProps$3;
931
-
932
- var styles$2 = {};
857
+ Search.propTypes = propTypes$6;
858
+ Search.defaultProps = defaultProps$6;
933
859
 
934
- var propTypes$2 = {
935
- items: PropTypes$1.medias,
936
- selectedItem: PropTypes$1.media,
937
- withInfoButton: PropTypes.bool,
938
- isSmall: PropTypes.bool,
939
- selectedFirst: PropTypes.bool,
940
- className: PropTypes.string,
941
- onClickItem: PropTypes.func,
942
- onClickItemInfo: PropTypes.func
860
+ var propTypes$5 = {
861
+ tags: PropTypes$1.arrayOf(PropTypes$1.shape({
862
+ label: PropTypes$1.string,
863
+ value: PropTypes$1.oneOf([PropTypes$1.string, PropTypes$1.node]),
864
+ active: PropTypes$1.bool
865
+ })),
866
+ parent: PropTypes$1.string,
867
+ onChange: PropTypes$1.func,
868
+ className: PropTypes$1.string
943
869
  };
944
- var defaultProps$2 = {
945
- items: null,
946
- selectedItem: null,
947
- withInfoButton: false,
948
- isSmall: false,
949
- selectedFirst: false,
950
- className: null,
951
- onClickItem: null,
952
- onClickItemInfo: null
870
+ var defaultProps$5 = {
871
+ tags: null,
872
+ parent: null,
873
+ onChange: null,
874
+ className: null
953
875
  };
954
876
 
955
- var Gallery = function Gallery(_ref) {
956
- var items = _ref.items,
957
- selectedItem = _ref.selectedItem,
958
- withInfoButton = _ref.withInfoButton,
959
- isSmall = _ref.isSmall,
960
- selectedFirst = _ref.selectedFirst,
961
- className = _ref.className,
962
- onClickItem = _ref.onClickItem,
963
- onClickItemInfo = _ref.onClickItemInfo;
964
-
965
- var _useResizeObserver = useResizeObserver(),
966
- ref = _useResizeObserver.ref,
967
- contentRect = _useResizeObserver.entry.contentRect;
968
-
969
- var _ref2 = contentRect || {},
970
- width = _ref2.width;
971
-
972
- var finalItems = useMemo(function () {
973
- if (selectedFirst && selectedItem !== null && typeof selectedItem.id !== 'undefined') {
974
- return [selectedItem].concat(_toConsumableArray(items.filter(function (_ref3) {
975
- var id = _ref3.id;
976
- return id !== selectedItem.id;
977
- })));
978
- }
979
-
980
- return items;
981
- }, [selectedFirst, selectedItem, items]);
877
+ var TagSection = function TagSection(_ref) {
878
+ var tags = _ref.tags,
879
+ parent = _ref.parent,
880
+ onChange = _ref.onChange,
881
+ className = _ref.className;
882
+ var onItemChange = useCallback(function (e) {
883
+ var val = e.target.dataset.value || null;
884
+ onChange(val, parent);
885
+ }, [onChange, parent]);
982
886
  return /*#__PURE__*/React.createElement("div", {
983
- className: classNames([styles$2.container, 'p-2', _defineProperty({}, className, className !== null)]),
984
- ref: ref
985
- }, /*#__PURE__*/React.createElement("div", {
986
- className: classNames(['row', 'mx-n1', 'row-cols-2', {
987
- 'row-cols-md-3': !isSmall
988
- }])
989
- }, finalItems.map(function (item) {
990
- return /*#__PURE__*/React.createElement("div", {
991
- className: "col px-1 py-1",
992
- key: "gallery-item-".concat(item.id)
993
- }, /*#__PURE__*/React.createElement(GalleryItem, {
994
- item: item,
995
- width: width,
996
- selected: selectedItem !== null && selectedItem.id === item.id,
997
- onClick: onClickItem !== null ? function () {
998
- return onClickItem(item);
999
- } : null,
1000
- onClickInfo: onClickItemInfo !== null ? function () {
1001
- return onClickItemInfo(item);
1002
- } : null,
1003
- withInfoButton: withInfoButton
1004
- }));
1005
- })));
887
+ className: classNames(['d-flex', 'mt-1', _defineProperty({}, className, className !== null)])
888
+ }, tags !== null ? tags.map(function (_ref3) {
889
+ var label = _ref3.label,
890
+ value = _ref3.value,
891
+ active = _ref3.active;
892
+ var itemClassNames = classNames(['btn', 'btn-sm', 'mb-1', 'mr-1', 'btn-dark', {
893
+ 'btn-primary': active === true // 'btn-outline-light': active === false,
894
+
895
+ }]);
896
+ return /*#__PURE__*/React.createElement("button", {
897
+ className: itemClassNames,
898
+ type: "button",
899
+ key: "tag-".concat(value),
900
+ onClick: onItemChange,
901
+ "data-value": value
902
+ }, label);
903
+ }) : null);
1006
904
  };
1007
905
 
1008
- Gallery.propTypes = propTypes$2;
1009
- Gallery.defaultProps = defaultProps$2;
906
+ TagSection.propTypes = propTypes$5;
907
+ TagSection.defaultProps = defaultProps$5;
1010
908
 
1011
- var styles$1 = {"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"};
909
+ var styles$2 = {"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"};
1012
910
 
1013
- var propTypes$1 = {
1014
- media: PropTypes$1.media,
1015
- className: PropTypes.string
911
+ var propTypes$4 = {
912
+ filters: PropTypes$1.object,
913
+ // eslint-disable-line
914
+ sections: PropTypes$1.arrayOf(PropTypes$1.object),
915
+ onChange: PropTypes$1.func,
916
+ onClose: PropTypes$1.func,
917
+ className: PropTypes$1.string
1016
918
  };
1017
- var defaultProps$1 = {
1018
- media: null,
919
+ var defaultProps$4 = {
920
+ filters: null,
921
+ sections: [],
922
+ onChange: null,
923
+ onClose: null,
1019
924
  className: null
1020
925
  };
1021
926
 
1022
- var MediaMetadata = function MediaMetadata(_ref) {
1023
- var media = _ref.media,
927
+ var SearchFilters = function SearchFilters(_ref) {
928
+ var filters = _ref.filters,
929
+ sections = _ref.sections,
930
+ onChange = _ref.onChange,
931
+ onClose = _ref.onClose,
1024
932
  className = _ref.className;
933
+ var intl = useIntl();
934
+ var getActive = useCallback(function (items, sectionFilters) {
935
+ return items !== null ? items.map(function (it) {
936
+ return _objectSpread(_objectSpread({}, it), {}, {
937
+ active: sectionFilters ? !!sectionFilters.find(function (f) {
938
+ return f === it.value;
939
+ }) : false
940
+ });
941
+ }) : [];
942
+ }, []);
943
+ var activeSections = useMemo(function () {
944
+ return sections.map(function (section) {
945
+ return _objectSpread(_objectSpread({}, section), {}, {
946
+ items: getActive(section.items, filters[section.value])
947
+ });
948
+ });
949
+ }, [getActive, sections, filters]);
950
+ var onSectionChange = useCallback(function (data, section) {
951
+ var val = filters[section] ? filters[section] : [];
952
+ var found = !!val.find(function (f) {
953
+ return f === data;
954
+ });
1025
955
 
1026
- var _ref2 = media || {},
1027
- mediaId = _ref2.id,
1028
- type = _ref2.type,
1029
- _ref2$url = _ref2.url,
1030
- url = _ref2$url === void 0 ? null : _ref2$url,
1031
- _ref2$thumbnail_url = _ref2.thumbnail_url,
1032
- thumbnail = _ref2$thumbnail_url === void 0 ? null : _ref2$thumbnail_url,
1033
- _ref2$name = _ref2.name,
1034
- mediaName = _ref2$name === void 0 ? null : _ref2$name,
1035
- _ref2$metadata = _ref2.metadata,
1036
- metadata = _ref2$metadata === void 0 ? {} : _ref2$metadata;
1037
-
1038
- var _ref3 = metadata || {},
1039
- _ref3$filename = _ref3.filename,
1040
- filename = _ref3$filename === void 0 ? null : _ref3$filename,
1041
- _ref3$size = _ref3.size,
1042
- size = _ref3$size === void 0 ? null : _ref3$size,
1043
- _ref3$width = _ref3.width,
1044
- width = _ref3$width === void 0 ? null : _ref3$width,
1045
- _ref3$height = _ref3.height,
1046
- height = _ref3$height === void 0 ? null : _ref3$height,
1047
- _ref3$duration = _ref3.duration,
1048
- duration = _ref3$duration === void 0 ? null : _ref3$duration,
1049
- _ref3$user = _ref3.user,
1050
- user = _ref3$user === void 0 ? null : _ref3$user,
1051
- _ref3$description = _ref3.description,
1052
- mediaDescription = _ref3$description === void 0 ? null : _ref3$description,
1053
- _ref3$tags = _ref3.tags,
1054
- mediaTags = _ref3$tags === void 0 ? [] : _ref3$tags; // const api = useApi();
1055
-
1056
-
1057
- var story = useStory();
1058
-
1059
- var _ref4 = story || {},
1060
- _ref4$id = _ref4.id,
1061
- documentId = _ref4$id === void 0 ? null : _ref4$id;
956
+ if (found) {
957
+ onChange(section, val.filter(function (f) {
958
+ return f !== data;
959
+ }));
960
+ } else if (data) {
961
+ if (section === 'recent') {
962
+ onChange('search', data);
963
+ } else if (section === 'usage') {
964
+ onChange(section, [data]);
965
+ } else {
966
+ onChange(section, [].concat(_toConsumableArray(val), [data]));
967
+ }
968
+ }
969
+ }, [filters, onChange]);
970
+ return /*#__PURE__*/React.createElement("div", {
971
+ className: classNames([styles$2.container, 'flex-nowrap', 'mt-1', _defineProperty({}, className, className !== null)])
972
+ }, activeSections.length > 0 ? /*#__PURE__*/React.createElement("div", {
973
+ className: classNames(['bg-light', 'flex-nowrap', 'text-dark', 'py-1', 'px-3', 'rounded'])
974
+ }, /*#__PURE__*/React.createElement(Button, {
975
+ className: classNames([styles$2.closeBtn, 'py-1', 'px-1', 'text-dark']),
976
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
977
+ icon: faTimes
978
+ }),
979
+ onClick: onClose,
980
+ title: intl.formatMessage({
981
+ "id": "yCXMzz",
982
+ "defaultMessage": [{
983
+ "type": 0,
984
+ "value": "Close"
985
+ }]
986
+ })
987
+ }), activeSections.map(function (_ref3) {
988
+ var value = _ref3.value,
989
+ label = _ref3.label,
990
+ items = _ref3.items;
991
+ return items.length > 0 ? /*#__PURE__*/React.createElement("div", {
992
+ key: "filter-".concat(value),
993
+ className: classNames([styles$2.section, 'py-2'])
994
+ }, /*#__PURE__*/React.createElement("p", {
995
+ className: classNames([styles$2.title, 'm-0'])
996
+ }, label), /*#__PURE__*/React.createElement(TagSection, {
997
+ className: classNames([styles$2.tags]),
998
+ tags: items,
999
+ parent: value,
1000
+ onChange: onSectionChange
1001
+ })) : null;
1002
+ })) : null);
1003
+ };
1062
1004
 
1063
- var _useMediaTags = useMediaTags(),
1064
- usedTags = _useMediaTags.tags; // const { authors: usedAuthors } = useMediaAuthors();
1005
+ SearchFilters.propTypes = propTypes$4;
1006
+ SearchFilters.defaultProps = defaultProps$4;
1065
1007
 
1008
+ var styles$1 = {"container":"micromag-media-gallery-buttons-close-container"};
1066
1009
 
1067
- var _useMediaUpdate = useMediaUpdate(),
1068
- update = _useMediaUpdate.update;
1010
+ var _excluded = ["className"];
1011
+ var propTypes$3 = {
1012
+ className: PropTypes$1.string
1013
+ };
1014
+ var defaultProps$3 = {
1015
+ className: null
1016
+ };
1069
1017
 
1070
- console.log(story, documentId); // eslint-disable-line
1071
- // const loadTags = useCallback(
1072
- // (input) =>
1073
- // api.medias.getTags(
1074
- // {
1075
- // search: input,
1076
- // },
1077
- // 5,
1078
- // ),
1079
- // [api],
1080
- // );
1081
-
1082
- var getOptionLabel = useCallback(function (_ref5) {
1083
- var name = _ref5.name;
1084
- return name;
1085
- }, []);
1086
- var getOptionValue = useCallback(function (_ref6) {
1087
- var name = _ref6.name;
1088
- return name;
1089
- }, []);
1090
- var getNewOptionData = useCallback(function (inputValue) {
1091
- return {
1092
- name: inputValue
1093
- };
1094
- }, []);
1095
- var allTags = useMemo(function () {
1096
- return usedTags !== null ? uniqBy(mediaTags.concat(usedTags), function (_ref7) {
1097
- var id = _ref7.id;
1098
- return id;
1099
- }) : mediaTags;
1100
- }, [mediaTags, usedTags]);
1018
+ var CloseButton = function CloseButton(_ref) {
1019
+ var className = _ref.className,
1020
+ props = _objectWithoutProperties(_ref, _excluded);
1101
1021
 
1102
- var _useState = useState(mediaName),
1103
- _useState2 = _slicedToArray(_useState, 2),
1104
- name = _useState2[0],
1105
- setName = _useState2[1];
1022
+ return /*#__PURE__*/React.createElement(Button, Object.assign({
1023
+ className: classNames([styles$1.container, _defineProperty({}, className, className !== null)]),
1024
+ withoutStyle: true,
1025
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1026
+ icon: faTimes,
1027
+ className: styles$1.icon
1028
+ }),
1029
+ iconPosition: "right"
1030
+ }, props));
1031
+ };
1106
1032
 
1107
- var _useState3 = useState(mediaDescription),
1108
- _useState4 = _slicedToArray(_useState3, 2),
1109
- description = _useState4[0],
1110
- setDescription = _useState4[1];
1033
+ CloseButton.propTypes = propTypes$3;
1034
+ CloseButton.defaultProps = defaultProps$3;
1111
1035
 
1112
- var _useState5 = useState(mediaTags.map(getOptionValue)),
1113
- _useState6 = _slicedToArray(_useState5, 2),
1114
- tags = _useState6[0],
1115
- setTags = _useState6[1];
1036
+ var styles = {"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"};
1116
1037
 
1117
- var _useState7 = useState(false),
1118
- _useState8 = _slicedToArray(_useState7, 2),
1119
- changed = _useState8[0],
1120
- setChanged = _useState8[1];
1038
+ var propTypes$2 = {
1039
+ filters: PropTypes$1.shape({
1040
+ types: PropTypes$1.arrayOf(PropTypes$1.string),
1041
+ tags: PropTypes$1.arrayOf(PropTypes$1.string),
1042
+ users: PropTypes$1.arrayOf(PropTypes$1.string),
1043
+ usage: PropTypes$1.arrayOf(PropTypes$1.oneOf(['used', 'unused']))
1044
+ }),
1045
+ onChange: PropTypes$1.func,
1046
+ onReset: PropTypes$1.func,
1047
+ sections: PropTypes$1.arrayOf(PropTypes$1.object),
1048
+ className: PropTypes$1.string
1049
+ };
1050
+ var defaultProps$2 = {
1051
+ filters: null,
1052
+ onChange: null,
1053
+ onReset: null,
1054
+ sections: [],
1055
+ className: null
1056
+ };
1121
1057
 
1122
- var onTagChange = useCallback(function (val) {
1123
- setTags(val);
1124
- setChanged(true);
1125
- }, [tags, setTags, setChanged]);
1126
- var onNameChange = useCallback(function (val) {
1127
- setName(val);
1128
- setChanged(true);
1129
- }, [tags, setName, setChanged]);
1130
- var onDescriptionChange = useCallback(function (val) {
1131
- setDescription(val);
1132
- setChanged(true);
1133
- }, [tags, setDescription, setChanged]);
1134
- var onSave = useCallback(function () {
1135
- return update(mediaId, {
1136
- name: name,
1137
- tags: tags,
1138
- description: description
1139
- }).then(function () {
1140
- setChanged(false);
1141
- });
1142
- }, [mediaId, name, tags, description, metadata, update]);
1143
- useEffect(function () {
1144
- if (media !== null) {
1145
- setTags(mediaTags);
1146
- setName(mediaName);
1147
- setDescription(mediaDescription);
1148
- } else {
1149
- setTags([]);
1150
- setName(null);
1151
- setDescription(null);
1058
+ var ActiveFilters = function ActiveFilters(_ref) {
1059
+ var filters = _ref.filters,
1060
+ onChange = _ref.onChange,
1061
+ onReset = _ref.onReset,
1062
+ sections = _ref.sections,
1063
+ className = _ref.className;
1064
+ var handleReset = useCallback(function () {
1065
+ if (onReset !== null) {
1066
+ onReset();
1152
1067
  }
1068
+ }, [onReset]);
1069
+ var removeFilter = useCallback(function (key, activeValue) {
1070
+ var newFilterValue = filters[key].filter(function (it) {
1071
+ return it !== activeValue;
1072
+ });
1073
+ var newValue = newFilterValue.length > 0 ? newFilterValue : null;
1153
1074
 
1154
- setChanged(false);
1155
- }, [media, setTags, setName, setDescription, setChanged]);
1156
- var TextField = useFieldComponent('text');
1157
- var TokensField = useFieldComponent('tokens');
1158
- return /*#__PURE__*/React.createElement("div", {
1159
- className: classNames([styles$1.container, _defineProperty({}, className, className)])
1160
- }, /*#__PURE__*/React.createElement("div", {
1161
- className: classNames(['position-relative', _defineProperty({
1162
- 'bg-light': type === 'audio',
1163
- 'bg-black': type === 'image'
1164
- }, styles$1.video, type === 'video')])
1165
- }, type === 'video' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("video", {
1166
- className: styles$1.player,
1167
- controls: true,
1168
- src: url
1169
- })) : null, type === 'audio' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1170
- className: styles$1.audio
1171
- }, /*#__PURE__*/React.createElement("audio", {
1172
- className: styles$1.player,
1173
- controls: true,
1174
- src: url
1175
- }))) : null, type !== 'video' ? /*#__PURE__*/React.createElement("img", {
1176
- src: thumbnail,
1177
- className: styles$1.image,
1178
- alt: filename
1179
- }) : null), /*#__PURE__*/React.createElement("div", {
1180
- className: "p-2"
1181
- }, /*#__PURE__*/React.createElement("div", {
1182
- className: "tags mb-4"
1183
- }, /*#__PURE__*/React.createElement("div", {
1184
- className: "form-group"
1185
- }, /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(FormattedMessage, {
1186
- id: "kBz8vF",
1187
- defaultMessage: [{
1188
- "type": 0,
1189
- "value": "Name"
1190
- }]
1191
- })), /*#__PURE__*/React.createElement(TextField, {
1192
- value: name,
1193
- onChange: onNameChange
1194
- })), /*#__PURE__*/React.createElement("div", {
1195
- className: "form-group"
1196
- }, /*#__PURE__*/React.createElement("h6", {
1197
- className: "mb-0"
1198
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1199
- id: "YJZtWR",
1200
- defaultMessage: [{
1201
- "type": 0,
1202
- "value": "Description"
1203
- }]
1204
- })), /*#__PURE__*/React.createElement("p", {
1205
- className: "mb-1"
1206
- }, /*#__PURE__*/React.createElement("small", null, /*#__PURE__*/React.createElement(FormattedMessage, {
1207
- id: "EDFyUp",
1208
- defaultMessage: [{
1209
- "type": 0,
1210
- "value": "Alternative text (accessibility)"
1211
- }]
1212
- }))), /*#__PURE__*/React.createElement(TextField, {
1213
- value: description,
1214
- onChange: onDescriptionChange
1215
- })), /*#__PURE__*/React.createElement("div", {
1216
- className: "form-group"
1217
- }, /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(FormattedMessage, {
1218
- id: "4fHMVj",
1219
- defaultMessage: [{
1220
- "type": 0,
1221
- "value": "Tags"
1222
- }]
1223
- })), /*#__PURE__*/React.createElement(TokensField, {
1224
- value: tags,
1225
- options: allTags // loadOptions={loadTags}
1226
- ,
1227
- getOptionLabel: getOptionLabel,
1228
- getOptionValue: getOptionValue,
1229
- getNewOptionData: getNewOptionData,
1230
- onChange: onTagChange
1231
- })), changed ? /*#__PURE__*/React.createElement(Button, {
1232
- theme: "primary",
1233
- onClick: onSave
1234
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1235
- id: "qIw1nW",
1236
- defaultMessage: [{
1237
- "type": 0,
1238
- "value": "Save"
1239
- }]
1240
- })) : null), /*#__PURE__*/React.createElement("h6", null, /*#__PURE__*/React.createElement(FormattedMessage, {
1241
- id: "c9VwT/",
1242
- defaultMessage: [{
1243
- "type": 0,
1244
- "value": "Technical details"
1245
- }]
1246
- })), /*#__PURE__*/React.createElement("ul", {
1247
- className: "list-group"
1248
- }, type !== null ? /*#__PURE__*/React.createElement("li", {
1249
- className: "list-group-item py-2 px-2"
1250
- }, /*#__PURE__*/React.createElement("div", {
1251
- className: "row"
1252
- }, /*#__PURE__*/React.createElement("div", {
1253
- className: "col-4 text-muted"
1254
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1255
- id: "OkNUmk",
1256
- defaultMessage: [{
1257
- "type": 0,
1258
- "value": "Type"
1259
- }]
1260
- })), /*#__PURE__*/React.createElement("div", {
1261
- className: "col text-capitalize"
1262
- }, /*#__PURE__*/React.createElement("small", null, type)))) : null, filename !== null ? /*#__PURE__*/React.createElement("li", {
1263
- className: "list-group-item py-2 px-2"
1264
- }, /*#__PURE__*/React.createElement("div", {
1265
- className: "row"
1266
- }, /*#__PURE__*/React.createElement("div", {
1267
- className: "col-4 text-muted"
1268
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1269
- id: "aovRFH",
1270
- defaultMessage: [{
1271
- "type": 0,
1272
- "value": "Filename"
1273
- }]
1274
- })), /*#__PURE__*/React.createElement("div", {
1275
- className: "col"
1276
- }, /*#__PURE__*/React.createElement("small", null, filename)))) : null, duration ? /*#__PURE__*/React.createElement("li", {
1277
- className: "list-group-item py-2 px-2"
1278
- }, /*#__PURE__*/React.createElement("div", {
1279
- className: "row"
1280
- }, /*#__PURE__*/React.createElement("div", {
1281
- className: "col-4 text-muted"
1282
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1283
- id: "eoW0tZ",
1284
- defaultMessage: [{
1285
- "type": 0,
1286
- "value": "Duration"
1287
- }]
1288
- })), /*#__PURE__*/React.createElement("div", {
1289
- className: "col"
1290
- }, /*#__PURE__*/React.createElement("small", null, duration)))) : null, width !== null || height !== null ? /*#__PURE__*/React.createElement("li", {
1291
- className: "list-group-item py-2 px-2"
1292
- }, /*#__PURE__*/React.createElement("div", {
1293
- className: "row"
1075
+ if (onChange !== null) {
1076
+ onChange(key, newValue);
1077
+ }
1078
+ }, [onChange, filters]);
1079
+ var hasValue = Object.keys(filters).reduce(function (oneHasValue, key) {
1080
+ return oneHasValue || filters[key] !== null;
1081
+ }, false);
1082
+ return /*#__PURE__*/React.createElement("div", {
1083
+ className: classNames(['w-100', styles.container, _defineProperty({}, className, className)])
1084
+ }, hasValue ? /*#__PURE__*/React.createElement("div", {
1085
+ className: styles.heading
1294
1086
  }, /*#__PURE__*/React.createElement("div", {
1295
- className: "col-4 text-muted"
1087
+ className: styles.title
1296
1088
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
1297
- id: "mv37oK",
1089
+ id: "t2cFdl",
1298
1090
  defaultMessage: [{
1299
1091
  "type": 0,
1300
- "value": "Dimension"
1092
+ "value": "Active filters"
1301
1093
  }]
1302
- })), /*#__PURE__*/React.createElement("div", {
1303
- className: "col"
1304
- }, /*#__PURE__*/React.createElement("small", null, width, "x", height)))) : null, size !== null ? /*#__PURE__*/React.createElement("li", {
1305
- className: "list-group-item py-2 px-2"
1306
- }, /*#__PURE__*/React.createElement("div", {
1307
- className: "row"
1308
- }, /*#__PURE__*/React.createElement("div", {
1309
- className: "col-4 text-muted"
1310
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1311
- id: "liyV7Y",
1094
+ })), /*#__PURE__*/React.createElement(CloseButton, {
1095
+ className: styles.resetButton,
1096
+ onClick: handleReset
1097
+ }, /*#__PURE__*/React.createElement("u", null, /*#__PURE__*/React.createElement(FormattedMessage, {
1098
+ id: "/T/UDH",
1312
1099
  defaultMessage: [{
1313
1100
  "type": 0,
1314
- "value": "Size"
1101
+ "value": "Remove all"
1315
1102
  }]
1316
- })), /*#__PURE__*/React.createElement("div", {
1317
- className: "col"
1318
- }, /*#__PURE__*/React.createElement("small", null, prettyBytes(size))))) : null, description !== null ? /*#__PURE__*/React.createElement("li", {
1319
- className: "list-group-item py-2 px-2"
1320
- }, /*#__PURE__*/React.createElement("div", {
1321
- className: "row"
1103
+ })))) : null, filters !== null ? Object.keys(filters).map(function (key) {
1104
+ var section = sections.find(function (s) {
1105
+ return s.value === key;
1106
+ });
1107
+ return section && filters[key] !== null ? filters[key].map(function (activeValue) {
1108
+ var current = section.items.find(function (s) {
1109
+ return s.value === activeValue;
1110
+ });
1111
+
1112
+ var _ref3 = current || {},
1113
+ _ref3$label = _ref3.label,
1114
+ label = _ref3$label === void 0 ? '' : _ref3$label;
1115
+
1116
+ return /*#__PURE__*/React.createElement(Button, {
1117
+ className: styles.activeTag,
1118
+ key: "filter-button-".concat(activeValue),
1119
+ type: "submit",
1120
+ size: "sm",
1121
+ label: /*#__PURE__*/React.createElement("span", null, section.label, " : ", label),
1122
+ theme: "secondary",
1123
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1124
+ icon: faTimes
1125
+ }),
1126
+ iconPosition: "right",
1127
+ onClick: function onClick() {
1128
+ return removeFilter(key, activeValue);
1129
+ }
1130
+ });
1131
+ }) : null;
1132
+ }) : null);
1133
+ };
1134
+
1135
+ ActiveFilters.propTypes = propTypes$2;
1136
+ ActiveFilters.defaultProps = defaultProps$2;
1137
+
1138
+ var propTypes$1 = {
1139
+ filters: filtersValue,
1140
+ media: PropTypes.media,
1141
+ selectedMedia: PropTypes.media,
1142
+ storyId: PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.number]),
1143
+ tags: PropTypes.tags,
1144
+ authors: PropTypes.authors,
1145
+ withoutSource: PropTypes$1.bool,
1146
+ withoutType: PropTypes$1.bool,
1147
+ onClickAdd: PropTypes$1.func,
1148
+ onClickItem: PropTypes$1.func,
1149
+ onClickItemInfo: PropTypes$1.func,
1150
+ // onClickCancel: PropTypes.func, // TODO: still needed?
1151
+ onFocusSearch: PropTypes$1.func,
1152
+ onFiltersChange: PropTypes$1.func,
1153
+ onClickBack: PropTypes$1.func,
1154
+ className: PropTypes$1.string
1155
+ };
1156
+ var defaultProps$1 = {
1157
+ filters: null,
1158
+ media: null,
1159
+ selectedMedia: null,
1160
+ storyId: null,
1161
+ tags: [],
1162
+ authors: [],
1163
+ withoutSource: false,
1164
+ withoutType: true,
1165
+ onClickAdd: null,
1166
+ onClickItem: null,
1167
+ onClickItemInfo: null,
1168
+ // onClickCancel: null,
1169
+ onFocusSearch: null,
1170
+ onFiltersChange: null,
1171
+ onClickBack: null,
1172
+ className: null
1173
+ };
1174
+
1175
+ var Navbar = function Navbar(_ref) {
1176
+ var filters = _ref.filters,
1177
+ media = _ref.media,
1178
+ selectedMedia = _ref.selectedMedia,
1179
+ storyId = _ref.storyId,
1180
+ tags = _ref.tags,
1181
+ authors = _ref.authors,
1182
+ withoutSource = _ref.withoutSource,
1183
+ withoutType = _ref.withoutType,
1184
+ className = _ref.className,
1185
+ onClickAdd = _ref.onClickAdd,
1186
+ onClickItem = _ref.onClickItem,
1187
+ onClickItemInfo = _ref.onClickItemInfo,
1188
+ onFocusSearch = _ref.onFocusSearch,
1189
+ onFiltersChange = _ref.onFiltersChange,
1190
+ onClickBack = _ref.onClickBack;
1191
+ var intl = useIntl();
1192
+ var throttle = useRef(null);
1193
+
1194
+ var _useState = useState(false),
1195
+ _useState2 = _slicedToArray(_useState, 2),
1196
+ open = _useState2[0],
1197
+ setOpen = _useState2[1]; // TODO: get data from api for real testing
1198
+
1199
+
1200
+ var _useMediasRecentSearc = useMediasRecentSearches(),
1201
+ getSearches = _useMediasRecentSearc.getSearches,
1202
+ createSearch = _useMediasRecentSearc.createSearch;
1203
+
1204
+ var recent = useMemo(function () {
1205
+ return getSearches();
1206
+ }, [getSearches]);
1207
+
1208
+ var _useSearchFilters = useSearchFilters({
1209
+ recent: recent.map(function (val) {
1210
+ return {
1211
+ value: val,
1212
+ label: val
1213
+ };
1214
+ }),
1215
+ tags: tags !== null ? tags.map(function (t) {
1216
+ return {
1217
+ value: t.name,
1218
+ label: t.name
1219
+ };
1220
+ }) : [],
1221
+ team: authors || [],
1222
+ withType: !withoutType,
1223
+ storyId: storyId
1224
+ }),
1225
+ sources = _useSearchFilters.sources,
1226
+ sections = _useSearchFilters.sections;
1227
+
1228
+ var searchValue = filters !== null ? filters.search || null : null;
1229
+ var hasFilter = filters !== null ? Object.keys(filters).reduce(function (acc, val) {
1230
+ if (val !== 'type' && val !== 'search' && val !== 'source' && filters[val] !== null && filters[val].length > 0) {
1231
+ return true;
1232
+ }
1233
+
1234
+ return acc;
1235
+ }, false) : false;
1236
+ var onFilterChange = useCallback(function (type, value) {
1237
+ var isOpen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1238
+
1239
+ var newFiltersValue = _objectSpread(_objectSpread({}, filters), {}, _defineProperty({}, type, value));
1240
+
1241
+ if (onFiltersChange !== null) {
1242
+ onFiltersChange(newFiltersValue);
1243
+ }
1244
+
1245
+ setOpen(isOpen);
1246
+ }, [filters, onFiltersChange, setOpen]);
1247
+ var onFiltersReset = useCallback(function () {
1248
+ onFiltersChange({
1249
+ type: filters.type || null,
1250
+ search: filters.search || null,
1251
+ source: filters.source || null
1252
+ });
1253
+ setOpen(false);
1254
+ }, [filters, onFiltersChange]);
1255
+ var onSearchChange = useCallback(function (value) {
1256
+ if (throttle.current !== null) {
1257
+ clearTimeout(throttle.current);
1258
+ }
1259
+
1260
+ throttle.current = setTimeout(function () {
1261
+ createSearch(value);
1262
+ throttle.current = null;
1263
+ }, 5000);
1264
+ onFilterChange('search', value, !!value);
1265
+ setOpen(false);
1266
+ }, [onFilterChange, createSearch, setOpen, throttle]);
1267
+ var onSourceChange = useCallback(function (value) {
1268
+ onFilterChange('source', value);
1269
+ }, [onFilterChange]);
1270
+ var onSearchFocus = useCallback(function () {
1271
+ if (onFocusSearch !== null) {
1272
+ onFocusSearch();
1273
+ }
1274
+
1275
+ setOpen(true);
1276
+ });
1277
+ var onCloseFilters = useCallback(function () {
1278
+ setOpen(false);
1279
+ }, [setOpen]);
1280
+ var onToggleMenu = useCallback(function () {
1281
+ setOpen(!open);
1282
+ }, [open, setOpen]);
1283
+ return /*#__PURE__*/React.createElement("nav", {
1284
+ className: classNames([styles$4.container, 'navbar', _defineProperty({}, className, className !== null)])
1322
1285
  }, /*#__PURE__*/React.createElement("div", {
1323
- className: "col-4 text-muted"
1324
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
1325
- id: "7uyslu",
1286
+ className: styles$4.inner
1287
+ }, media === null ? /*#__PURE__*/React.createElement("strong", {
1288
+ className: "list-group-item rounded w-100 py-1 px-1 navbar-text d-flex align-items-center justify-content-between"
1289
+ }, selectedMedia !== null ? /*#__PURE__*/React.createElement(Button, {
1290
+ className: "d-flex px-0 py-0 align-items-center",
1291
+ onClick: function onClick() {
1292
+ return onClickItemInfo(selectedMedia);
1293
+ }
1294
+ }, /*#__PURE__*/React.createElement(Media, {
1295
+ className: styles$4.mediaPreview,
1296
+ thumbnail: selectedMedia === null || selectedMedia === void 0 ? void 0 : selectedMedia.thumbnail_url
1297
+ }), /*#__PURE__*/React.createElement("span", {
1298
+ className: "ml-2"
1299
+ }, selectedMedia.name || /*#__PURE__*/React.createElement(FormattedMessage, {
1300
+ id: "fVqgfl",
1326
1301
  defaultMessage: [{
1327
1302
  "type": 0,
1328
- "value": "Description"
1303
+ "value": "[no title]"
1329
1304
  }]
1330
- })), /*#__PURE__*/React.createElement("div", {
1331
- className: "col"
1332
- }, /*#__PURE__*/React.createElement("small", null, description)))) : null, user !== null && user.name ? /*#__PURE__*/React.createElement("li", {
1333
- className: "list-group-item py-2 px-2"
1334
- }, /*#__PURE__*/React.createElement("div", {
1335
- className: "row"
1336
- }, /*#__PURE__*/React.createElement("div", {
1337
- className: "col-4 text-muted"
1305
+ }))) : /*#__PURE__*/React.createElement("span", {
1306
+ className: "pl-2"
1338
1307
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
1339
- id: "sUR1xV",
1308
+ id: "VspZp9",
1340
1309
  defaultMessage: [{
1341
1310
  "type": 0,
1342
- "value": "Author"
1311
+ "value": "Upload an image"
1343
1312
  }]
1344
- })), /*#__PURE__*/React.createElement("div", {
1345
- className: "col"
1346
- }, /*#__PURE__*/React.createElement("small", null, user.name)))) : null)));
1313
+ })), selectedMedia === null ? /*#__PURE__*/React.createElement(Button, {
1314
+ theme: "primary",
1315
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1316
+ icon: faPlus
1317
+ }),
1318
+ onClick: onClickAdd,
1319
+ title: intl.formatMessage({
1320
+ "id": "Tt4jN1",
1321
+ "defaultMessage": [{
1322
+ "type": 0,
1323
+ "value": "Add"
1324
+ }]
1325
+ })
1326
+ }) : /*#__PURE__*/React.createElement(Button, {
1327
+ theme: "primary",
1328
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1329
+ icon: faTimes
1330
+ }),
1331
+ onClick: function onClick() {
1332
+ return onClickItem(selectedMedia);
1333
+ },
1334
+ title: intl.formatMessage({
1335
+ "id": "UG3SXh",
1336
+ "defaultMessage": [{
1337
+ "type": 0,
1338
+ "value": "Remove"
1339
+ }]
1340
+ })
1341
+ })) : null, !withoutSource && media === null ? /*#__PURE__*/React.createElement("div", {
1342
+ className: "py-2 d-flex w-100 flex-nowrap"
1343
+ }, /*#__PURE__*/React.createElement(DropdownSection, {
1344
+ items: sources,
1345
+ value: filters.source || null,
1346
+ onChange: onSourceChange
1347
+ })) : null, /*#__PURE__*/React.createElement("div", {
1348
+ className: "w-100 d-flex flex-nowrap justify-content-between"
1349
+ }, media !== null ? /*#__PURE__*/React.createElement("form", {
1350
+ className: classNames(['form-inline', 'mr-2'])
1351
+ }, /*#__PURE__*/React.createElement(Button, {
1352
+ theme: "secondary",
1353
+ outline: true,
1354
+ size: "sm",
1355
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1356
+ icon: faChevronLeft
1357
+ }),
1358
+ onClick: onClickBack
1359
+ })) : null, /*#__PURE__*/React.createElement("strong", {
1360
+ className: "navbar-text mr-auto w-100"
1361
+ }, media !== null ? media.name : null)), media === null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1362
+ className: "d-flex w-100 flex-nowrap justify-content-between"
1363
+ }, /*#__PURE__*/React.createElement(Search, {
1364
+ value: searchValue,
1365
+ onChange: onSearchChange,
1366
+ onFocus: onSearchFocus,
1367
+ onClickIcon: onToggleMenu,
1368
+ className: classNames(['form-inline'])
1369
+ })), open ? /*#__PURE__*/React.createElement("div", {
1370
+ className: "d-flex w-100 my-1 flex-nowrap justify-content-between"
1371
+ }, /*#__PURE__*/React.createElement(SearchFilters, {
1372
+ filters: filters,
1373
+ sections: sections,
1374
+ onChange: onFilterChange,
1375
+ onClose: onCloseFilters
1376
+ })) : null) : null, hasFilter && !open && media === null ? /*#__PURE__*/React.createElement("div", {
1377
+ className: "list-group-item py-2 px-2 d-flex w-100 my-2 flex-nowrap justify-content-between"
1378
+ }, /*#__PURE__*/React.createElement(ActiveFilters, {
1379
+ filters: filters,
1380
+ sections: sections,
1381
+ onChange: onFilterChange,
1382
+ onReset: onFiltersReset
1383
+ })) : null));
1347
1384
  };
1348
1385
 
1349
- MediaMetadata.propTypes = propTypes$1;
1350
- MediaMetadata.defaultProps = defaultProps$1;
1351
-
1352
- var styles = {"container":"micromag-media-gallery-container","mediaMetadata":"micromag-media-gallery-mediaMetadata","metadataOpened":"micromag-media-gallery-metadataOpened","gallery":"micromag-media-gallery-gallery","content":"micromag-media-gallery-content","loading":"micromag-media-gallery-loading"};
1386
+ Navbar.propTypes = propTypes$1;
1387
+ Navbar.defaultProps = defaultProps$1;
1353
1388
 
1354
1389
  var propTypes = {
1355
- type: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
1356
- source: PropTypes.string,
1357
- isPicker: PropTypes.bool,
1358
- isSmall: PropTypes.bool,
1359
- withoutTitle: PropTypes.bool,
1360
- withoutSource: PropTypes.bool,
1361
- withoutType: PropTypes.bool,
1362
- medias: PropTypes$1.medias,
1363
- selectedMedia: PropTypes$1.media,
1364
- className: PropTypes.string,
1365
- navbarClassName: PropTypes.string,
1366
- onClickMedia: PropTypes.func
1390
+ type: PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.array]),
1391
+ source: PropTypes$1.string,
1392
+ isPicker: PropTypes$1.bool,
1393
+ isSmall: PropTypes$1.bool,
1394
+ withoutTitle: PropTypes$1.bool,
1395
+ withoutSource: PropTypes$1.bool,
1396
+ withoutType: PropTypes$1.bool,
1397
+ medias: PropTypes.medias,
1398
+ selectedMedia: PropTypes.media,
1399
+ className: PropTypes$1.string,
1400
+ navbarClassName: PropTypes$1.string,
1401
+ onClickMedia: PropTypes$1.func
1367
1402
  };
1368
1403
  var defaultProps = {
1369
1404
  type: null,
@@ -1381,7 +1416,7 @@ var defaultProps = {
1381
1416
  };
1382
1417
 
1383
1418
  var MediaGallery = function MediaGallery(_ref) {
1384
- var _ref2;
1419
+ var _ref3;
1385
1420
 
1386
1421
  var type = _ref.type,
1387
1422
  source = _ref.source,
@@ -1413,6 +1448,18 @@ var MediaGallery = function MediaGallery(_ref) {
1413
1448
  filtersValue = _useState4[0],
1414
1449
  setFiltersValue = _useState4[1];
1415
1450
 
1451
+ var story = useStory();
1452
+
1453
+ var _ref2 = story || {},
1454
+ _ref2$id = _ref2.id,
1455
+ storyId = _ref2$id === void 0 ? null : _ref2$id;
1456
+
1457
+ var _useMediaTags = useMediaTags(),
1458
+ tags = _useMediaTags.tags;
1459
+
1460
+ var _useMediaAuthors = useMediaAuthors(),
1461
+ authors = _useMediaAuthors.authors;
1462
+
1416
1463
  var onFiltersChange = useCallback(function (value) {
1417
1464
  if (throttle.current !== null) {
1418
1465
  clearTimeout(throttle.current);
@@ -1499,22 +1546,29 @@ var MediaGallery = function MediaGallery(_ref) {
1499
1546
  return setUploadModalOpened(false);
1500
1547
  }, [setUploadModalOpened]);
1501
1548
  return /*#__PURE__*/React.createElement("div", {
1502
- className: classNames([styles.container, (_ref2 = {}, _defineProperty(_ref2, styles.metadataOpened, metadataMedia !== null), _defineProperty(_ref2, className, className), _ref2)])
1549
+ className: classNames([styles$8.container, (_ref3 = {}, _defineProperty(_ref3, styles$8.metadataOpened, metadataMedia !== null), _defineProperty(_ref3, className, className), _ref3)])
1503
1550
  }, /*#__PURE__*/React.createElement(Navbar, {
1504
1551
  filters: filtersValue,
1505
1552
  media: metadataMedia !== null ? metadataMedia : null,
1553
+ selectedMedia: selectedMedia,
1506
1554
  onFiltersChange: onFiltersChange,
1507
1555
  onClickAdd: onClickAdd,
1556
+ onClickItem: onClickItem,
1557
+ onClickItemInfo: onClickItemInfo,
1508
1558
  onClickBack: onClickBack,
1509
1559
  onClickCancel: onClickCancel,
1510
1560
  withoutTitle: withoutTitle // withoutSource={withoutSource}
1511
1561
  ,
1562
+ withoutSource: false,
1512
1563
  withoutType: withoutType,
1564
+ storyId: storyId,
1565
+ authors: authors,
1566
+ tags: tags,
1513
1567
  className: navbarClassName
1514
1568
  }), /*#__PURE__*/React.createElement("div", {
1515
- className: styles.content
1569
+ className: styles$8.content
1516
1570
  }, /*#__PURE__*/React.createElement("div", {
1517
- className: styles.gallery
1571
+ className: styles$8.gallery
1518
1572
  }, medias !== null && !uploading ? /*#__PURE__*/React.createElement(Gallery, {
1519
1573
  items: medias,
1520
1574
  selectedItem: selectedMedia,
@@ -1524,11 +1578,12 @@ var MediaGallery = function MediaGallery(_ref) {
1524
1578
  onClickItem: onClickItem,
1525
1579
  onClickItemInfo: onClickItemInfo
1526
1580
  }) : null, loading || uploading ? /*#__PURE__*/React.createElement(Spinner, {
1527
- className: styles.loading
1581
+ className: styles$8.loading
1528
1582
  }) : null), /*#__PURE__*/React.createElement("div", {
1529
- className: styles.mediaMetadata
1583
+ className: styles$8.mediaMetadata
1530
1584
  }, /*#__PURE__*/React.createElement(MediaMetadata, {
1531
1585
  media: metadataMedia,
1586
+ tags: tags,
1532
1587
  onClickClose: onMetadataClickClose
1533
1588
  }))), /*#__PURE__*/React.createElement(UploadModal, {
1534
1589
  type: type === 'video' ? ['video', 'image/gif'] : type,