@panneau/medias 3.0.170 → 3.0.172

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.
@@ -1 +1 @@
1
- .panneau-medias-mediaFrame{margin-bottom:10px;position:relative}.panneau-medias-playButton{left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
1
+ .panneau-medias-mediaFrame{aspect-ratio:1/1;margin-bottom:10px;position:relative}.panneau-medias-playButton{left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
package/es/index.js CHANGED
@@ -9,10 +9,12 @@ 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
11
  import FormStatus from '@panneau/element-form-status';
12
+ import ImageDisplay from '@panneau/display-image';
12
13
  import MediaPlayer from '@panneau/element-media-player';
13
- import MediaPreview from '@panneau/element-media-preview';
14
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
14
15
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
15
16
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
17
+ import uniqBy from 'lodash/uniqBy';
16
18
  import { PropTypes as PropTypes$1 } from '@panneau/core';
17
19
  import Buttons from '@panneau/element-buttons';
18
20
  import Grid from '@panneau/element-grid';
@@ -20,10 +22,8 @@ import Icon from '@panneau/element-icon';
20
22
  import MediaCard from '@panneau/element-media-card';
21
23
  import Pagination from '@panneau/element-pagination';
22
24
  import Table from '@panneau/element-table';
23
- import UploadField from '@panneau/field-upload';
24
25
  import Filters from '@panneau/filter-filters';
25
26
  import { useItems, useData, useApi } from '@panneau/data';
26
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
27
27
 
28
28
  /* eslint-disable react/jsx-props-no-spreading */
29
29
  var MediasApiContext = /*#__PURE__*/React.createContext(null);
@@ -215,22 +215,18 @@ function MediaFrame(_ref) {
215
215
  setShowPlayer(!showPlayer);
216
216
  }, [showPlayer, setShowPlayer]);
217
217
  return /*#__PURE__*/React.createElement("div", {
218
- className: classNames([className, 'position-relative', _defineProperty({}, className, className != null)])
218
+ className: classNames([styles.mediaFrame, 'position-relative', 'd-flex', 'flex-grow-1', 'w-100', 'mw-100', _defineProperty({}, className, className != null)])
219
219
  }, showPlayer ? /*#__PURE__*/React.createElement(MediaPlayer, {
220
220
  value: value,
221
221
  width: "100%"
222
- }) : /*#__PURE__*/React.createElement(MediaPreview, {
222
+ }) : /*#__PURE__*/React.createElement(ImageDisplay, {
223
+ className: "w-100",
223
224
  value: value,
224
- width: "100%"
225
- }, /*#__PURE__*/React.createElement("div", {
226
- className: styles.playButton
227
- }, !showPlayer && (type === 'video' || type === 'embed' || type === 'audio') ? /*#__PURE__*/React.createElement(Button, {
228
- className: "rounded-circle",
229
- theme: "secondary",
230
- onClick: onClick,
231
- icon: "play-fill",
232
- size: "lg"
233
- }) : null)));
225
+ maxWidth: "100%",
226
+ maxHeight: "100%",
227
+ withoutZoom: true,
228
+ onClick: type === 'video' || type === 'audio' ? onClick : null
229
+ }));
234
230
  }
235
231
  MediaFrame.propTypes = propTypes$8;
236
232
  MediaFrame.defaultProps = defaultProps$8;
@@ -268,6 +264,7 @@ var defaultFields = [{
268
264
  }]
269
265
  }),
270
266
  isList: true,
267
+ hideWithoutValue: true,
271
268
  fields: [{
272
269
  id: 'user',
273
270
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
@@ -309,6 +306,7 @@ var defaultFields = [{
309
306
  }]
310
307
  }),
311
308
  isList: true,
