@panneau/medias 3.0.153 → 3.0.156

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/es/index.js +206 -107
  2. package/lib/index.js +206 -107
  3. package/package.json +17 -16
package/es/index.js CHANGED
@@ -8,11 +8,12 @@ import { useDisplaysComponentsManager, useFieldComponent, usePanneauResource } f
8
8
  import { useForm, useQuery, useItemSelection } from '@panneau/core/hooks';
9
9
  import Button from '@panneau/element-button';
10
10
  import Form from '@panneau/element-form';
11
+ import FormStatus from '@panneau/element-form-status';
11
12
  import MediaPlayer from '@panneau/element-media-player';
12
13
  import MediaPreview from '@panneau/element-media-preview';
14
+ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
13
15
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
14
16
  import { get } from 'lodash';
15
- import _objectSpread from '@babel/runtime/helpers/objectSpread2';
16
17
  import { PropTypes as PropTypes$1 } from '@panneau/core';
17
18
  import Buttons from '@panneau/element-buttons';
18
19
  import Grid from '@panneau/element-grid';
@@ -213,25 +214,28 @@ function MediaFrame(_ref) {
213
214
  setShowPlayer(!showPlayer);
214
215
  }, [showPlayer, setShowPlayer]);
215
216
  return /*#__PURE__*/React.createElement("div", {
216
- className: classNames([className, _defineProperty({}, className, className != null)])
217
+ className: classNames([className, 'position-relative', _defineProperty({}, className, className != null)])
217
218
  }, showPlayer ? /*#__PURE__*/React.createElement(MediaPlayer, {
218
- value: value
219
+ value: value,
220
+ width: "100%"
219
221
  }) : /*#__PURE__*/React.createElement(MediaPreview, {
220
222
  value: value,
221
223
  width: "100%"
222
- }), /*#__PURE__*/React.createElement("div", {
224
+ }, /*#__PURE__*/React.createElement("div", {
223
225
  className: styles.playButton
224
226
  }, !showPlayer && (type === 'video' || type === 'embed' || type === 'audio') ? /*#__PURE__*/React.createElement(Button, {
225
227
  className: "rounded-circle",
226
228
  theme: "secondary",
227
229
  onClick: onClick,
228
- icon: "play-fill"
229
- }) : null));
230
+ icon: "play-fill",
231
+ size: "lg"
232
+ }) : null)));
230
233
  }
231
234
  MediaFrame.propTypes = propTypes$8;
232
235
  MediaFrame.defaultProps = defaultProps$8;
233
236
 
