@panneau/medias 3.0.139 → 3.0.142

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -8,8 +8,10 @@ var PropTypes = require('prop-types');
8
8
  var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
9
9
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
10
10
  var classNames = require('classnames');
11
+ var reactIntl = require('react-intl');
11
12
  var core = require('@panneau/core');
12
13
  var hooks = require('@panneau/core/hooks');
14
+ var Button = require('@panneau/element-button');
13
15
  var Buttons = require('@panneau/element-buttons');
14
16
  var Grid = require('@panneau/element-grid');
15
17
  var Icon = require('@panneau/element-icon');
@@ -17,10 +19,13 @@ var MediaCard = require('@panneau/element-media-card');
17
19
  var Pagination = require('@panneau/element-pagination');
18
20
  var Table = require('@panneau/element-table');
19
21
  var Filters = require('@panneau/filter-filters');
20
- var reactIntl = require('react-intl');
21
- var data = require('@panneau/data');
22
- var Button = require('@panneau/element-button');
22
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
23
23
  var contexts = require('@panneau/core/contexts');
24
+ var Form = require('@panneau/element-form');
25
+ var MediaPlayer = require('@panneau/element-media-player');
26
+ var MediaPreview = require('@panneau/element-media-preview');
27
+ var lodash = require('lodash');
28
+ var data = require('@panneau/data');
24
29
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
25
30
 
26
31
  /* eslint-disable react/jsx-props-no-spreading */
@@ -35,11 +40,11 @@ var apiPropTypes = PropTypes.shape({
35
40
  update: PropTypes.func.isRequired,
36
41
  "delete": PropTypes.func.isRequired
37
42
  });
38
- var propTypes$5 = {
43
+ var propTypes$8 = {
39
44
  api: apiPropTypes,
40
45
  children: PropTypes.node.isRequired
41
46
  };
42
- var defaultProps$5 = {
47
+ var defaultProps$8 = {
43
48
  api: null
44
49
  };
45
50
  function MediasApiProvider(_ref) {
@@ -53,10 +58,10 @@ function MediasApiProvider(_ref) {
53
58
  value: api
54
59
  }, children);
55
60
  }
56
- MediasApiProvider.propTypes = propTypes$5;
57
- MediasApiProvider.defaultProps = defaultProps$5;
61
+ MediasApiProvider.propTypes = propTypes$8;
62
+ MediasApiProvider.defaultProps = defaultProps$8;
58
63
 
59
- var _excluded$6 = ["items", "pageItems"];
64
+ var _excluded$7 = ["items", "pageItems"];
60
65
  var useMedias = function useMedias() {
61
66
  var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
62
67
  var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
@@ -74,7 +79,7 @@ var useMedias = function useMedias() {
74
79
  }, opts)),
75
80
  items = _useItems.items,
76
81
  pageItems = _useItems.pageItems,