309
+ hideWithoutValue: true,
312
310
  fields: [{
313
311
  id: 'format',
314
312
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
@@ -696,6 +694,10 @@ var defaultColumns = [{
696
694
  ];
697
695
 
698
696
  var defaultFilters = [{
697
+ id: 'search',
698
+ component: 'search',
699
+ name: 'search'
700
+ }, {
699
701
  id: 'types',
700
702
  component: 'select',
701
703
  name: 'types',
@@ -744,7 +746,8 @@ var defaultFilters = [{
744
746
  value: 'document'
745
747
  }],
746
748
  multiple: true
747
- },
749
+ }
750
+
748
751
  // {
749
752
  // id: 'author',
750
753
  // component: 'select',
@@ -763,20 +766,14 @@ var defaultFilters = [{
763
766
  // itemLabelPath: 'label',
764
767
  // multiple: true,
765
768
  // },
766
- {
767
- id: 'search',
768
- component: 'search',
769
- name: 'search'
770
- }];
769
+ ];
771
770
 
772
771
  var _excluded$5 = ["page", "count"],
773
772
  _excluded2 = ["types"];
774
773
  var propTypes$5 = {
775
774
  items: PropTypes$1.medias,
775
+ extraItems: PropTypes$1.medias,
776
776
  types: PropTypes.arrayOf(PropTypes.string),
777
- uploadButton: PropTypes.shape({
778
- value: PropTypes.oneOfType([PropTypes$1.medias, PropTypes$1.media])
779
- }),
780
777
  buttons: PropTypes$1.buttons,
781
778
  filters: PropTypes$1.filters,
782
779
  columns: PropTypes$1.tableColumns,
@@ -787,18 +784,17 @@ var propTypes$5 = {
787
784
  layouts: PropTypes.arrayOf(PropTypes.shape({})),
788
785
  theme: PropTypes.string,
789
786
  tableProps: PropTypes.bool,
790
- onSelectItem: PropTypes.func,
791
- onSelectItems: PropTypes.func,
792
787
  onItemsChange: PropTypes.func,
793
788
  onLayoutChange: PropTypes.func,
794
789
  selectedCount: PropTypes.number,
795
790
  onClearSelected: PropTypes.func,
796
- className: PropTypes.string
791
+ className: PropTypes.string,
792
+ buttonsClassName: PropTypes.string
797
793
  };
798
794
  var defaultProps$5 = {
799
795
  items: null,
796
+ extraItems: null,
800
797
  types: null,
801
- uploadButton: null,
802
798
  buttons: null,
803
799
  filters: defaultFilters,
804
800
  columns: defaultColumns,
@@ -819,19 +815,18 @@ var defaultProps$5 = {
819
815
  }],
820
816
  theme: null,
821
817
  tableProps: null,
822
- onSelectItem: null,
823
- onSelectItems: null,
824
818
  onItemsChange: null,
825
819
  onLayoutChange: null,
826
820
  selectedCount: null,
827
821
  onClearSelected: null,
828
- className: null
822
+ className: null,
823
+ buttonsClassName: null
829
824
  };
830
825
  function MediasBrowser(_ref) {
831
826
  var initialItems = _ref.items,
827
+ extraItems = _ref.extraItems,
832
828
  types = _ref.types,
833
829
  baseUrl = _ref.baseUrl,
834
- uploadButton = _ref.uploadButton,
835
830
  buttons = _ref.buttons,
836
831
  filters = _ref.filters,
837
832
  columns = _ref.columns,
@@ -841,13 +836,12 @@ function MediasBrowser(_ref) {
841
836
  layouts = _ref.layouts,
842
837
  theme = _ref.theme,
843
838
  tableProps = _ref.tableProps,
844
- onSelectItem = _ref.onSelectItem,
845
- onSelectItems = _ref.onSelectItems,
846
839
  onItemsChange = _ref.onItemsChange,
847
840
  onLayoutChange = _ref.onLayoutChange,
848
841
  selectedCount = _ref.selectedCount,
849
842
  onClearSelected = _ref.onClearSelected,
850
- className = _ref.className;
843
+ className = _ref.className,
844
+ buttonsClassName = _ref.buttonsClassName;
851
845
  var _useState = useState(initialItems || null),
852
846
  _useState2 = _slicedToArray(_useState, 1),
853
847
  baseItems = _useState2[0];
@@ -901,7 +895,7 @@ function MediasBrowser(_ref) {
901
895
  onItemsChange(items);
902
896
  }
903
897
  }, [items, onItemsChange]);
904
- var _useState3 = useState(initialLayout || 'grid'),
898
+ var _useState3 = useState(initialLayout || 'table'),
905
899
  _useState4 = _slicedToArray(_useState3, 2),
906
900
  layout = _useState4[0],
907
901
  setLayout = _useState4[1];
@@ -925,11 +919,6 @@ function MediasBrowser(_ref) {
925
919
  var onCloseMedia = useCallback(function () {
926
920
  setCurrentMedia(null);
927
921
  }, [setCurrentMedia]);
928
- var onChangeMedia = useCallback(function () {
929
- var media = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
930
- onSelectItems(media);
931
- onQueryReset();
932
- }, [setCurrentMedia, onQueryReset, onSelectItems]);
933
922
  var onSaveMedia = useCallback(function () {
934
923
  setCurrentMedia(null);
935
924
  onQueryReset();
@@ -961,13 +950,20 @@ function MediasBrowser(_ref) {
961
950
  }
962
951
  return filters;
963
952
  }, [filters, types]);
953
+ var finalItems = useMemo(function () {
954
+ if (page === 1 && extraItems !== null) {
955
+ return uniqBy([].concat(_toConsumableArray(extraItems), _toConsumableArray(items || [])), function (it) {
956
+ return it === null || it === void 0 ? void 0 : it.id;
957
+ });
958
+ }
959
+ return items;
960
+ }, [items, page, extraItems]);
964
961
  return /*#__PURE__*/React.createElement("div", {
965
962
  className: classNames([styles.container, className])
966
963
  }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
967
964
  className: "mt-2 mb-4"
968
965
  }, /*#__PURE__*/React.createElement(Button, {
969
966
  theme: "primary",
970
- outline: true,
971
967
  onClick: onCloseMedia,
972
968
  icon: "arrow-left"
973
969
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
@@ -982,29 +978,22 @@ function MediasBrowser(_ref) {
982
978
  onChange: setCurrentMedia,
983
979
  onSave: onSaveMedia,
984
980
  onClose: onCloseMedia
985
- })) : /*#__PURE__*/React.createElement(React.Fragment, null, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
986
- items: buttons,
987
- className: "mb-2"
988
- }) : null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
989
- className: "mt-0 pt-0",
981
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
990
982
  value: query,
991
983
  clearValue: types !== null ? queryWithoutTypes : null,
992
984
  filters: finalFilters,
993
985
  onChange: onQueryChange,
994
986
  onReset: onQueryReset,
995
987
  theme: theme
996
- }, uploadButton !== null ? /*#__PURE__*/React.createElement(UploadField, Object.assign({
997
- className: "w-auto mb-2",
998
- onChange: onChangeMedia,
999
- withButton: true,
1000
- withoutMedia: true
1001
- }, uploadButton)) : null) : null, filters === null && uploadButton !== null ? /*#__PURE__*/React.createElement("div", {
988
+ }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
989
+ items: buttons,
990
+ className: buttonsClassName
991
+ }) : null) : null, filters === null && buttons !== null ? /*#__PURE__*/React.createElement("div", {
1002
992
  className: "mt-2 mb-2"
1003
- }, /*#__PURE__*/React.createElement(UploadField, Object.assign({
1004
- onChange: onChangeMedia,
1005
- withButton: true,
1006
- withoutMedia: true
1007
- }, uploadButton))) : null, /*#__PURE__*/React.createElement("div", {
993
+ }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
994
+ items: buttons,
995
+ className: buttonsClassName
996
+ }) : null) : null, /*#__PURE__*/React.createElement("div", {
1008
997
  className: classNames(['d-flex', 'mt-1', 'mb-3', {
1009
998
  'justify-content-between': hasLayouts,
1010
999
  'justify-content-end': !hasLayouts
@@ -1029,26 +1018,29 @@ function MediasBrowser(_ref) {
1029
1018
  componentProps: {
1030
1019
  className: 'd-flex w-100',
1031
1020
  cardClassName: 'flex-grow-1',
1032
- vertical: true
1033
- }
1034
- }, tableProps, {
1035
- items: items || [],
1036
- loading: loading,
1037
- onSelectItem: onSelectItem !== null ? onSelectItem : function (it) {
1021
+ vertical: true,
1022
+ onClickDescription: function onClickDescription(it) {
1023
+ onOpenMedia(it);
1024
+ }
1025
+ },
1026
+ onSelectItem: function onSelectItem(it) {
1038
1027
  return onOpenMedia(it);
1039
1028
  }
1029
+ }, tableProps, {
1030
+ items: finalItems || [],
1031
+ loading: loading
1040
1032
  })) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, Object.assign({
1041
1033
  theme: theme,
1042
1034
  columns: columns,
1043
1035
  displayPlaceholder: /*#__PURE__*/React.createElement("span", {
1044
1036
  className: "text-secondary text-opacity-75"
1045
- }, "\u2014")
1037
+ }, "\u2014"),
1038
+ onSelectItem: function onSelectItem(it) {
1039
+ return onOpenMedia(it);
1040
+ }
1046
1041
  }, tableProps, {
1047
- items: items,
1042
+ items: finalItems,
1048
1043
  loading: loading,
1049
- onSelectItem: onSelectItem !== null ? onSelectItem : function (it) {
1050
- return onOpenMedia(it);
1051
- },
1052
1044
  actionsProps: {
1053
1045
  getEditPropsFromItem: function getEditPropsFromItem(it) {
1054
1046
  return {
@@ -1066,13 +1058,12 @@ function MediasBrowser(_ref) {
1066
1058
  MediasBrowser.propTypes = propTypes$5;
1067
1059
  MediasBrowser.defaultProps = defaultProps$5;
1068
1060
 
1069
- var _excluded$4 = ["items", "value", "types", "uploadButton", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1061
+ var _excluded$4 = ["items", "value", "types", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1070
1062
  var propTypes$4 = {
1071
1063
  // eslint-disable-next-line react/forbid-prop-types
1072
1064
  items: PropTypes.arrayOf(PropTypes.shape({})),
1073
1065
  value: PropTypes.arrayOf(PropTypes.shape({})),
1074
1066
  types: PropTypes.arrayOf(PropTypes.string),
1075
- uploadButton: PropTypes.shape({}),
1076
1067
  onChange: PropTypes.func.isRequired,
1077
1068
  onConfirm: PropTypes.func.isRequired,
1078
1069
  onClose: PropTypes.func,
@@ -1087,7 +1078,6 @@ var defaultProps$4 = {
1087
1078
  items: null,
1088
1079
  value: null,
1089
1080
  types: null,
1090
- uploadButton: null,
1091
1081
  onClose: null,
1092
1082
  multiple: false,
1093
1083
  withoutButtons: false,
@@ -1098,7 +1088,6 @@ function MediasPicker(_ref) {
1098
1088
  var initialItems = _ref.items,
1099
1089
  initialSelectedItems = _ref.value,
1100
1090
  types = _ref.types,
1101
- uploadButton = _ref.uploadButton,
1102
1091
  onChange = _ref.onChange,
1103
1092
  onConfirm = _ref.onConfirm,
1104
1093
  onClose = _ref.onClose,
@@ -1107,61 +1096,50 @@ function MediasPicker(_ref) {
1107
1096
  tableProps = _ref.tableProps,
1108
1097
  className = _ref.className,
1109
1098
  props = _objectWithoutProperties(_ref, _excluded$4);
1099
+ // For selection only
1110
1100
  var _useState = useState(initialItems),
1111
1101
  _useState2 = _slicedToArray(_useState, 2),
1112
- items = _useState2[0],
1102
+ currentItems = _useState2[0],
1113
1103
  setItems = _useState2[1];
1114
1104
  var onItemsChange = useCallback(function (pageItems) {
1115
1105
  setItems(pageItems);
1116
1106
  }, [setItems]);
1117
- var disabled = initialItems === null || initialItems.length < 1;
1118
1107
  var _useMediasForm = useMediasForm(),
1119
1108
  currentMedia = _useMediasForm.media;
1120
1109
  var _useItemSelection = useItemSelection({
1121
- items: items,
1110
+ currentItems: currentItems,
1122
1111
  selectedItems: initialSelectedItems,
1123
1112
  onSelectionChange: onChange,
1124
1113
  multipleSelection: multiple
1125
1114
  }),
1126
1115
  onSelectItem = _useItemSelection.onSelectItem,
1127
- onSelectItems = _useItemSelection.onSelectItems,
1128
1116
  onSelectPage = _useItemSelection.onSelectPage,
1129
1117
  onClearSelected = _useItemSelection.onClearSelected,
1130
1118
  pageSelected = _useItemSelection.pageSelected,
1131
1119
  selectedCount = _useItemSelection.selectedCount,
1132
1120
  selectedItems = _useItemSelection.selectedItems;
1121
+ var disabled = currentItems === null || currentItems.length < 1;
1133
1122
  var onConfirmSelection = useCallback(function () {
1134
1123
  if (onConfirm !== null) {
1135
1124
  onConfirm(selectedItems);
1136
1125
  }
1137
1126
  }, [selectedItems, onConfirm]);
1138
- var finalUploadButton = useMemo(function () {
1139
- return _objectSpread(_objectSpread(_objectSpread({}, uploadButton || null), types !== null ? {
1140
- types: types
1141
- } : null), {}, {
1142
- allowMultipleUploads: multiple,
1143
- maxNumberOfFiles: multiple ? 10 : 0,
1144
- value: selectedItems
1145
- });
1146
- }, [uploadButton, selectedItems, multiple]);
1147
1127
  return /*#__PURE__*/React.createElement("div", {
1148
1128
  className: className
1149
1129
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
1150
1130
  tableProps: _objectSpread({
1151
- selectable: multiple,
1131
+ selectable: true,
1152
1132
  multipleSelection: multiple,
1153
1133
  onSelectItem: onSelectItem,
1154
1134
  onSelectPage: onSelectPage,
1155
1135
  selectedItems: selectedItems,
1156
1136
  pageSelected: pageSelected
1157
- }, tableProps),
1158
- items: items,
1159
- onSelectItem: onSelectItem,
1160
- onSelectItems: onSelectItems,
1137
+ }, tableProps)
1138
+ // items={initialItems} // TODO: fix useItems if using this
1139
+ ,
1161
1140
  onItemsChange: onItemsChange,
1162
1141
  selectedCount: selectedCount,
1163
1142
  onClearSelected: onClearSelected,
1164
- uploadButton: finalUploadButton,
1165
1143
  types: types
1166
1144
  }, props)), multiple && !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1167
1145
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
package/lib/index.js CHANGED
@@ -11,10 +11,12 @@ var hooks = require('@panneau/core/hooks');
11
11
  var Button = require('@panneau/element-button');
12
12
  var Form = require('@panneau/element-form');
13
13
  var FormStatus = require('@panneau/element-form-status');
14
+ var ImageDisplay = require('@panneau/display-image');
14
15
  var MediaPlayer = require('@panneau/element-media-player');
15
- var MediaPreview = require('@panneau/element-media-preview');
16
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
16
17
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
17
18
  var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
19
+ var uniqBy = require('lodash/uniqBy');
18
20
  var core = require('@panneau/core');
19
21
  var Buttons = require('@panneau/element-buttons');
20
22
  var Grid = require('@panneau/element-grid');
@@ -22,10 +24,8 @@ var Icon = require('@panneau/element-icon');
22
24
  var MediaCard = require('@panneau/element-media-card');
23
25
  var Pagination = require('@panneau/element-pagination');
24
26
  var Table = require('@panneau/element-table');
25
- var UploadField = require('@panneau/field-upload');
26
27
  var Filters = require('@panneau/filter-filters');
27
28
  var data = require('@panneau/data');
28
- var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
29
29
 
30
30
  /* eslint-disable react/jsx-props-no-spreading */
31
31
  var MediasApiContext = /*#__PURE__*/React.createContext(null);
@@ -217,22 +217,18 @@ function MediaFrame(_ref) {
217
217
  setShowPlayer(!showPlayer);
218
218
  }, [showPlayer, setShowPlayer]);
219
219
  return /*#__PURE__*/React.createElement("div", {
220
- className: classNames([className, 'position-relative', _defineProperty({}, className, className != null)])
220
+ className: classNames([styles.mediaFrame, 'position-relative', 'd-flex', 'flex-grow-1', 'w-100', 'mw-100', _defineProperty({}, className, className != null)])
221
221
  }, showPlayer ? /*#__PURE__*/React.createElement(MediaPlayer, {
222
222
  value: value,
223
223
  width: "100%"
224
- }) : /*#__PURE__*/React.createElement(MediaPreview, {
224
+ }) : /*#__PURE__*/React.createElement(ImageDisplay, {
225
+ className: "w-100",
225
226
  value: value,
226
- width: "100%"
227
- }, /*#__PURE__*/React.createElement("div", {
228
- className: styles.playButton
229
- }, !showPlayer && (type === 'video' || type === 'embed' || type === 'audio') ? /*#__PURE__*/React.createElement(Button, {
230
- className: "rounded-circle",
231
- theme: "secondary",
232
- onClick: onClick,
233
- icon: "play-fill",
234
- size: "lg"
235
- }) : null)));
227
+ maxWidth: "100%",
228
+ maxHeight: "100%",
229
+ withoutZoom: true,
230
+ onClick: type === 'video' || type === 'audio' ? onClick : null
231
+ }));
236
232
  }
237
233
  MediaFrame.propTypes = propTypes$8;
238
234
  MediaFrame.defaultProps = defaultProps$8;
@@ -270,6 +266,7 @@ var defaultFields = [{
270
266
  }]
271
267
  }),
272
268
  isList: true,
269
+ hideWithoutValue: true,
273
270
  fields: [{
274
271
  id: 'user',
275
272
  label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
@@ -311,6 +308,7 @@ var defaultFields = [{
311
308
  }]
312
309
  }),
313
310
  isList: true,
311
+ hideWithoutValue: true,
314
312
  fields: [{
315
313
  id: 'format',
316
314
  label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
@@ -698,6 +696,10 @@ var defaultColumns = [{
698
696
  ];
699
697
 
700
698
  var defaultFilters = [{
699
+ id: 'search',
700
+ component: 'search',
701
+ name: 'search'
702
+ }, {
701
703
  id: 'types',
702
704
  component: 'select',
703
705
  name: 'types',
@@ -746,7 +748,8 @@ var defaultFilters = [{
746
748
  value: 'document'
747
749
  }],
748
750
  multiple: true
749
- },
751
+ }
752
+
750
753
  // {
751
754
  // id: 'author',
752
755
  // component: 'select',
@@ -765,20 +768,14 @@ var defaultFilters = [{
765
768
  // itemLabelPath: 'label',
766
769
  // multiple: true,
767
770
  // },
768
- {
769
- id: 'search',
770
- component: 'search',
771
- name: 'search'
772
- }];
771
+ ];
773
772
 
774
773
  var _excluded$5 = ["page", "count"],
775
774
  _excluded2 = ["types"];
776
775
  var propTypes$5 = {
777
776
  items: core.PropTypes.medias,
777
+ extraItems: core.PropTypes.medias,
778
778
  types: PropTypes.arrayOf(PropTypes.string),
779
- uploadButton: PropTypes.shape({
780
- value: PropTypes.oneOfType([core.PropTypes.medias, core.PropTypes.media])
781
- }),
782
779
  buttons: core.PropTypes.buttons,
783
780
  filters: core.PropTypes.filters,
784
781
  columns: core.PropTypes.tableColumns,
@@ -789,18 +786,17 @@ var propTypes$5 = {
789
786
  layouts: PropTypes.arrayOf(PropTypes.shape({})),
790
787
  theme: PropTypes.string,
791
788
  tableProps: PropTypes.bool,
792
- onSelectItem: PropTypes.func,
793
- onSelectItems: PropTypes.func,
794
789
  onItemsChange: PropTypes.func,
795
790
  onLayoutChange: PropTypes.func,
796
791
  selectedCount: PropTypes.number,
797
792
  onClearSelected: PropTypes.func,
798
- className: PropTypes.string
793
+ className: PropTypes.string,
794
+ buttonsClassName: PropTypes.string
799
795
  };
800
796
  var defaultProps$5 = {
801
797
  items: null,
798
+ extraItems: null,
802
799
  types: null,
803
- uploadButton: null,
804
800
  buttons: null,
805
801
  filters: defaultFilters,
806
802
  columns: defaultColumns,
@@ -821,19 +817,18 @@ var defaultProps$5 = {
821
817
  }],
822
818
  theme: null,
823
819
  tableProps: null,
824
- onSelectItem: null,
825
- onSelectItems: null,
826
820
  onItemsChange: null,
827
821
  onLayoutChange: null,
828
822
  selectedCount: null,
829
823
  onClearSelected: null,
830
- className: null
824
+ className: null,
825
+ buttonsClassName: null
831
826
  };
832
827
  function MediasBrowser(_ref) {
833
828
  var initialItems = _ref.items,
829
+ extraItems = _ref.extraItems,
834
830
  types = _ref.types,
835
831
  baseUrl = _ref.baseUrl,
836
- uploadButton = _ref.uploadButton,
837
832
  buttons = _ref.buttons,
838
833
  filters = _ref.filters,
839
834
  columns = _ref.columns,
@@ -843,13 +838,12 @@ function MediasBrowser(_ref) {
843
838
  layouts = _ref.layouts,
844
839
  theme = _ref.theme,
845
840
  tableProps = _ref.tableProps,
846
- onSelectItem = _ref.onSelectItem,
847
- onSelectItems = _ref.onSelectItems,
848
841
  onItemsChange = _ref.onItemsChange,
849
842
  onLayoutChange = _ref.onLayoutChange,
850
843
  selectedCount = _ref.selectedCount,
851
844
  onClearSelected = _ref.onClearSelected,
852
- className = _ref.className;
845
+ className = _ref.className,
846
+ buttonsClassName = _ref.buttonsClassName;
853
847
  var _useState = React.useState(initialItems || null),
854
848
  _useState2 = _slicedToArray(_useState, 1),
855
849
  baseItems = _useState2[0];
@@ -903,7 +897,7 @@ function MediasBrowser(_ref) {
903
897
  onItemsChange(items);
904
898
  }
905
899
  }, [items, onItemsChange]);
906
- var _useState3 = React.useState(initialLayout || 'grid'),
900
+ var _useState3 = React.useState(initialLayout || 'table'),
907
901
  _useState4 = _slicedToArray(_useState3, 2),
908
902
  layout = _useState4[0],
909
903
  setLayout = _useState4[1];
@@ -927,11 +921,6 @@ function MediasBrowser(_ref) {
927
921
  var onCloseMedia = React.useCallback(function () {
928
922
  setCurrentMedia(null);
929
923
  }, [setCurrentMedia]);
930
- var onChangeMedia = React.useCallback(function () {
931
- var media = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
932
- onSelectItems(media);
933
- onQueryReset();
934
- }, [setCurrentMedia, onQueryReset, onSelectItems]);
935
924
  var onSaveMedia = React.useCallback(function () {
936
925
  setCurrentMedia(null);
937
926
  onQueryReset();
@@ -963,13 +952,20 @@ function MediasBrowser(_ref) {
963
952
  }
964
953
  return filters;
965
954
  }, [filters, types]);
955
+ var finalItems = React.useMemo(function () {
956
+ if (page === 1 && extraItems !== null) {
957
+ return uniqBy([].concat(_toConsumableArray(extraItems), _toConsumableArray(items || [])), function (it) {
958
+ return it === null || it === void 0 ? void 0 : it.id;
959
+ });
960
+ }
961
+ return items;
962
+ }, [items, page, extraItems]);
966
963
  return /*#__PURE__*/React.createElement("div", {
967
964
  className: classNames([styles.container, className])
968
965
  }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
969
966
  className: "mt-2 mb-4"
970
967
  }, /*#__PURE__*/React.createElement(Button, {
971
968
  theme: "primary",
972
- outline: true,
973
969
  onClick: onCloseMedia,
974
970
  icon: "arrow-left"
975
971
  }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
@@ -984,29 +980,22 @@ function MediasBrowser(_ref) {
984
980
  onChange: setCurrentMedia,
985
981
  onSave: onSaveMedia,
986
982
  onClose: onCloseMedia
987
- })) : /*#__PURE__*/React.createElement(React.Fragment, null, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
988
- items: buttons,
989
- className: "mb-2"
990
- }) : null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
991
- className: "mt-0 pt-0",
983
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
992
984
  value: query,
993
985
  clearValue: types !== null ? queryWithoutTypes : null,
994
986
  filters: finalFilters,
995
987
  onChange: onQueryChange,
996
988
  onReset: onQueryReset,
997
989
  theme: theme
998
- }, uploadButton !== null ? /*#__PURE__*/React.createElement(UploadField, Object.assign({
999
- className: "w-auto mb-2",
1000
- onChange: onChangeMedia,
1001
- withButton: true,
1002
- withoutMedia: true
1003
- }, uploadButton)) : null) : null, filters === null && uploadButton !== null ? /*#__PURE__*/React.createElement("div", {
990
+ }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
991
+ items: buttons,
992
+ className: buttonsClassName
993
+ }) : null) : null, filters === null && buttons !== null ? /*#__PURE__*/React.createElement("div", {
1004
994
  className: "mt-2 mb-2"
1005
- }, /*#__PURE__*/React.createElement(UploadField, Object.assign({
1006
- onChange: onChangeMedia,
1007
- withButton: true,
1008
- withoutMedia: true
1009
- }, uploadButton))) : null, /*#__PURE__*/React.createElement("div", {
995
+ }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
996
+ items: buttons,
997
+ className: buttonsClassName
998
+ }) : null) : null, /*#__PURE__*/React.createElement("div", {
1010
999
  className: classNames(['d-flex', 'mt-1', 'mb-3', {
1011
1000
  'justify-content-between': hasLayouts,
1012
1001
  'justify-content-end': !hasLayouts
@@ -1031,26 +1020,29 @@ function MediasBrowser(_ref) {
1031
1020
  componentProps: {
1032
1021
  className: 'd-flex w-100',
1033
1022
  cardClassName: 'flex-grow-1',
1034
- vertical: true
1035
- }
1036
- }, tableProps, {
1037
- items: items || [],
1038
- loading: loading,
1039
- onSelectItem: onSelectItem !== null ? onSelectItem : function (it) {
1023
+ vertical: true,
1024
+ onClickDescription: function onClickDescription(it) {
1025
+ onOpenMedia(it);
1026
+ }
1027
+ },
1028
+ onSelectItem: function onSelectItem(it) {
1040
1029
  return onOpenMedia(it);
1041
1030
  }
1031
+ }, tableProps, {
1032
+ items: finalItems || [],
1033
+ loading: loading
1042
1034
  })) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, Object.assign({
1043
1035
  theme: theme,
1044
1036
  columns: columns,
1045
1037
  displayPlaceholder: /*#__PURE__*/React.createElement("span", {
1046
1038
  className: "text-secondary text-opacity-75"
1047
- }, "\u2014")
1039
+ }, "\u2014"),
1040
+ onSelectItem: function onSelectItem(it) {
1041
+ return onOpenMedia(it);
1042
+ }
1048
1043
  }, tableProps, {
1049
- items: items,
1044
+ items: finalItems,
1050
1045
  loading: loading,
1051
- onSelectItem: onSelectItem !== null ? onSelectItem : function (it) {
1052
- return onOpenMedia(it);
1053
- },
1054
1046
  actionsProps: {
1055
1047
  getEditPropsFromItem: function getEditPropsFromItem(it) {
1056
1048
  return {
@@ -1068,13 +1060,12 @@ function MediasBrowser(_ref) {
1068
1060
  MediasBrowser.propTypes = propTypes$5;
1069
1061
  MediasBrowser.defaultProps = defaultProps$5;
1070
1062
 
1071
- var _excluded$4 = ["items", "value", "types", "uploadButton", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1063
+ var _excluded$4 = ["items", "value", "types", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1072
1064
  var propTypes$4 = {
1073
1065
  // eslint-disable-next-line react/forbid-prop-types
1074
1066
  items: PropTypes.arrayOf(PropTypes.shape({})),
1075
1067
  value: PropTypes.arrayOf(PropTypes.shape({})),
1076
1068
  types: PropTypes.arrayOf(PropTypes.string),
1077
- uploadButton: PropTypes.shape({}),
1078
1069
  onChange: PropTypes.func.isRequired,
1079
1070
  onConfirm: PropTypes.func.isRequired,
1080
1071
  onClose: PropTypes.func,
@@ -1089,7 +1080,6 @@ var defaultProps$4 = {
1089
1080
  items: null,
1090
1081
  value: null,
1091
1082
  types: null,
1092
- uploadButton: null,
1093
1083
  onClose: null,
1094
1084
  multiple: false,
1095
1085
  withoutButtons: false,
@@ -1100,7 +1090,6 @@ function MediasPicker(_ref) {
1100
1090
  var initialItems = _ref.items,
1101
1091
  initialSelectedItems = _ref.value,
1102
1092
  types = _ref.types,
1103
- uploadButton = _ref.uploadButton,
1104
1093
  onChange = _ref.onChange,
1105
1094
  onConfirm = _ref.onConfirm,
1106
1095
  onClose = _ref.onClose,
@@ -1109,61 +1098,50 @@ function MediasPicker(_ref) {
1109
1098
  tableProps = _ref.tableProps,
1110
1099
  className = _ref.className,
1111
1100
  props = _objectWithoutProperties(_ref, _excluded$4);
1101
+ // For selection only
1112
1102
  var _useState = React.useState(initialItems),
1113
1103
  _useState2 = _slicedToArray(_useState, 2),
1114
- items = _useState2[0],
1104
+ currentItems = _useState2[0],
1115
1105
  setItems = _useState2[1];
1116
1106
  var onItemsChange = React.useCallback(function (pageItems) {
1117
1107
  setItems(pageItems);
1118
1108
  }, [setItems]);
1119
- var disabled = initialItems === null || initialItems.length < 1;
1120
1109
  var _useMediasForm = useMediasForm(),
1121
1110
  currentMedia = _useMediasForm.media;
1122
1111
  var _useItemSelection = hooks.useItemSelection({
1123
- items: items,
1112
+ currentItems: currentItems,
1124
1113
  selectedItems: initialSelectedItems,
1125
1114
  onSelectionChange: onChange,
1126
1115
  multipleSelection: multiple
1127
1116
  }),
1128
1117
  onSelectItem = _useItemSelection.onSelectItem,
1129
- onSelectItems = _useItemSelection.onSelectItems,
1130
1118
  onSelectPage = _useItemSelection.onSelectPage,
1131
1119
  onClearSelected = _useItemSelection.onClearSelected,
1132
1120
  pageSelected = _useItemSelection.pageSelected,
1133
1121
  selectedCount = _useItemSelection.selectedCount,
1134
1122
  selectedItems = _useItemSelection.selectedItems;
1123
+ var disabled = currentItems === null || currentItems.length < 1;
1135
1124
  var onConfirmSelection = React.useCallback(function () {
1136
1125
  if (onConfirm !== null) {
1137
1126
  onConfirm(selectedItems);
1138
1127
  }
1139
1128
  }, [selectedItems, onConfirm]);
1140
- var finalUploadButton = React.useMemo(function () {
1141
- return _objectSpread(_objectSpread(_objectSpread({}, uploadButton || null), types !== null ? {
1142
- types: types
1143
- } : null), {}, {
1144
- allowMultipleUploads: multiple,
1145
- maxNumberOfFiles: multiple ? 10 : 0,
1146
- value: selectedItems
1147
- });
1148
- }, [uploadButton, selectedItems, multiple]);
1149
1129
  return /*#__PURE__*/React.createElement("div", {
1150
1130
  className: className
1151
1131
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
1152
1132
  tableProps: _objectSpread({
1153
- selectable: multiple,
1133
+ selectable: true,
1154
1134
  multipleSelection: multiple,
1155
1135
  onSelectItem: onSelectItem,
1156
1136
  onSelectPage: onSelectPage,
1157
1137
  selectedItems: selectedItems,
1158
1138
  pageSelected: pageSelected
1159
- }, tableProps),
1160
- items: items,
1161
- onSelectItem: onSelectItem,
1162
- onSelectItems: onSelectItems,
1139
+ }, tableProps)
1140
+ // items={initialItems} // TODO: fix useItems if using this
1141
+ ,
1163
1142
  onItemsChange: onItemsChange,
1164
1143
  selectedCount: selectedCount,
1165
1144
  onClearSelected: onClearSelected,
1166
- uploadButton: finalUploadButton,
1167
1145
  types: types
1168
1146
  }, props)), multiple && !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1169
1147
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/medias",
3
- "version": "3.0.170",
3
+ "version": "3.0.172",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -48,19 +48,18 @@
48
48
  "@babel/runtime": "^7.12.5",
49
49
  "@panneau/core": "^3.0.169",
50
50
  "@panneau/data": "^3.0.169",
51
+ "@panneau/display-image": "^3.0.172",
51
52
  "@panneau/element-button": "^3.0.169",
52
53
  "@panneau/element-buttons": "^3.0.169",
53
54
  "@panneau/element-form": "^3.0.169",
54
55
  "@panneau/element-form-status": "^3.0.169",
55
- "@panneau/element-grid": "^3.0.169",
56
+ "@panneau/element-grid": "^3.0.172",
56
57
  "@panneau/element-icon": "^3.0.169",
57
- "@panneau/element-media-card": "^3.0.169",
58
- "@panneau/element-media-player": "^3.0.169",
59
- "@panneau/element-media-preview": "^3.0.169",
58
+ "@panneau/element-media-card": "^3.0.172",
59
+ "@panneau/element-media-player": "^3.0.172",
60
60
  "@panneau/element-pagination": "^3.0.169",
61
61
  "@panneau/element-table": "^3.0.170",
62
- "@panneau/field-upload": "^3.0.170",
63
- "@panneau/filter-filters": "^3.0.169",
62
+ "@panneau/filter-filters": "^3.0.171",
64
63
  "classnames": "^2.5.1",
65
64
  "lodash": "^4.17.21",
66
65
  "prop-types": "^15.7.2",
@@ -69,5 +68,5 @@
69
68
  "publishConfig": {
70
69
  "access": "public"
71
70
  },
72
- "gitHead": "45ef2fa2498fa7a3cd2bcea9a76ac0410d7e3d7f"
71
+ "gitHead": "74ada3ded1a27ab2d7008d67790d8431f57c5b0a"
73
72
  }