234
- var _excluded$6 = ["label", "path", "component"];
237
+ var _excluded$6 = ["path"],
238
+ _excluded2$1 = ["label", "value", "component"];
235
239
  var propTypes$7 = {
236
240
  value: PropTypes.shape({
237
241
  metadata: PropTypes.shape({}),
@@ -256,61 +260,78 @@ var defaultProps$7 = {
256
260
  function MediaMetadata(_ref) {
257
261
  var sections = _ref.sections,
258
262
  displays = _ref.displays,
259
- value = _ref.value,
263
+ filtersValue = _ref.value,
260
264
  className = _ref.className;
261
265
  var displayComponents = useDisplaysComponentsManager();
262
266
  var finalSections = useMemo(function () {
263
- var displaysWithoutSection = (displays || []).filter(function (_ref2) {
264
- var _ref2$section = _ref2.section,
265
- section = _ref2$section === void 0 ? null : _ref2$section;
267
+ var displaysWithValue = (displays || []).map(function (_ref2) {
268
+ var _ref2$path = _ref2.path,
269
+ path = _ref2$path === void 0 ? null : _ref2$path,
270
+ props = _objectWithoutProperties(_ref2, _excluded$6);
271
+ return _objectSpread({
272
+ value: get(filtersValue, path, null)
273
+ }, props);
274
+ }).filter(function (_ref3) {
275
+ var _ref3$value = _ref3.value,
276
+ value = _ref3$value === void 0 ? null : _ref3$value;
277
+ return value !== null;
278
+ });
279
+ var displaysWithoutSection = (displaysWithValue || []).filter(function (_ref4) {
280
+ var _ref4$section = _ref4.section,
281
+ section = _ref4$section === void 0 ? null : _ref4$section;
266
282
  return section === null;
267
283
  });
268
- return (sections || []).map(function (_ref3) {
269
- var _ref3$id = _ref3.id,
270
- id = _ref3$id === void 0 ? null : _ref3$id,
271
- _ref3$title = _ref3.title,
272
- title = _ref3$title === void 0 ? null : _ref3$title;
284
+ return (sections || []).map(function (_ref5) {
285
+ var _ref5$id = _ref5.id,
286
+ id = _ref5$id === void 0 ? null : _ref5$id,
287
+ _ref5$title = _ref5.title,
288
+ title = _ref5$title === void 0 ? null : _ref5$title;
273
289
  return {
274
290
  id: id,
275
291
  title: title,
276
- items: (displays || []).filter(function (_ref4) {
277
- var _ref4$section = _ref4.section,
278
- section = _ref4$section === void 0 ? null : _ref4$section;
292
+ items: (displaysWithValue || []).filter(function (_ref6) {
293
+ var _ref6$section = _ref6.section,
294
+ section = _ref6$section === void 0 ? null : _ref6$section;
279
295
  return section === id;
280
296
  })
281
297
  };
282
298
  }).concat({
299
+ id: 'others',
283
300
  title: null,
284
301
  items: displaysWithoutSection
302
+ }).filter(function (_ref7) {
303
+ var _ref7$items = _ref7.items,
304
+ items = _ref7$items === void 0 ? null : _ref7$items;
305
+ return items !== null && items.length > 0;
285
306
  });
286
- }, [sections, displays]);
307
+ }, [sections, displays, filtersValue]);
287
308
  return /*#__PURE__*/React.createElement("div", {
288
309
  className: classNames(['px-2', _defineProperty({}, className, className !== null)])
289
- }, (finalSections || []).map(function (_ref6, i) {
290
- var _ref6$title = _ref6.title,
291
- title = _ref6$title === void 0 ? null : _ref6$title,
292
- _ref6$items = _ref6.items,
293
- items = _ref6$items === void 0 ? [] : _ref6$items;
310
+ }, (finalSections || []).map(function (_ref9, idx) {
311
+ var _ref9$title = _ref9.title,
312
+ title = _ref9$title === void 0 ? null : _ref9$title,
313
+ _ref9$items = _ref9.items,
314
+ items = _ref9$items === void 0 ? [] : _ref9$items;
294
315
  return /*#__PURE__*/React.createElement("div", {
295
- className: "mb-5",
296
- key: "section-".concat(i + 1)
316
+ className: idx < finalSections.length - 1 ? 'mb-5' : null,
317
+ key: "section-".concat(idx + 1)
297
318
  }, title !== null ? /*#__PURE__*/React.createElement("h6", {
298
319
  className: "px-1"
299
320
  }, title) : null, /*#__PURE__*/React.createElement("ul", {
300
321
  className: "list-group list-group-flush"
301
- }, (items || []).map(function (_ref7, index) {
302
- var label = _ref7.label,
303
- path = _ref7.path,
304
- _ref7$component = _ref7.component,
305
- component = _ref7$component === void 0 ? null : _ref7$component,
306
- props = _objectWithoutProperties(_ref7, _excluded$6);
322
+ }, (items || []).map(function (_ref10, index) {
323
+ var label = _ref10.label,
324
+ value = _ref10.value,
325
+ _ref10$component = _ref10.component,
326
+ component = _ref10$component === void 0 ? null : _ref10$component,
327
+ props = _objectWithoutProperties(_ref10, _excluded2$1);
307
328
  var Component = displayComponents.getComponent(component || 'text');
308
- var itemValue = get(value, path, null);
329
+ var itemValue = value || null;
309
330
  return Component !== null && itemValue !== null ? /*#__PURE__*/React.createElement("li", {
331
+ key: "item-".concat(index + 1),
310
332
  className: classNames(['row', 'd-flex', 'align-items-center', 'justify-content-between', 'p-1', 'border-secondary-1', 'border-1', 'border-bottom', 'text-small', {
311
333
  'border-top': index === 0
312
- }]),
313
- key: "item-".concat(index + 1)
334
+ }])
314
335
  }, /*#__PURE__*/React.createElement("div", {
315
336
  className: "col-auto"
316
337
  }, label), /*#__PURE__*/React.createElement("div", {
@@ -477,7 +498,7 @@ var propTypes$6 = {
477
498
  name: PropTypes.string
478
499
  })),
479
500
  onChange: PropTypes.func.isRequired,
480
- onConfirm: PropTypes.func.isRequired,
501
+ onSave: PropTypes.func.isRequired,
481
502
  onDelete: PropTypes.func,
482
503
  onClose: PropTypes.func,
483
504
  className: PropTypes.string
@@ -497,7 +518,7 @@ function MediaForm(_ref) {
497
518
  sections = _ref.sections,
498
519
  displays = _ref.displays,
499
520
  onChange = _ref.onChange,
500
- onConfirm = _ref.onConfirm,
521
+ onSave = _ref.onSave,
501
522
  onDelete = _ref.onDelete,
502
523
  onClose = _ref.onClose,
503
524
  className = _ref.className;
@@ -509,9 +530,9 @@ function MediaForm(_ref) {
509
530
  destroy = _useMediaDestroy.destroy,
510
531
  destroying = _useMediaDestroy.loading;
511
532
  var _useState = useState(false),
512
- _useState2 = _slicedToArray(_useState, 2);
513
- _useState2[0];
514
- var setChanged = _useState2[1];
533
+ _useState2 = _slicedToArray(_useState, 2),
534
+ changed = _useState2[0],
535
+ setChanged = _useState2[1];
515
536
  var disabled = updating || destroying || initialValue === null;
516
537
  var _ref2 = initialValue || {},
517
538
  _ref2$name = _ref2.name,
@@ -525,21 +546,26 @@ function MediaForm(_ref) {
525
546
  setChanged(true);
526
547
  }, [onChange, setChanged]);
527
548
  var onMediaSaved = useCallback(function (newValue) {
528
- if (onConfirm !== null) {
529
- onConfirm(newValue);
549
+ if (onSave !== null) {
550
+ onSave(newValue);
530
551
  }
531
552
  setChanged(false);
532
553
  }, [onChange, setChanged]);
533
554
  var onDeleteMedia = useCallback(function () {
534
555
  // Destroy
535
- if (onClose !== null) {
536
- onClose();
537
- }
538
- if (onDelete !== null) {
539
- onDelete();
540
- }
541
- setChanged(false);
542
- }, [destroy, setChanged]);
556
+ var _ref3 = initialValue || {},
557
+ _ref3$id = _ref3.id,
558
+ id = _ref3$id === void 0 ? null : _ref3$id;
559
+ destroy(id, initialValue).then(function () {
560
+ if (onClose !== null) {
561
+ onClose();
562
+ }
563
+ if (onDelete !== null) {
564
+ onDelete();
565
+ }
566
+ setChanged(false);
567
+ });
568
+ }, [initialValue, destroy, destroying, setChanged]);
543
569
  var postForm = useCallback(function (action, data) {
544
570
  return initialValue !== null ? update(initialValue.id, data) : new Promise();
545
571
  }, [initialValue, update]);
@@ -548,36 +574,41 @@ function MediaForm(_ref) {
548
574
  postForm: postForm,
549
575
  onComplete: onMediaSaved,
550
576
  value: initialValue,
551
- setValue: onChange
577
+ setValue: onChangeMedia,
578
+ disabled: updating
552
579
  }),
553
580
  value = _useForm.value,
554
581
  setValue = _useForm.setValue,
555
- fields = _useForm.fields;
556
- _useForm.onSubmit;
557
- _useForm.status;
558
- _useForm.generalError;
559
- _useForm.errors;
582
+ fields = _useForm.fields,
583
+ onSubmit = _useForm.onSubmit,
584
+ status = _useForm.status,
585
+ generalError = _useForm.generalError;
560
586
  return /*#__PURE__*/React.createElement("div", {
561
587
  className: classNames(['text-body', _defineProperty({}, className, className !== null)])
562
588
  }, /*#__PURE__*/React.createElement("div", {
563
- className: "d-flex w-100 justify-content-between mb-2 pb-2 border-bottom"
564
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h4", {
565
- className: "d-inline"
589
+ className: "d-flex w-100 align-items-start justify-content-between mb-3 pb-2 border-bottom"
590
+ }, /*#__PURE__*/React.createElement("div", {
591
+ className: "d-flex align-items-end mb-0"
592
+ }, /*#__PURE__*/React.createElement("h4", {
593
+ className: "d-inline text-break mb-1"
566
594
  }, name), /*#__PURE__*/React.createElement("span", {
567
595
  className: "mx-2"
568
596
  }, type)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
569
- className: "me-2",
597
+ className: "me-2 mb-1",
570
598
  theme: "danger",
571
- onClick: onDeleteMedia
599
+ onClick: onDeleteMedia,
600
+ disabled: destroying
572
601
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
573
602
  id: "Bhu3B2",
574
603
  defaultMessage: [{
575
604
  "type": 0,
576
605
  "value": "Delete"
577
606
  }]
578
- })), onConfirm !== null ? /*#__PURE__*/React.createElement(Button, {
607
+ })), onSave !== null ? /*#__PURE__*/React.createElement(Button, {
608
+ className: "mb-1",
579
609
  theme: "primary",
580
- onClick: onConfirm
610
+ onClick: onSubmit,
611
+ disabled: !changed || updating || destroying
581
612
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
582
613
  id: "R1HYj0",
583
614
  defaultMessage: [{
@@ -589,10 +620,7 @@ function MediaForm(_ref) {
589
620
  }, /*#__PURE__*/React.createElement("div", {
590
621
  className: "col-md-6"
591
622
  }, /*#__PURE__*/React.createElement("div", {
592
- className: "position-relative w-100",
593
- style: {
594
- height: 400
595
- }
623
+ className: "position-relative w-100"
596
624
  }, /*#__PURE__*/React.createElement("div", {
597
625
  className: styles.mediaFrame
598
626
  }, /*#__PURE__*/React.createElement(MediaFrame, {
@@ -612,7 +640,11 @@ function MediaForm(_ref) {
612
640
  value: value,
613
641
  sections: sections,
614
642
  displays: displays
615
- }))));
643
+ }), generalError !== null && status !== null ? /*#__PURE__*/React.createElement("div", {
644
+ className: "mt-5"
645
+ }, /*#__PURE__*/React.createElement(FormStatus, {
646
+ status: status
647
+ })) : null)));
616
648
  }
617
649
  MediaForm.propTypes = propTypes$6;
618
650
  MediaForm.defaultProps = defaultProps$6;
@@ -732,7 +764,20 @@ var defaultColumns = [{
732
764
  }),
733
765
  component: 'avatar',
734
766
  path: 'metadata.author',
735
- namePath: 'name'
767
+ namePath: 'name',
768
+ withoutName: true
769
+ }, {
770
+ id: 'actions',
771
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
772
+ id: "rtwfuZ",
773
+ defaultMessage: [{
774
+ "type": 0,
775
+ "value": "Actions"
776
+ }]
777
+ })
778
+ // component: 'button',
779
+ // label: 'Edit',
780
+ // url: '/edit/1',
736
781
  }
737
782
  // {
738
783
  // id: 'status',
@@ -743,9 +788,9 @@ var defaultColumns = [{
743
788
  ];
744
789
 
745
790
  var defaultFilters = [{
746
- id: 'type',
791
+ id: 'types',
747
792
  component: 'select',
748
- name: 'type',
793
+ name: 'types',
749
794
  placeholder: /*#__PURE__*/React.createElement(FormattedMessage, {
750
795
  id: "9/t5wK",
751
796
  defaultMessage: [{
@@ -825,10 +870,14 @@ var defaultFilters = [{
825
870
  name: 'search'
826
871
  }];
827
872
 
828
- var _excluded$5 = ["page", "count"];
873
+ var _excluded$5 = ["page", "count"],
874
+ _excluded2 = ["types"];
829
875
  var propTypes$5 = {
830
876
  items: PropTypes$1.medias,
831
- uploadButton: PropTypes.func,
877
+ types: PropTypes.arrayOf(PropTypes.string),
878
+ uploadButton: PropTypes.shape({
879
+ value: PropTypes.oneOfType([PropTypes$1.medias, PropTypes$1.media])
880
+ }),
832
881
  buttons: PropTypes$1.buttons,
833
882
  filters: PropTypes$1.filters,
834
883
  columns: PropTypes$1.tableColumns,
@@ -848,6 +897,7 @@ var propTypes$5 = {
848
897
  theme: PropTypes.string,
849
898
  tableProps: PropTypes.bool,
850
899
  onSelectItem: PropTypes.func,
900
+ onSelectItems: PropTypes.func,
851
901
  onItemsChange: PropTypes.func,
852
902
  onLayoutChange: PropTypes.func,
853
903
  selectedCount: PropTypes.number,
@@ -856,6 +906,7 @@ var propTypes$5 = {
856
906
  };
857
907
  var defaultProps$5 = {
858
908
  items: null,
909
+ types: null,
859
910
  uploadButton: null,
860
911
  buttons: null,
861
912
  filters: defaultFilters,
@@ -882,6 +933,7 @@ var defaultProps$5 = {
882
933
  theme: null,
883
934
  tableProps: null,
884
935
  onSelectItem: null,
936
+ onSelectItems: null,
885
937
  onItemsChange: null,
886
938
  onLayoutChange: null,
887
939
  selectedCount: null,
@@ -890,6 +942,7 @@ var defaultProps$5 = {
890
942
  };
891
943
  function MediasBrowser(_ref) {
892
944
  var initialItems = _ref.items,
945
+ types = _ref.types,
893
946
  baseUrl = _ref.baseUrl,
894
947
  uploadButton = _ref.uploadButton,
895
948
  buttons = _ref.buttons,
@@ -903,6 +956,7 @@ function MediasBrowser(_ref) {
903
956
  theme = _ref.theme,
904
957
  tableProps = _ref.tableProps,
905
958
  onSelectItem = _ref.onSelectItem,
959
+ onSelectItems = _ref.onSelectItems,
906
960
  onItemsChange = _ref.onItemsChange,
907
961
  onLayoutChange = _ref.onLayoutChange,
908
962
  selectedCount = _ref.selectedCount,
@@ -911,9 +965,14 @@ function MediasBrowser(_ref) {
911
965
  var _ref2 = metadatas || {},
912
966
  sections = _ref2.sections,
913
967
  displays = _ref2.displays;
968
+ var _useState = useState(initialItems || null),
969
+ _useState2 = _slicedToArray(_useState, 1),
970
+ baseItems = _useState2[0];
914
971
  var baseQuery = useMemo(function () {
915
- return initialQuery;
916
- }, [initialQuery]);
972
+ return _objectSpread(_objectSpread({}, initialQuery), {}, {
973
+ types: types
974
+ });
975
+ }, [initialQuery, types]);
917
976
  var _useQuery = useQuery(baseQuery),
918
977
  fullQuery = _useQuery.query,
919
978
  onPageChange = _useQuery.onPageChange,
@@ -938,8 +997,13 @@ function MediasBrowser(_ref) {
938
997
  count = _useMemo$count === void 0 ? null : _useMemo$count,
939
998
  _useMemo$query = _useMemo.query,
940
999
  query = _useMemo$query === void 0 ? null : _useMemo$query;
1000
+
1001
+ // eslint-disable-next-line no-unused-vars
1002
+ var _ref4 = query || {};
1003
+ _ref4.types;
1004
+ var queryWithoutTypes = _objectWithoutProperties(_ref4, _excluded2);
941
1005
  var _useMedias = useMedias$1(query, page, count, {
942
- initialItems: initialItems
1006
+ items: baseItems
943
1007
  }),
944
1008
  items = _useMedias.medias,
945
1009
  loading = _useMedias.loading,
@@ -952,10 +1016,10 @@ function MediasBrowser(_ref) {
952
1016
  onItemsChange(items);
953
1017
  }
954
1018
  }, [items, onItemsChange]);
955
- var _useState = useState(initialLayout || 'grid'),
956
- _useState2 = _slicedToArray(_useState, 2),
957
- layout = _useState2[0],
958
- setLayout = _useState2[1];
1019
+ var _useState3 = useState(initialLayout || 'grid'),
1020
+ _useState4 = _slicedToArray(_useState3, 2),
1021
+ layout = _useState4[0],
1022
+ setLayout = _useState4[1];
959
1023
  var hasLayouts = useMemo(function () {
960
1024
  return layouts !== null && layouts.length > 1;
961
1025
  }, [layouts]);
@@ -965,21 +1029,22 @@ function MediasBrowser(_ref) {
965
1029
  onLayoutChange(newLayout);
966
1030
  }
967
1031
  }, [setLayout]);
968
- var _useState3 = useState(null),
969
- _useState4 = _slicedToArray(_useState3, 2),
970
- media = _useState4[0],
971
- setMedia = _useState4[1];
972
- var onOpenMedia = useCallback(function (currentMedia) {
973
- setMedia(currentMedia);
974
- }, [setMedia]);
1032
+ var _useState5 = useState(null),
1033
+ _useState6 = _slicedToArray(_useState5, 2),
1034
+ currentMedia = _useState6[0],
1035
+ setCurrentMedia = _useState6[1];
1036
+ var onOpenMedia = useCallback(function (media) {
1037
+ setCurrentMedia(media);
1038
+ }, [setCurrentMedia]);
975
1039
  var onCloseMedia = useCallback(function () {
976
- setMedia(null);
977
- }, [setMedia]);
978
- var onUploadMedia = useCallback(function (newMedia) {
979
- setMedia(null);
980
- onSelectItem(newMedia || null);
1040
+ setCurrentMedia(null);
1041
+ }, [setCurrentMedia]);
1042
+ var onChangeMedia = useCallback(function () {
1043
+ var media = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1044
+ console.log('media', media);
1045
+ onSelectItems(media);
981
1046
  onQueryReset();
982
- }, [setMedia, onQueryReset, onSelectItem]);
1047
+ }, [setCurrentMedia, onQueryReset, onSelectItems]);
983
1048
  var pagination = /*#__PURE__*/React.createElement(Pagination, {
984
1049
  page: page,
985
1050
  lastPage: lastPage,
@@ -994,9 +1059,22 @@ function MediasBrowser(_ref) {
994
1059
  withPreviousNext: true,
995
1060
  alwaysShowButtons: true
996
1061
  });
1062
+ var finalFilters = useMemo(function () {
1063
+ if (types !== null && filters !== null) {
1064
+ return (filters || []).map(function (filter) {
1065
+ var _ref5 = filter || {},
1066
+ _ref5$id = _ref5.id,
1067
+ id = _ref5$id === void 0 ? null : _ref5$id;
1068
+ return id === 'types' ? _objectSpread(_objectSpread({}, filter), {}, {
1069
+ disabled: true
1070
+ }) : filter;
1071
+ });
1072
+ }
1073
+ return filters;
1074
+ }, [filters, types]);
997
1075
  return /*#__PURE__*/React.createElement("div", {
998
1076
  className: classNames([styles.container, className])
999
- }, media !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1077
+ }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1000
1078
  className: "mt-2 mb-4"
1001
1079
  }, /*#__PURE__*/React.createElement(Button, {
1002
1080
  theme: "primary",
@@ -1010,7 +1088,7 @@ function MediasBrowser(_ref) {
1010
1088
  "value": "Back to files"
1011
1089
  }]
1012
1090
  }))), /*#__PURE__*/React.createElement(MediaForm, {
1013
- value: media,
1091
+ value: currentMedia,
1014
1092
  fields: fields,
1015
1093
  sections: sections,
1016
1094
  displays: displays,
@@ -1018,14 +1096,15 @@ function MediasBrowser(_ref) {
1018
1096
  })) : /*#__PURE__*/React.createElement(React.Fragment, null, uploadButton !== null ? /*#__PURE__*/React.createElement("div", {
1019
1097
  className: "mt-2 mb-4"
1020
1098
  }, /*#__PURE__*/React.createElement(UploadField, Object.assign({
1021
- onChange: onUploadMedia,
1099
+ onChange: onChangeMedia,
1022
1100
  withButton: true
1023
1101
  }, uploadButton))) : null, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
1024
1102
  items: buttons,
1025
1103
  className: "mb-2"
1026
1104
  }) : null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1027
1105
  value: query,
1028
- filters: filters,
1106
+ clearValue: types !== null ? queryWithoutTypes : null,
1107
+ filters: finalFilters,
1029
1108
  onChange: onQueryChange,
1030
1109
  onReset: onQueryReset,
1031
1110
  theme: theme
@@ -1079,11 +1158,13 @@ function MediasBrowser(_ref) {
1079
1158
  MediasBrowser.propTypes = propTypes$5;
1080
1159
  MediasBrowser.defaultProps = defaultProps$5;
1081
1160
 
1082
- var _excluded$4 = ["value", "selectedItems", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1161
+ var _excluded$4 = ["items", "value", "types", "uploadButton", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1083
1162
  var propTypes$4 = {
1084
1163
  // eslint-disable-next-line react/forbid-prop-types
1164
+ items: PropTypes.arrayOf(PropTypes.shape({})),
1085
1165
  value: PropTypes.arrayOf(PropTypes.shape({})),
1086
- selectedItems: PropTypes.arrayOf(PropTypes.shape({})),
1166
+ types: PropTypes.arrayOf(PropTypes.string),
1167
+ uploadButton: PropTypes.shape({}),
1087
1168
  onChange: PropTypes.func.isRequired,
1088
1169
  onConfirm: PropTypes.func.isRequired,
1089
1170
  onClose: PropTypes.func,
@@ -1095,8 +1176,10 @@ var propTypes$4 = {
1095
1176
  className: PropTypes.string
1096
1177
  };
1097
1178
  var defaultProps$4 = {
1179
+ items: null,
1098
1180
  value: null,
1099
- selectedItems: null,
1181
+ types: null,
1182
+ uploadButton: null,
1100
1183
  onClose: null,
1101
1184
  multiple: false,
1102
1185
  withoutButtons: false,
@@ -1104,8 +1187,10 @@ var defaultProps$4 = {
1104
1187
  className: null
1105
1188
  };
1106
1189
  function MediasPicker(_ref) {
1107
- var value = _ref.value,
1108
- initialSelectedItems = _ref.selectedItems,
1190
+ var initialItems = _ref.items,
1191
+ initialSelectedItems = _ref.value,
1192
+ types = _ref.types,
1193
+ uploadButton = _ref.uploadButton,
1109
1194
  onChange = _ref.onChange,
1110
1195
  onConfirm = _ref.onConfirm,
1111
1196
  onClose = _ref.onClose,
@@ -1114,14 +1199,14 @@ function MediasPicker(_ref) {
1114
1199
  tableProps = _ref.tableProps,
1115
1200
  className = _ref.className,
1116
1201
  props = _objectWithoutProperties(_ref, _excluded$4);
1117
- var _useState = useState(value),
1202
+ var _useState = useState(initialItems),
1118
1203
  _useState2 = _slicedToArray(_useState, 2),
1119
1204
  items = _useState2[0],
1120
1205
  setItems = _useState2[1];
1121
1206
  var onItemsChange = useCallback(function (pageItems) {
1122
1207
  setItems(pageItems);
1123
1208
  }, [setItems]);
1124
- var disabled = value === null || value.length < 1;
1209
+ var disabled = initialItems === null || initialItems.length < 1;
1125
1210
  var _useItemSelection = useItemSelection({
1126
1211
  items: items,
1127
1212
  selectedItems: initialSelectedItems,
@@ -1129,26 +1214,40 @@ function MediasPicker(_ref) {
1129
1214
  multipleSelection: multiple
1130
1215
  }),
1131
1216
  onSelectItem = _useItemSelection.onSelectItem,
1217
+ onSelectItems = _useItemSelection.onSelectItems,
1132
1218
  onSelectPage = _useItemSelection.onSelectPage,
1133
1219
  onClearSelected = _useItemSelection.onClearSelected,
1134
1220
  pageSelected = _useItemSelection.pageSelected,
1135
1221
  selectedCount = _useItemSelection.selectedCount,
1136
1222
  selectedItems = _useItemSelection.selectedItems;
1223
+ var finalUploadButton = useMemo(function () {
1224
+ return _objectSpread(_objectSpread(_objectSpread({}, uploadButton || null), types !== null ? {
1225
+ types: types
1226
+ } : null), {}, {
1227
+ allowMultipleUploads: multiple,
1228
+ maxNumberOfFiles: multiple ? 10 : 0,
1229
+ value: selectedItems
1230
+ });
1231
+ }, [uploadButton, selectedItems, multiple]);
1137
1232
  return /*#__PURE__*/React.createElement("div", {
1138
1233
  className: className
1139
1234
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
1140
1235
  tableProps: _objectSpread({
1141
- selectable: true,
1236
+ selectable: multiple,
1142
1237
  multipleSelection: multiple,
1143
1238
  onSelectItem: onSelectItem,
1144
1239
  onSelectPage: onSelectPage,
1145
1240
  selectedItems: selectedItems,
1146
1241
  pageSelected: pageSelected
1147
1242
  }, tableProps),
1243
+ items: items,
1148
1244
  onSelectItem: onSelectItem,
1245
+ onSelectItems: onSelectItems,
1149
1246
  onItemsChange: onItemsChange,
1150
1247
  selectedCount: selectedCount,
1151
- onClearSelected: onClearSelected
1248
+ onClearSelected: onClearSelected,
1249
+ uploadButton: finalUploadButton,
1250
+ types: types
1152
1251
  }, props)), multiple && !withoutButtons ? /*#__PURE__*/React.createElement("div", {
1153
1252
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
1154
1253
  }, /*#__PURE__*/React.createElement("div", {
package/lib/index.js CHANGED
@@ -10,11 +10,12 @@ var contexts = require('@panneau/core/contexts');
10
10
  var hooks = require('@panneau/core/hooks');
11
11
  var Button = require('@panneau/element-button');
12
12
  var Form = require('@panneau/element-form');
13
+ var FormStatus = require('@panneau/element-form-status');
13
14
  var MediaPlayer = require('@panneau/element-media-player');
14
15
  var MediaPreview = require('@panneau/element-media-preview');
16
+ var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
15
17
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
16
18
  var lodash = require('lodash');
17
- var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
18
19
  var core = require('@panneau/core');
19
20
  var Buttons = require('@panneau/element-buttons');
20
21
  var Grid = require('@panneau/element-grid');
@@ -215,25 +216,28 @@ function MediaFrame(_ref) {
215
216
  setShowPlayer(!showPlayer);
216
217
  }, [showPlayer, setShowPlayer]);
217
218
  return /*#__PURE__*/React.createElement("div", {
218
- className: classNames([className, _defineProperty({}, className, className != null)])
219
+ className: classNames([className, 'position-relative', _defineProperty({}, className, className != null)])
219
220
  }, showPlayer ? /*#__PURE__*/React.createElement(MediaPlayer, {
220
- value: value
221
+ value: value,
222
+ width: "100%"
221
223
  }) : /*#__PURE__*/React.createElement(MediaPreview, {
222
224
  value: value,
223
225
  width: "100%"
224
- }), /*#__PURE__*/React.createElement("div", {
226
+ }, /*#__PURE__*/React.createElement("div", {
225
227
  className: styles.playButton
226
228
  }, !showPlayer && (type === 'video' || type === 'embed' || type === 'audio') ? /*#__PURE__*/React.createElement(Button, {
227
229
  className: "rounded-circle",
228
230
  theme: "secondary",
229
231
  onClick: onClick,
230
- icon: "play-fill"
231
- }) : null));
232
+ icon: "play-fill",
233
+ size: "lg"
234
+ }) : null)));
232
235
  }
233
236
  MediaFrame.propTypes = propTypes$8;
234
237
  MediaFrame.defaultProps = defaultProps$8;
235
238
 
236
- var _excluded$6 = ["label", "path", "component"];
239
+ var _excluded$6 = ["path"],
240
+ _excluded2$1 = ["label", "value", "component"];
237
241
  var propTypes$7 = {
238
242
  value: PropTypes.shape({
239
243
  metadata: PropTypes.shape({}),
@@ -258,61 +262,78 @@ var defaultProps$7 = {
258
262
  function MediaMetadata(_ref) {
259
263
  var sections = _ref.sections,
260
264
  displays = _ref.displays,
261
- value = _ref.value,
265
+ filtersValue = _ref.value,
262
266
  className = _ref.className;
263
267
  var displayComponents = contexts.useDisplaysComponentsManager();
264
268
  var finalSections = React.useMemo(function () {
265
- var displaysWithoutSection = (displays || []).filter(function (_ref2) {
266
- var _ref2$section = _ref2.section,
267
- section = _ref2$section === void 0 ? null : _ref2$section;
269
+ var displaysWithValue = (displays || []).map(function (_ref2) {
270
+ var _ref2$path = _ref2.path,
271
+ path = _ref2$path === void 0 ? null : _ref2$path,
272
+ props = _objectWithoutProperties(_ref2, _excluded$6);
273
+ return _objectSpread({
274
+ value: lodash.get(filtersValue, path, null)
275
+ }, props);
276
+ }).filter(function (_ref3) {
277
+ var _ref3$value = _ref3.value,
278
+ value = _ref3$value === void 0 ? null : _ref3$value;
279
+ return value !== null;
280
+ });
281
+ var displaysWithoutSection = (displaysWithValue || []).filter(function (_ref4) {
282
+ var _ref4$section = _ref4.section,
283
+ section = _ref4$section === void 0 ? null : _ref4$section;
268
284
  return section === null;
269
285
  });
270
- return (sections || []).map(function (_ref3) {
271
- var _ref3$id = _ref3.id,
272
- id = _ref3$id === void 0 ? null : _ref3$id,
273
- _ref3$title = _ref3.title,
274
- title = _ref3$title === void 0 ? null : _ref3$title;
286
+ return (sections || []).map(function (_ref5) {
287
+ var _ref5$id = _ref5.id,
288
+ id = _ref5$id === void 0 ? null : _ref5$id,
289
+ _ref5$title = _ref5.title,
290
+ title = _ref5$title === void 0 ? null : _ref5$title;
275
291
  return {
276
292
  id: id,
277
293
  title: title,
278
- items: (displays || []).filter(function (_ref4) {
279
- var _ref4$section = _ref4.section,
280
- section = _ref4$section === void 0 ? null : _ref4$section;
294
+ items: (displaysWithValue || []).filter(function (_ref6) {
295
+ var _ref6$section = _ref6.section,
296
+ section = _ref6$section === void 0 ? null : _ref6$section;
281
297
  return section === id;
282
298
  })
283
299
  };
284
300
  }).concat({
301
+ id: 'others',
285
302
  title: null,
286
303
  items: displaysWithoutSection
304
+ }).filter(function (_ref7) {
305
+ var _ref7$items = _ref7.items,
306
+ items = _ref7$items === void 0 ? null : _ref7$items;
307
+ return items !== null && items.length > 0;
287
308
  });
288
- }, [sections, displays]);
309
+ }, [sections, displays, filtersValue]);
289
310
  return /*#__PURE__*/React.createElement("div", {
290
311
  className: classNames(['px-2', _defineProperty({}, className, className !== null)])
291
- }, (finalSections || []).map(function (_ref6, i) {
292
- var _ref6$title = _ref6.title,
293
- title = _ref6$title === void 0 ? null : _ref6$title,
294
- _ref6$items = _ref6.items,
295
- items = _ref6$items === void 0 ? [] : _ref6$items;
312
+ }, (finalSections || []).map(function (_ref9, idx) {
313
+ var _ref9$title = _ref9.title,
314
+ title = _ref9$title === void 0 ? null : _ref9$title,
315
+ _ref9$items = _ref9.items,
316
+ items = _ref9$items === void 0 ? [] : _ref9$items;
296
317
  return /*#__PURE__*/React.createElement("div", {
297
- className: "mb-5",
298
- key: "section-".concat(i + 1)
318
+ className: idx < finalSections.length - 1 ? 'mb-5' : null,
319
+ key: "section-".concat(idx + 1)
299
320
  }, title !== null ? /*#__PURE__*/React.createElement("h6", {
300
321
  className: "px-1"
301
322
  }, title) : null, /*#__PURE__*/React.createElement("ul", {
302
323
  className: "list-group list-group-flush"
303
- }, (items || []).map(function (_ref7, index) {
304
- var label = _ref7.label,
305
- path = _ref7.path,
306
- _ref7$component = _ref7.component,
307
- component = _ref7$component === void 0 ? null : _ref7$component,
308
- props = _objectWithoutProperties(_ref7, _excluded$6);
324
+ }, (items || []).map(function (_ref10, index) {
325
+ var label = _ref10.label,
326
+ value = _ref10.value,
327
+ _ref10$component = _ref10.component,
328
+ component = _ref10$component === void 0 ? null : _ref10$component,
329
+ props = _objectWithoutProperties(_ref10, _excluded2$1);
309
330
  var Component = displayComponents.getComponent(component || 'text');
310
- var itemValue = lodash.get(value, path, null);
331
+ var itemValue = value || null;
311
332
  return Component !== null && itemValue !== null ? /*#__PURE__*/React.createElement("li", {
333
+ key: "item-".concat(index + 1),
312
334
  className: classNames(['row', 'd-flex', 'align-items-center', 'justify-content-between', 'p-1', 'border-secondary-1', 'border-1', 'border-bottom', 'text-small', {
313
335
  'border-top': index === 0
314
- }]),
315
- key: "item-".concat(index + 1)
336
+ }])
316
337
  }, /*#__PURE__*/React.createElement("div", {
317
338
  className: "col-auto"
318
339
  }, label), /*#__PURE__*/React.createElement("div", {
@@ -479,7 +500,7 @@ var propTypes$6 = {
479
500
  name: PropTypes.string
480
501
  })),
481
502
  onChange: PropTypes.func.isRequired,
482
- onConfirm: PropTypes.func.isRequired,
503
+ onSave: PropTypes.func.isRequired,
483
504
  onDelete: PropTypes.func,
484
505
  onClose: PropTypes.func,
485
506
  className: PropTypes.string
@@ -499,7 +520,7 @@ function MediaForm(_ref) {
499
520
  sections = _ref.sections,
500
521
  displays = _ref.displays,
501
522
  onChange = _ref.onChange,
502
- onConfirm = _ref.onConfirm,
523
+ onSave = _ref.onSave,
503
524
  onDelete = _ref.onDelete,
504
525
  onClose = _ref.onClose,
505
526
  className = _ref.className;
@@ -511,9 +532,9 @@ function MediaForm(_ref) {
511
532
  destroy = _useMediaDestroy.destroy,
512
533
  destroying = _useMediaDestroy.loading;
513
534
  var _useState = React.useState(false),
514
- _useState2 = _slicedToArray(_useState, 2);
515
- _useState2[0];
516
- var setChanged = _useState2[1];
535
+ _useState2 = _slicedToArray(_useState, 2),
536
+ changed = _useState2[0],
537
+ setChanged = _useState2[1];
517
538
  var disabled = updating || destroying || initialValue === null;
518
539
  var _ref2 = initialValue || {},
519
540
  _ref2$name = _ref2.name,
@@ -527,21 +548,26 @@ function MediaForm(_ref) {
527
548
  setChanged(true);
528
549
  }, [onChange, setChanged]);
529
550
  var onMediaSaved = React.useCallback(function (newValue) {
530
- if (onConfirm !== null) {
531
- onConfirm(newValue);
551
+ if (onSave !== null) {
552
+ onSave(newValue);
532
553
  }
533
554
  setChanged(false);
534
555
  }, [onChange, setChanged]);
535
556
  var onDeleteMedia = React.useCallback(function () {
536
557
  // Destroy
537
- if (onClose !== null) {
538
- onClose();
539
- }
540
- if (onDelete !== null) {
541
- onDelete();
542
- }
543
- setChanged(false);
544
- }, [destroy, setChanged]);
558
+ var _ref3 = initialValue || {},
559
+ _ref3$id = _ref3.id,
560
+ id = _ref3$id === void 0 ? null : _ref3$id;
561
+ destroy(id, initialValue).then(function () {
562
+ if (onClose !== null) {
563
+ onClose();
564
+ }
565
+ if (onDelete !== null) {
566
+ onDelete();
567
+ }
568
+ setChanged(false);
569
+ });
570
+ }, [initialValue, destroy, destroying, setChanged]);
545
571
  var postForm = React.useCallback(function (action, data) {
546
572
  return initialValue !== null ? update(initialValue.id, data) : new Promise();
547
573
  }, [initialValue, update]);
@@ -550,36 +576,41 @@ function MediaForm(_ref) {
550
576
  postForm: postForm,
551
577
  onComplete: onMediaSaved,
552
578
  value: initialValue,
553
- setValue: onChange
579
+ setValue: onChangeMedia,
580
+ disabled: updating
554
581
  }),
555
582
  value = _useForm.value,
556
583
  setValue = _useForm.setValue,
557
- fields = _useForm.fields;
558
- _useForm.onSubmit;
559
- _useForm.status;
560
- _useForm.generalError;
561
- _useForm.errors;
584
+ fields = _useForm.fields,
585
+ onSubmit = _useForm.onSubmit,
586
+ status = _useForm.status,
587
+ generalError = _useForm.generalError;
562
588
  return /*#__PURE__*/React.createElement("div", {
563
589
  className: classNames(['text-body', _defineProperty({}, className, className !== null)])
564
590
  }, /*#__PURE__*/React.createElement("div", {
565
- className: "d-flex w-100 justify-content-between mb-2 pb-2 border-bottom"
566
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h4", {
567
- className: "d-inline"
591
+ className: "d-flex w-100 align-items-start justify-content-between mb-3 pb-2 border-bottom"
592
+ }, /*#__PURE__*/React.createElement("div", {
593
+ className: "d-flex align-items-end mb-0"
594
+ }, /*#__PURE__*/React.createElement("h4", {
595
+ className: "d-inline text-break mb-1"
568
596
  }, name), /*#__PURE__*/React.createElement("span", {
569
597
  className: "mx-2"
570
598
  }, type)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
571
- className: "me-2",
599
+ className: "me-2 mb-1",
572
600
  theme: "danger",
573
- onClick: onDeleteMedia
601
+ onClick: onDeleteMedia,
602
+ disabled: destroying
574
603
  }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
575
604
  id: "Bhu3B2",
576
605
  defaultMessage: [{
577
606
  "type": 0,
578
607
  "value": "Delete"
579
608
  }]
580
- })), onConfirm !== null ? /*#__PURE__*/React.createElement(Button, {
609
+ })), onSave !== null ? /*#__PURE__*/React.createElement(Button, {
610
+ className: "mb-1",
581
611
  theme: "primary",
582
- onClick: onConfirm
612
+ onClick: onSubmit,
613
+ disabled: !changed || updating || destroying
583
614
  }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
584
615
  id: "R1HYj0",
585
616
  defaultMessage: [{
@@ -591,10 +622,7 @@ function MediaForm(_ref) {
591
622
  }, /*#__PURE__*/React.createElement("div", {
592
623
  className: "col-md-6"
593
624
  }, /*#__PURE__*/React.createElement("div", {
594
- className: "position-relative w-100",
595
- style: {
596
- height: 400
597
- }
625
+ className: "position-relative w-100"
598
626
  }, /*#__PURE__*/React.createElement("div", {
599
627
  className: styles.mediaFrame
600
628
  }, /*#__PURE__*/React.createElement(MediaFrame, {
@@ -614,7 +642,11 @@ function MediaForm(_ref) {
614
642
  value: value,
615
643
  sections: sections,
616
644
  displays: displays
617
- }))));
645
+ }), generalError !== null && status !== null ? /*#__PURE__*/React.createElement("div", {
646
+ className: "mt-5"
647
+ }, /*#__PURE__*/React.createElement(FormStatus, {
648
+ status: status
649
+ })) : null)));
618
650
  }
619
651
  MediaForm.propTypes = propTypes$6;
620
652
  MediaForm.defaultProps = defaultProps$6;
@@ -734,7 +766,20 @@ var defaultColumns = [{
734
766
  }),
735
767
  component: 'avatar',
736
768
  path: 'metadata.author',
737
- namePath: 'name'
769
+ namePath: 'name',
770
+ withoutName: true
771
+ }, {
772
+ id: 'actions',
773
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
774
+ id: "rtwfuZ",
775
+ defaultMessage: [{
776
+ "type": 0,
777
+ "value": "Actions"
778
+ }]
779
+ })
780
+ // component: 'button',
781
+ // label: 'Edit',
782
+ // url: '/edit/1',
738
783
  }
739
784
  // {
740
785
  // id: 'status',
@@ -745,9 +790,9 @@ var defaultColumns = [{
745
790
  ];
746
791
 
747
792
  var defaultFilters = [{
748
- id: 'type',
793
+ id: 'types',
749
794
  component: 'select',
750
- name: 'type',
795
+ name: 'types',
751
796
  placeholder: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
752
797
  id: "9/t5wK",
753
798
  defaultMessage: [{
@@ -827,10 +872,14 @@ var defaultFilters = [{
827
872
  name: 'search'
828
873
  }];
829
874
 
830
- var _excluded$5 = ["page", "count"];
875
+ var _excluded$5 = ["page", "count"],
876
+ _excluded2 = ["types"];
831
877
  var propTypes$5 = {
832
878
  items: core.PropTypes.medias,
833
- uploadButton: PropTypes.func,
879
+ types: PropTypes.arrayOf(PropTypes.string),
880
+ uploadButton: PropTypes.shape({
881
+ value: PropTypes.oneOfType([core.PropTypes.medias, core.PropTypes.media])
882
+ }),
834
883
  buttons: core.PropTypes.buttons,
835
884
  filters: core.PropTypes.filters,
836
885
  columns: core.PropTypes.tableColumns,
@@ -850,6 +899,7 @@ var propTypes$5 = {
850
899
  theme: PropTypes.string,
851
900
  tableProps: PropTypes.bool,
852
901
  onSelectItem: PropTypes.func,
902
+ onSelectItems: PropTypes.func,
853
903
  onItemsChange: PropTypes.func,
854
904
  onLayoutChange: PropTypes.func,
855
905
  selectedCount: PropTypes.number,
@@ -858,6 +908,7 @@ var propTypes$5 = {
858
908
  };
859
909
  var defaultProps$5 = {
860
910
  items: null,
911
+ types: null,
861
912
  uploadButton: null,
862
913
  buttons: null,
863
914
  filters: defaultFilters,
@@ -884,6 +935,7 @@ var defaultProps$5 = {
884
935
  theme: null,
885
936
  tableProps: null,
886
937
  onSelectItem: null,
938
+ onSelectItems: null,
887
939
  onItemsChange: null,
888
940
  onLayoutChange: null,
889
941
  selectedCount: null,
@@ -892,6 +944,7 @@ var defaultProps$5 = {
892
944
  };
893
945
  function MediasBrowser(_ref) {
894
946
  var initialItems = _ref.items,
947
+ types = _ref.types,
895
948
  baseUrl = _ref.baseUrl,
896
949
  uploadButton = _ref.uploadButton,
897
950
  buttons = _ref.buttons,
@@ -905,6 +958,7 @@ function MediasBrowser(_ref) {
905
958
  theme = _ref.theme,
906
959
  tableProps = _ref.tableProps,
907
960
  onSelectItem = _ref.onSelectItem,
961
+ onSelectItems = _ref.onSelectItems,
908
962
  onItemsChange = _ref.onItemsChange,
909
963
  onLayoutChange = _ref.onLayoutChange,
910
964
  selectedCount = _ref.selectedCount,
@@ -913,9 +967,14 @@ function MediasBrowser(_ref) {
913
967
  var _ref2 = metadatas || {},
914
968
  sections = _ref2.sections,
915
969
  displays = _ref2.displays;
970
+ var _useState = React.useState(initialItems || null),
971
+ _useState2 = _slicedToArray(_useState, 1),
972
+ baseItems = _useState2[0];
916
973
  var baseQuery = React.useMemo(function () {
917
- return initialQuery;
918
- }, [initialQuery]);
974
+ return _objectSpread(_objectSpread({}, initialQuery), {}, {
975
+ types: types
976
+ });
977
+ }, [initialQuery, types]);
919
978
  var _useQuery = hooks.useQuery(baseQuery),
920
979
  fullQuery = _useQuery.query,
921
980
  onPageChange = _useQuery.onPageChange,
@@ -940,8 +999,13 @@ function MediasBrowser(_ref) {
940
999
  count = _useMemo$count === void 0 ? null : _useMemo$count,
941
1000
  _useMemo$query = _useMemo.query,
942
1001
  query = _useMemo$query === void 0 ? null : _useMemo$query;
1002
+
1003
+ // eslint-disable-next-line no-unused-vars
1004
+ var _ref4 = query || {};
1005
+ _ref4.types;
1006
+ var queryWithoutTypes = _objectWithoutProperties(_ref4, _excluded2);
943
1007
  var _useMedias = useMedias$1(query, page, count, {
944
- initialItems: initialItems
1008
+ items: baseItems
945
1009
  }),
946
1010
  items = _useMedias.medias,
947
1011
  loading = _useMedias.loading,
@@ -954,10 +1018,10 @@ function MediasBrowser(_ref) {
954
1018
  onItemsChange(items);
955
1019
  }
956
1020
  }, [items, onItemsChange]);
957
- var _useState = React.useState(initialLayout || 'grid'),
958
- _useState2 = _slicedToArray(_useState, 2),
959
- layout = _useState2[0],
960
- setLayout = _useState2[1];
1021
+ var _useState3 = React.useState(initialLayout || 'grid'),
1022
+ _useState4 = _slicedToArray(_useState3, 2),
1023
+ layout = _useState4[0],
1024
+ setLayout = _useState4[1];
961
1025
  var hasLayouts = React.useMemo(function () {
962
1026
  return layouts !== null && layouts.length > 1;
963
1027
  }, [layouts]);
@@ -967,21 +1031,22 @@ function MediasBrowser(_ref) {
967
1031
  onLayoutChange(newLayout);
968
1032
  }
969
1033
  }, [setLayout]);
970
- var _useState3 = React.useState(null),
971
- _useState4 = _slicedToArray(_useState3, 2),
972
- media = _useState4[0],
973
- setMedia = _useState4[1];
974
- var onOpenMedia = React.useCallback(function (currentMedia) {
975
- setMedia(currentMedia);
976
- }, [setMedia]);
1034
+ var _useState5 = React.useState(null),
1035
+ _useState6 = _slicedToArray(_useState5, 2),
1036
+ currentMedia = _useState6[0],
1037
+ setCurrentMedia = _useState6[1];
1038
+ var onOpenMedia = React.useCallback(function (media) {
1039
+ setCurrentMedia(media);
1040
+ }, [setCurrentMedia]);
977
1041
  var onCloseMedia = React.useCallback(function () {
978
- setMedia(null);
979
- }, [setMedia]);
980
- var onUploadMedia = React.useCallback(function (newMedia) {
981
- setMedia(null);
982
- onSelectItem(newMedia || null);
1042
+ setCurrentMedia(null);
1043
+ }, [setCurrentMedia]);
1044
+ var onChangeMedia = React.useCallback(function () {
1045
+ var media = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1046
+ console.log('media', media);
1047
+ onSelectItems(media);
983
1048
  onQueryReset();
984
- }, [setMedia, onQueryReset, onSelectItem]);
1049
+ }, [setCurrentMedia, onQueryReset, onSelectItems]);
985
1050
  var pagination = /*#__PURE__*/React.createElement(Pagination, {
986
1051
  page: page,
987
1052
  lastPage: lastPage,
@@ -996,9 +1061,22 @@ function MediasBrowser(_ref) {
996
1061
  withPreviousNext: true,
997
1062
  alwaysShowButtons: true
998
1063
  });
1064
+ var finalFilters = React.useMemo(function () {
1065
+ if (types !== null && filters !== null) {
1066
+ return (filters || []).map(function (filter) {
1067
+ var _ref5 = filter || {},
1068
+ _ref5$id = _ref5.id,
1069
+ id = _ref5$id === void 0 ? null : _ref5$id;
1070
+ return id === 'types' ? _objectSpread(_objectSpread({}, filter), {}, {
1071
+ disabled: true
1072
+ }) : filter;
1073
+ });
1074
+ }
1075
+ return filters;
1076
+ }, [filters, types]);
999
1077
  return /*#__PURE__*/React.createElement("div", {
1000
1078
  className: classNames([styles.container, className])
1001
- }, media !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1079
+ }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1002
1080
  className: "mt-2 mb-4"
1003
1081
  }, /*#__PURE__*/React.createElement(Button, {
1004
1082
  theme: "primary",
@@ -1012,7 +1090,7 @@ function MediasBrowser(_ref) {
1012
1090
  "value": "Back to files"
1013
1091
  }]
1014
1092
  }))), /*#__PURE__*/React.createElement(MediaForm, {
1015
- value: media,
1093
+ value: currentMedia,
1016
1094
  fields: fields,
1017
1095
  sections: sections,
1018
1096
  displays: displays,
@@ -1020,14 +1098,15 @@ function MediasBrowser(_ref) {
1020
1098
  })) : /*#__PURE__*/React.createElement(React.Fragment, null, uploadButton !== null ? /*#__PURE__*/React.createElement("div", {
1021
1099
  className: "mt-2 mb-4"
1022
1100
  }, /*#__PURE__*/React.createElement(UploadField, Object.assign({
1023
- onChange: onUploadMedia,
1101
+ onChange: onChangeMedia,
1024
1102
  withButton: true
1025
1103
  }, uploadButton))) : null, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
1026
1104
  items: buttons,
1027
1105
  className: "mb-2"
1028
1106
  }) : null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1029
1107
  value: query,
1030
- filters: filters,
1108
+ clearValue: types !== null ? queryWithoutTypes : null,
1109
+ filters: finalFilters,
1031
1110
  onChange: onQueryChange,
1032
1111
  onReset: onQueryReset,
1033
1112
  theme: theme
@@ -1081,11 +1160,13 @@ function MediasBrowser(_ref) {
1081
1160
  MediasBrowser.propTypes = propTypes$5;
1082
1161
  MediasBrowser.defaultProps = defaultProps$5;
1083
1162
 
1084
- var _excluded$4 = ["value", "selectedItems", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1163
+ var _excluded$4 = ["items", "value", "types", "uploadButton", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1085
1164
  var propTypes$4 = {
1086
1165
  // eslint-disable-next-line react/forbid-prop-types
1166
+ items: PropTypes.arrayOf(PropTypes.shape({})),
1087
1167
  value: PropTypes.arrayOf(PropTypes.shape({})),
1088
- selectedItems: PropTypes.arrayOf(PropTypes.shape({})),
1168
+ types: PropTypes.arrayOf(PropTypes.string),
1169
+ uploadButton: PropTypes.shape({}),
1089
1170
  onChange: PropTypes.func.isRequired,
1090
1171
  onConfirm: PropTypes.func.isRequired,
1091
1172
  onClose: PropTypes.func,
@@ -1097,8 +1178,10 @@ var propTypes$4 = {
1097
1178
  className: PropTypes.string
1098
1179
  };
1099
1180
  var defaultProps$4 = {
1181
+ items: null,
1100
1182
  value: null,
1101
- selectedItems: null,
1183
+ types: null,
1184
+ uploadButton: null,
1102
1185
  onClose: null,
1103
1186
  multiple: false,
1104
1187
  withoutButtons: false,
@@ -1106,8 +1189,10 @@ var defaultProps$4 = {
1106
1189
  className: null
1107
1190
  };
1108
1191
  function MediasPicker(_ref) {
1109
- var value = _ref.value,
1110
- initialSelectedItems = _ref.selectedItems,
1192
+ var initialItems = _ref.items,
1193
+ initialSelectedItems = _ref.value,
1194
+ types = _ref.types,
1195
+ uploadButton = _ref.uploadButton,
1111
1196
  onChange = _ref.onChange,
1112
1197
  onConfirm = _ref.onConfirm,
1113
1198
  onClose = _ref.onClose,
@@ -1116,14 +1201,14 @@ function MediasPicker(_ref) {
1116
1201
  tableProps = _ref.tableProps,
1117
1202
  className = _ref.className,
1118
1203
  props = _objectWithoutProperties(_ref, _excluded$4);
1119
- var _useState = React.useState(value),
1204
+ var _useState = React.useState(initialItems),
1120
1205
  _useState2 = _slicedToArray(_useState, 2),
1121
1206
  items = _useState2[0],
1122
1207
  setItems = _useState2[1];
1123
1208
  var onItemsChange = React.useCallback(function (pageItems) {
1124
1209
  setItems(pageItems);
1125
1210
  }, [setItems]);
1126
- var disabled = value === null || value.length < 1;
1211
+ var disabled = initialItems === null || initialItems.length < 1;
1127
1212
  var _useItemSelection = hooks.useItemSelection({
1128
1213
  items: items,
1129
1214
  selectedItems: initialSelectedItems,
@@ -1131,26 +1216,40 @@ function MediasPicker(_ref) {
1131
1216
  multipleSelection: multiple
1132
1217
  }),
1133
1218
  onSelectItem = _useItemSelection.onSelectItem,
1219
+ onSelectItems = _useItemSelection.onSelectItems,
1134
1220
  onSelectPage = _useItemSelection.onSelectPage,
1135
1221
  onClearSelected = _useItemSelection.onClearSelected,
1136
1222
  pageSelected = _useItemSelection.pageSelected,
1137
1223
  selectedCount = _useItemSelection.selectedCount,
1138
1224
  selectedItems = _useItemSelection.selectedItems;
1225
+ var finalUploadButton = React.useMemo(function () {
1226
+ return _objectSpread(_objectSpread(_objectSpread({}, uploadButton || null), types !== null ? {
1227
+ types: types
1228
+ } : null), {}, {
1229
+ allowMultipleUploads: multiple,
1230
+ maxNumberOfFiles: multiple ? 10 : 0,
1231
+ value: selectedItems
1232
+ });
1233
+ }, [uploadButton, selectedItems, multiple]);
1139
1234
  return /*#__PURE__*/React.createElement("div", {
1140
1235
  className: className
1141
1236
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
1142
1237
  tableProps: _objectSpread({
1143
- selectable: true,
1238
+ selectable: multiple,
1144
1239
  multipleSelection: multiple,
1145
1240
  onSelectItem: onSelectItem,
1146
1241
  onSelectPage: onSelectPage,
1147
1242
  selectedItems: selectedItems,
1148
1243
  pageSelected: pageSelected
1149
1244
  }, tableProps),
1245
+ items: items,
1150
1246
  onSelectItem: onSelectItem,
1247
+ onSelectItems: onSelectItems,
1151
1248
  onItemsChange: onItemsChange,
1152
1249
  selectedCount: selectedCount,
1153
- onClearSelected: onClearSelected
1250
+ onClearSelected: onClearSelected,
1251
+ uploadButton: finalUploadButton,
1252
+ types: types
1154
1253
  }, props)), multiple && !withoutButtons ? /*#__PURE__*/React.createElement("div", {
1155
1254
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
1156
1255
  }, /*#__PURE__*/React.createElement("div", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/medias",
3
- "version": "3.0.153",
3
+ "version": "3.0.156",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -46,20 +46,21 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@babel/runtime": "^7.12.5",
49
- "@panneau/core": "^3.0.153",
50
- "@panneau/data": "^3.0.153",
51
- "@panneau/element-button": "^3.0.153",
52
- "@panneau/element-buttons": "^3.0.153",
53
- "@panneau/element-form": "^3.0.153",
54
- "@panneau/element-grid": "^3.0.153",
55
- "@panneau/element-icon": "^3.0.153",
56
- "@panneau/element-media-card": "^3.0.153",
57
- "@panneau/element-media-player": "^3.0.153",
58
- "@panneau/element-media-preview": "^3.0.153",
59
- "@panneau/element-pagination": "^3.0.153",
60
- "@panneau/element-table": "^3.0.153",
61
- "@panneau/field-upload": "^3.0.153",
62
- "@panneau/filter-filters": "^3.0.153",
49
+ "@panneau/core": "^3.0.156",
50
+ "@panneau/data": "^3.0.156",
51
+ "@panneau/element-button": "^3.0.156",
52
+ "@panneau/element-buttons": "^3.0.156",
53
+ "@panneau/element-form": "^3.0.156",
54
+ "@panneau/element-form-status": "^3.0.156",
55
+ "@panneau/element-grid": "^3.0.156",
56
+ "@panneau/element-icon": "^3.0.156",
57
+ "@panneau/element-media-card": "^3.0.156",
58
+ "@panneau/element-media-player": "^3.0.156",
59
+ "@panneau/element-media-preview": "^3.0.156",
60
+ "@panneau/element-pagination": "^3.0.156",
61
+ "@panneau/element-table": "^3.0.156",
62
+ "@panneau/field-upload": "^3.0.156",
63
+ "@panneau/filter-filters": "^3.0.156",
63
64
  "classnames": "^2.5.1",
64
65
  "lodash": "^4.17.21",
65
66
  "prop-types": "^15.7.2",
@@ -68,5 +69,5 @@
68
69
  "publishConfig": {
69
70
  "access": "public"
70
71
  },
71
- "gitHead": "715118ddbe09d7e7129bdb5cce0aad91aaa96768"
72
+ "gitHead": "3a248daabc4ba795ed1d39d148c1f1667fb203a3"
72
73
  }