77
- request = _objectWithoutProperties(_useItems, _excluded$6);
82
+ request = _objectWithoutProperties(_useItems, _excluded$7);
78
83
  return _objectSpread({
79
84
  medias: page !== null ? pageItems : items,
80
85
  allMedias: items
@@ -110,7 +115,7 @@ var useMediasRecent = function useMediasRecent(opts) {
110
115
  };
111
116
  var useMediasRecent$1 = useMediasRecent;
112
117
 
113
- var _excluded$5 = ["data"];
118
+ var _excluded$6 = ["data"];
114
119
  var useMedia = function useMedia(id, opts) {
115
120
  var api = useMediasApi();
116
121
  var loader = React.useCallback(function () {
@@ -118,7 +123,7 @@ var useMedia = function useMedia(id, opts) {
118
123
  }, [api, id]);
119
124
  var _useData = data.useData(loader, opts),
120
125
  data$1 = _useData.data,
121
- request = _objectWithoutProperties(_useData, _excluded$5);
126
+ request = _objectWithoutProperties(_useData, _excluded$6);
122
127
  return _objectSpread({
123
128
  story: data$1
124
129
  }, request);
@@ -165,6 +170,406 @@ var useMediaUpdate = function useMediaUpdate() {
165
170
  };
166
171
  var useMediaUpdate$1 = useMediaUpdate;
167
172
 
173
+ var useMediaDestroy = function useMediaDestroy() {
174
+ var _useState = React.useState(false),
175
+ _useState2 = _slicedToArray(_useState, 2),
176
+ loading = _useState2[0],
177
+ setLoading = _useState2[1];
178
+ var api = useMediasApi();
179
+ var destroy = React.useCallback(function (id, data) {
180
+ setLoading(true);
181
+ return api["delete"](id, data).then(function (response) {
182
+ setLoading(false);
183
+ return response;
184
+ });
185
+ }, [api, setLoading]);
186
+ return {
187
+ destroy: destroy,
188
+ loading: loading
189
+ };
190
+ };
191
+
192
+ var styles = {"mediaFrame":"panneau-medias-mediaFrame","playButton":"panneau-medias-playButton"};
193
+
194
+ var propTypes$7 = {
195
+ value: PropTypes.shape({
196
+ id: PropTypes.string,
197
+ type: PropTypes.string
198
+ }),
199
+ className: PropTypes.string
200
+ };
201
+ var defaultProps$7 = {
202
+ value: null,
203
+ className: null
204
+ };
205
+ function MediaFrame(_ref) {
206
+ var value = _ref.value,
207
+ className = _ref.className;
208
+ var _useState = React.useState(false),
209
+ _useState2 = _slicedToArray(_useState, 2),
210
+ showPlayer = _useState2[0],
211
+ setShowPlayer = _useState2[1];
212
+ var _ref2 = value || {},
213
+ _ref2$type = _ref2.type,
214
+ type = _ref2$type === void 0 ? null : _ref2$type;
215
+ var onClick = React.useCallback(function () {
216
+ setShowPlayer(!showPlayer);
217
+ }, [showPlayer, setShowPlayer]);
218
+ return /*#__PURE__*/React.createElement("div", {
219
+ className: classNames([className, _defineProperty({}, className, className != null)])
220
+ }, showPlayer ? /*#__PURE__*/React.createElement(MediaPlayer, {
221
+ value: value
222
+ }) : /*#__PURE__*/React.createElement(MediaPreview, {
223
+ value: value,
224
+ width: "100%"
225
+ }), /*#__PURE__*/React.createElement("div", {
226
+ className: styles.playButton
227
+ }, !showPlayer && (type === 'video' || type === 'embed') ? /*#__PURE__*/React.createElement(Button, {
228
+ className: "rounded-circle",
229
+ theme: "secondary",
230
+ onClick: onClick,
231
+ icon: "play-fill"
232
+ }) : null));
233
+ }
234
+ MediaFrame.propTypes = propTypes$7;
235
+ MediaFrame.defaultProps = defaultProps$7;
236
+
237
+ var defaultMetadata = [{
238
+ title: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
239
+ id: "3RT69u",
240
+ defaultMessage: [{
241
+ "type": 0,
242
+ "value": "Informations"
243
+ }]
244
+ }),
245
+ items: [{
246
+ id: 'user',
247
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
248
+ id: "yByaBh",
249
+ defaultMessage: [{
250
+ "type": 0,
251
+ "value": "Added by"
252
+ }]
253
+ }),
254
+ component: 'avatar',
255
+ path: 'user'
256
+ }, {
257
+ id: 'created_at',
258
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
259
+ id: "PN+75e",
260
+ defaultMessage: [{
261
+ "type": 0,
262
+ "value": "Created at"
263
+ }]
264
+ }),
265
+ component: 'date',
266
+ path: 'created_at',
267
+ format: 'yyyy-MM-dd hh:ss'
268
+ }]
269
+ }, {
270
+ title: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
271
+ id: "xKUOLG",
272
+ defaultMessage: [{
273
+ "type": 0,
274
+ "value": "Technical details"
275
+ }]
276
+ }),
277
+ items: [{
278
+ id: 'format',
279
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
280
+ id: "JuxiUN",
281
+ defaultMessage: [{
282
+ "type": 0,
283
+ "value": "Format"
284
+ }]
285
+ }),
286
+ component: 'unit',
287
+ format: 'format',
288
+ path: 'format'
289
+ }, {
290
+ id: 'dimensions',
291
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
292
+ id: "rmJBin",
293
+ defaultMessage: [{
294
+ "type": 0,
295
+ "value": "Dimensions"
296
+ }]
297
+ }),
298
+ component: 'unit',
299
+ format: 'dimensions',
300
+ path: 'metadata'
301
+ }, {
302
+ id: 'size',
303
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
304
+ id: "g2CRt5",
305
+ defaultMessage: [{
306
+ "type": 0,
307
+ "value": "Size"
308
+ }]
309
+ }),
310
+ component: 'unit',
311
+ format: 'bytes',
312
+ path: 'metadata.size'
313
+ }, {
314
+ id: 'duration',
315
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
316
+ id: "wU++NJ",
317
+ defaultMessage: [{
318
+ "type": 0,
319
+ "value": "Duration"
320
+ }]
321
+ }),
322
+ component: 'unit',
323
+ format: 'duration',
324
+ path: 'metadata.duration'
325
+ }]
326
+ }];
327
+
328
+ var _excluded$5 = ["label", "path", "component"];
329
+ var propTypes$6 = {
330
+ value: PropTypes.shape({
331
+ metadata: PropTypes.shape({}),
332
+ user: PropTypes.shape({}),
333
+ createdAt: PropTypes.string
334
+ }),
335
+ sections: PropTypes.arrayOf(PropTypes.shape({
336
+ title: PropTypes.node,
337
+ items: PropTypes.arrayOf(PropTypes.shape({})) // displays
338
+ })),
339
+ className: PropTypes.string
340
+ };
341
+ var defaultProps$6 = {
342
+ value: null,
343
+ sections: defaultMetadata,
344
+ className: null
345
+ };
346
+ function MediaMetadata(_ref) {
347
+ var sections = _ref.sections,
348
+ value = _ref.value,
349
+ className = _ref.className;
350
+ var displayComponents = contexts.useDisplaysComponentsManager();
351
+ return /*#__PURE__*/React.createElement("div", {
352
+ className: classNames(['px-2', _defineProperty({}, className, className !== null)])
353
+ }, (sections || []).map(function (_ref3, i) {
354
+ var title = _ref3.title,
355
+ items = _ref3.items;
356
+ return /*#__PURE__*/React.createElement("div", {
357
+ className: "mb-5",
358
+ key: "section-".concat(i + 1)
359
+ }, /*#__PURE__*/React.createElement("h6", {
360
+ className: "px-1"
361
+ }, title), /*#__PURE__*/React.createElement("ul", {
362
+ className: "list-group list-group-flush"
363
+ }, (items || []).map(function (_ref4, index) {
364
+ var label = _ref4.label,
365
+ path = _ref4.path,
366
+ _ref4$component = _ref4.component,
367
+ component = _ref4$component === void 0 ? null : _ref4$component,
368
+ props = _objectWithoutProperties(_ref4, _excluded$5);
369
+ var Component = displayComponents.getComponent(component || 'text');
370
+ var itemValue = lodash.get(value, path, null);
371
+ return Component !== null && itemValue !== null ? /*#__PURE__*/React.createElement("li", {
372
+ className: classNames(['row', 'd-flex', 'align-items-center', 'justify-content-between', 'p-1', 'border-secondary-1', 'border-1', 'border-bottom', 'text-small', {
373
+ 'border-top': index === 0
374
+ }]),
375
+ key: "item-".concat(index + 1)
376
+ }, /*#__PURE__*/React.createElement("div", {
377
+ className: "col-auto"
378
+ }, label), /*#__PURE__*/React.createElement("div", {
379
+ className: "col-auto align-right"
380
+ }, /*#__PURE__*/React.createElement(Component, Object.assign({}, props, {
381
+ value: itemValue
382
+ })))) : null;
383
+ })));
384
+ }));
385
+ }
386
+ MediaMetadata.propTypes = propTypes$6;
387
+ MediaMetadata.defaultProps = defaultProps$6;
388
+
389
+ var defaultFields = [
390
+ // { name: 'type', label: 'Type', type: 'string', component: 'text', disabled: true },
391
+ {
392
+ name: 'name',
393
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
394
+ id: "WX83V9",
395
+ defaultMessage: [{
396
+ "type": 0,
397
+ "value": "File name"
398
+ }]
399
+ }),
400
+ type: 'text',
401
+ component: 'text'
402
+ }, {
403
+ name: 'description',
404
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
405
+ id: "ygNvmz",
406
+ defaultMessage: [{
407
+ "type": 0,
408
+ "value": "Description"
409
+ }]
410
+ }),
411
+ type: 'text',
412
+ component: 'text'
413
+ }
414
+ // {
415
+ // name: 'url',
416
+ // label: <FormattedMessage defaultMessage="URL" description="Field name" />,
417
+ // type: 'text',
418
+ // component: 'url',
419
+ // },
420
+ // {
421
+ // name: 'thumbnail_url',
422
+ // label: <FormattedMessage defaultMessage="Thumbnail URL" description="Field name" />,
423
+ // type: 'text',
424
+ // component: 'url',
425
+ // },
426
+ ];
427
+
428
+ var propTypes$5 = {
429
+ value: PropTypes.shape({
430
+ id: PropTypes.string
431
+ }),
432
+ fields: PropTypes.arrayOf(PropTypes.shape({
433
+ name: PropTypes.string
434
+ })),
435
+ displays: PropTypes.arrayOf(PropTypes.shape({
436
+ name: PropTypes.string
437
+ })),
438
+ onChange: PropTypes.func.isRequired,
439
+ onConfirm: PropTypes.func.isRequired,
440
+ onDelete: PropTypes.func,
441
+ onClose: PropTypes.func,
442
+ className: PropTypes.string
443
+ };
444
+ var defaultProps$5 = {
445
+ value: null,
446
+ fields: defaultFields,
447
+ displays: null,
448
+ onClose: null,
449
+ onDelete: null,
450
+ className: null
451
+ };
452
+ function MediaForm(_ref) {
453
+ var initialValue = _ref.value,
454
+ initialFields = _ref.fields,
455
+ displays = _ref.displays,
456
+ onChange = _ref.onChange,
457
+ onConfirm = _ref.onConfirm;
458
+ _ref.onDelete;
459
+ var onClose = _ref.onClose,
460
+ className = _ref.className;
461
+ var FieldsComponent = contexts.useFieldComponent('fields');
462
+ var _useMediaUpdate = useMediaUpdate$1(),
463
+ update = _useMediaUpdate.update,
464
+ updating = _useMediaUpdate.loading;
465
+ var _useMediaDestroy = useMediaDestroy(),
466
+ destroy = _useMediaDestroy.destroy,
467
+ destroying = _useMediaDestroy.loading;
468
+ var _useState = React.useState(false),
469
+ _useState2 = _slicedToArray(_useState, 2);
470
+ _useState2[0];
471
+ var setChanged = _useState2[1];
472
+ var disabled = updating || destroying || initialValue === null;
473
+ var _ref2 = initialValue || {},
474
+ _ref2$name = _ref2.name,
475
+ name = _ref2$name === void 0 ? null : _ref2$name,
476
+ _ref2$type = _ref2.type,
477
+ type = _ref2$type === void 0 ? null : _ref2$type;
478
+ var onChangeMedia = React.useCallback(function (newValue) {
479
+ if (onChange !== null) {
480
+ onChange(newValue);
481
+ }
482
+ setChanged(true);
483
+ }, [onChange, setChanged]);
484
+ var onMediaSaved = React.useCallback(function (newValue) {
485
+ if (onConfirm !== null) {
486
+ onConfirm(newValue);
487
+ }
488
+ setChanged(false);
489
+ }, [onChange, setChanged]);
490
+ var onDeleteMedia = React.useCallback(function () {
491
+ // Destroy
492
+ if (onClose !== null) {
493
+ onClose();
494
+ }
495
+ setChanged(false);
496
+ }, [destroy, setChanged]);
497
+ var postForm = React.useCallback(function (action, data) {
498
+ return initialValue !== null ? update(initialValue.id, data) : new Promise();
499
+ }, [initialValue, update]);
500
+ var _useForm = hooks.useForm({
501
+ fields: initialFields,
502
+ postForm: postForm,
503
+ onComplete: onMediaSaved,
504
+ value: initialValue,
505
+ setValue: onChange
506
+ }),
507
+ value = _useForm.value,
508
+ setValue = _useForm.setValue,
509
+ fields = _useForm.fields;
510
+ _useForm.onSubmit;
511
+ _useForm.status;
512
+ _useForm.generalError;
513
+ _useForm.errors;
514
+ return /*#__PURE__*/React.createElement("div", {
515
+ className: classNames([className, _defineProperty({}, className, className != null)])
516
+ }, /*#__PURE__*/React.createElement("div", {
517
+ className: "d-flex w-100 justify-content-between mb-2 pb-2 border-bottom"
518
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h4", {
519
+ className: "d-inline"
520
+ }, name), /*#__PURE__*/React.createElement("span", {
521
+ className: "mx-2"
522
+ }, type)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
523
+ className: "me-2",
524
+ theme: "danger",
525
+ onClick: onDeleteMedia
526
+ }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
527
+ id: "Bhu3B2",
528
+ defaultMessage: [{
529
+ "type": 0,
530
+ "value": "Delete"
531
+ }]
532
+ })), onConfirm !== null ? /*#__PURE__*/React.createElement(Button, {
533
+ theme: "primary",
534
+ onClick: onConfirm
535
+ }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
536
+ id: "R1HYj0",
537
+ defaultMessage: [{
538
+ "type": 0,
539
+ "value": "Save"
540
+ }]
541
+ })) : null)), /*#__PURE__*/React.createElement("div", {
542
+ className: "row"
543
+ }, /*#__PURE__*/React.createElement("div", {
544
+ className: "col-md-6"
545
+ }, /*#__PURE__*/React.createElement("div", {
546
+ className: "position-relative w-100",
547
+ style: {
548
+ height: 400
549
+ }
550
+ }, /*#__PURE__*/React.createElement("div", {
551
+ className: styles.mediaFrame
552
+ }, /*#__PURE__*/React.createElement(MediaFrame, {
553
+ value: value
554
+ })))), /*#__PURE__*/React.createElement("div", {
555
+ className: "col-md-6"
556
+ }, /*#__PURE__*/React.createElement(Form, {
557
+ onChange: onChangeMedia,
558
+ withoutActions: true
559
+ }, /*#__PURE__*/React.createElement(FieldsComponent, {
560
+ fields: fields,
561
+ value: value,
562
+ onChange: setValue,
563
+ disabled: disabled
564
+ })), /*#__PURE__*/React.createElement(MediaMetadata, {
565
+ className: "mt-5",
566
+ value: value,
567
+ displays: displays
568
+ }))));
569
+ }
570
+ MediaForm.propTypes = propTypes$5;
571
+ MediaForm.defaultProps = defaultProps$5;
572
+
168
573
  var defaultColumns = [{
169
574
  id: 'image',
170
575
  label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
@@ -362,8 +767,6 @@ var defaultFilters = [{
362
767
  name: 'search'
363
768
  }];
364
769
 
365
- var styles = {};
366
-
367
770
  var _excluded$4 = ["page", "count"];
368
771
  var propTypes$4 = {
369
772
  items: core.PropTypes.medias,
@@ -371,21 +774,25 @@ var propTypes$4 = {
371
774
  columns: core.PropTypes.tableColumns,
372
775
  query: PropTypes.shape({}),
373
776
  baseUrl: PropTypes.string,
374
- // fields: PanneauPropTypes.fields,
777
+ fields: core.PropTypes.fields,
375
778
  layout: PropTypes.string,
376
779
  layouts: PropTypes.arrayOf(PropTypes.shape({})),
377
780
  theme: PropTypes.string,
378
781
  tableProps: PropTypes.bool,
782
+ onSelectItem: PropTypes.func,
783
+ onItemsChange: PropTypes.func,
784
+ selectedCount: PropTypes.number,
785
+ onClearSelected: PropTypes.func,
379
786
  className: PropTypes.string
380
787
  };
381
788
  var defaultProps$4 = {
382
789
  items: null,
383
790
  filters: defaultFilters,
384
791
  columns: defaultColumns,
385
- // fields: null,
792
+ fields: defaultFields,
386
793
  query: null,
387
794
  baseUrl: null,
388
- layout: null,
795
+ layout: 'table',
389
796
  layouts: [{
390
797
  id: 'table',
391
798
  label: /*#__PURE__*/React.createElement(Icon, {
@@ -399,6 +806,10 @@ var defaultProps$4 = {
399
806
  }],
400
807
  theme: null,
401
808
  tableProps: null,
809
+ onSelectItem: null,
810
+ onItemsChange: null,
811
+ selectedCount: null,
812
+ onClearSelected: null,
402
813
  className: null
403
814
  };
404
815
  function MediasBrowser(_ref) {
@@ -411,6 +822,10 @@ function MediasBrowser(_ref) {
411
822
  layouts = _ref.layouts,
412
823
  theme = _ref.theme,
413
824
  tableProps = _ref.tableProps,
825
+ onSelectItem = _ref.onSelectItem,
826
+ onItemsChange = _ref.onItemsChange,
827
+ selectedCount = _ref.selectedCount,
828
+ onClearSelected = _ref.onClearSelected,
414
829
  className = _ref.className;
415
830
  var baseQuery = React.useMemo(function () {
416
831
  return initialQuery;
@@ -446,6 +861,11 @@ function MediasBrowser(_ref) {
446
861
  loading = _useMedias.loading,
447
862
  lastPage = _useMedias.lastPage,
448
863
  total = _useMedias.total;
864
+ React.useEffect(function () {
865
+ if (onItemsChange !== null) {
866
+ onItemsChange(items);
867
+ }
868
+ }, [items, onItemsChange]);
449
869
  var _useState = React.useState(initialLayout || 'grid'),
450
870
  _useState2 = _slicedToArray(_useState, 2),
451
871
  layout = _useState2[0],
@@ -456,9 +876,49 @@ function MediasBrowser(_ref) {
456
876
  var onClickLayout = React.useCallback(function (lay) {
457
877
  setLayout(lay);
458
878
  }, [setLayout]);
879
+ var _useState3 = React.useState(null),
880
+ _useState4 = _slicedToArray(_useState3, 2),
881
+ media = _useState4[0],
882
+ setMedia = _useState4[1];
883
+ var onOpenMedia = React.useCallback(function (currentMedia) {
884
+ setMedia(currentMedia);
885
+ }, [setMedia]);
886
+ var onCloseMedia = React.useCallback(function () {
887
+ setMedia(null);
888
+ }, [setMedia]);
889
+ var pagination = /*#__PURE__*/React.createElement(Pagination, {
890
+ page: page,
891
+ lastPage: lastPage,
892
+ total: total,
893
+ url: baseUrl,
894
+ query: query,
895
+ onClickPage: onPageChange,
896
+ theme: theme,
897
+ loading: loading,
898
+ selectedCount: selectedCount,
899
+ onClearSelected: onClearSelected,
900
+ withPreviousNext: true,
901
+ alwaysShowButtons: true
902
+ });
459
903
  return /*#__PURE__*/React.createElement("div", {
460
904
  className: classNames([styles.container, className])
461
- }, /*#__PURE__*/React.createElement(Filters, {
905
+ }, media !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
906
+ className: "mt-2 mb-4"
907
+ }, /*#__PURE__*/React.createElement(Button, {
908
+ theme: "primary",
909
+ outline: true,
910
+ onClick: onCloseMedia,
911
+ icon: "arrow-left"
912
+ }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
913
+ id: "ac4218",
914
+ defaultMessage: [{
915
+ "type": 0,
916
+ "value": "Back to files"
917
+ }]
918
+ }))), /*#__PURE__*/React.createElement(MediaForm, {
919
+ value: media,
920
+ onClose: onCloseMedia
921
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Filters, {
462
922
  value: query,
463
923
  filters: filters,
464
924
  onChange: onQueryChange,
@@ -482,44 +942,30 @@ function MediasBrowser(_ref) {
482
942
  className: 'px-3'
483
943
  });
484
944
  })
485
- }) : null, /*#__PURE__*/React.createElement(Pagination, {
486
- page: page,
487
- lastPage: lastPage,
488
- total: total,
489
- url: baseUrl,
490
- query: query,
491
- onClickPage: onPageChange,
492
- theme: theme,
493
- loading: loading,
494
- withPreviousNext: true,
495
- alwaysShowButtons: true
496
- })), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({}, tableProps, {
945
+ }) : null, pagination), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({}, tableProps, {
946
+ size: "xsmall",
497
947
  items: items || [],
498
948
  component: MediaCard,
499
949
  componentProps: {
500
950
  className: 'd-flex w-100',
501
- cardClassName: 'flex-grow-1'
951
+ cardClassName: 'flex-grow-1',
952
+ vertical: true
953
+ },
954
+ onSelectItem: onSelectItem !== null ? onSelectItem : function (it) {
955
+ return onOpenMedia(it);
502
956
  }
503
- })) : /*#__PURE__*/React.createElement(Table, Object.assign({}, tableProps, {
957
+ })) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, Object.assign({}, tableProps, {
504
958
  columns: columns,
505
959
  items: items,
506
960
  displayPlaceholder: /*#__PURE__*/React.createElement("span", {
507
961
  className: "text-secondary text-opacity-75"
508
- }, "\u2014")
509
- })), /*#__PURE__*/React.createElement("div", {
962
+ }, "\u2014"),
963
+ onSelectItem: onSelectItem !== null ? onSelectItem : function (it) {
964
+ return onOpenMedia(it);
965
+ }
966
+ })) : null, /*#__PURE__*/React.createElement("div", {
510
967
  className: classNames(['d-flex', 'mt-3', 'mb-1', 'justify-content-end'])
511
- }, /*#__PURE__*/React.createElement(Pagination, {
512
- page: page,
513
- lastPage: lastPage,
514
- total: total,
515
- url: baseUrl,
516
- query: query,
517
- onClickPage: onPageChange,
518
- theme: theme,
519
- loading: loading,
520
- withPreviousNext: true,
521
- alwaysShowButtons: true
522
- })));
968
+ }, pagination)));
523
969
  }
