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