524
970
  MediasBrowser.propTypes = propTypes$4;
525
971
  MediasBrowser.defaultProps = defaultProps$4;
@@ -541,46 +987,75 @@ function MediasBrowserContainer(_ref) {
541
987
  MediasBrowserContainer.propTypes = propTypes$3;
542
988
  MediasBrowserContainer.defaultProps = defaultProps$3;
543
989
 
544
- var _excluded$2 = ["value", "onChange", "onConfirm", "onClose", "multiple", "className"];
990
+ var _excluded$2 = ["value", "selectedItems", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "className"];
545
991
  var propTypes$2 = {
546
992
  // eslint-disable-next-line react/forbid-prop-types
547
- value: PropTypes.any,
993
+ value: PropTypes.arrayOf(PropTypes.shape({})),
994
+ selectedItems: PropTypes.arrayOf(PropTypes.shape({})),
548
995
  onChange: PropTypes.func.isRequired,
549
996
  onConfirm: PropTypes.func.isRequired,
550
997
  onClose: PropTypes.func,
551
998
  multiple: PropTypes.bool,
999
+ withoutButtons: PropTypes.bool,
552
1000
  className: PropTypes.string
553
1001
  };
554
1002
  var defaultProps$2 = {
555
1003
  value: null,
1004
+ selectedItems: null,
556
1005
  onClose: null,
557
1006
  multiple: false,
1007
+ withoutButtons: false,
558
1008
  className: null
559
1009
  };
560
1010
  function MediasPicker(_ref) {
561
1011
  var value = _ref.value,
1012
+ initialSelectedItems = _ref.selectedItems,
562
1013
  onChange = _ref.onChange,
563
1014
  onConfirm = _ref.onConfirm,
564
1015
  onClose = _ref.onClose,
565
1016
  multiple = _ref.multiple,
1017
+ withoutButtons = _ref.withoutButtons,
566
1018
  className = _ref.className,
567
1019
  props = _objectWithoutProperties(_ref, _excluded$2);
568
- var onSelectionChange = React.useCallback(function (items) {
569
- if (onChange !== null) {
570
- onChange(items);
571
- }
572
- }, [onChange]);
1020
+ var _useState = React.useState(value),
1021
+ _useState2 = _slicedToArray(_useState, 2),
1022
+ items = _useState2[0],
1023
+ setItems = _useState2[1];
1024
+ var onItemsChange = React.useCallback(function (pageItems) {
1025
+ setItems(pageItems);
1026
+ }, [setItems]);
573
1027
  var disabled = value === null || value.length < 1;
1028
+ var _useItemSelection = hooks.useItemSelection({
1029
+ items: items,
1030
+ selectedItems: initialSelectedItems,
1031
+ onSelectionChange: onChange,
1032
+ multipleSelection: multiple
1033
+ }),
1034
+ onSelectItem = _useItemSelection.onSelectItem,
1035
+ onSelectPage = _useItemSelection.onSelectPage,
1036
+ onClearSelected = _useItemSelection.onClearSelected,
1037
+ pageSelected = _useItemSelection.pageSelected,
1038
+ selectedCount = _useItemSelection.selectedCount,
1039
+ selectedItems = _useItemSelection.selectedItems;
574
1040
  return /*#__PURE__*/React.createElement("div", {
575
1041
  className: className
576
1042
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
577
1043
  tableProps: {
578
1044
  selectable: true,
579
1045
  multipleSelection: multiple,
580
- onSelectionChange: onSelectionChange
581
- }
582
- }, props)), multiple ? /*#__PURE__*/React.createElement("div", {
1046
+ onSelectItem: onSelectItem,
1047
+ onSelectPage: onSelectPage,
1048
+ selectedItems: selectedItems,
1049
+ pageSelected: pageSelected
1050
+ },
1051
+ onSelectItem: onSelectItem,
1052
+ onItemsChange: onItemsChange,
1053
+ selectedCount: selectedCount,
1054
+ onClearSelected: onClearSelected
1055
+ }, props)), multiple && !withoutButtons ? /*#__PURE__*/React.createElement("div", {
583
1056
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
1057
+ }, /*#__PURE__*/React.createElement("div", {
1058
+ className: "btn-group"
584
1059
  }, onClose !== null ? /*#__PURE__*/React.createElement(Button, {
585
1060
  type: "button",
586
1061
  theme: "secondary",
@@ -600,12 +1075,12 @@ function MediasPicker(_ref) {
600
1075
  outline: disabled,
601
1076
  className: "d-block"
602
1077
  }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
603
- id: "UaVu03",
1078
+ id: "rvOVCV",
604
1079
  defaultMessage: [{
605
1080
  "type": 0,
606
- "value": "Confirm"
1081
+ "value": "Confirm selection"
607
1082
  }]
608
- }))) : null);
1083
+ })))) : null);
609
1084
  }
610
1085
  MediasPicker.propTypes = propTypes$2;
611
1086
  MediasPicker.defaultProps = defaultProps$2;
@@ -689,6 +1164,7 @@ function MediasResourceBrowser(_ref) {
689
1164
  MediasResourceBrowser.propTypes = propTypes;
690
1165
  MediasResourceBrowser.defaultProps = defaultProps;
691
1166
 
1167
+ exports.MediaForm = MediaForm;
692
1168
  exports.MediasApiProvider = MediasApiProvider;
693
1169
  exports.MediasBrowser = MediasBrowser;
694
1170
  exports.MediasPicker = MediasPicker;