@panneau/medias 3.0.179 → 3.0.182

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 +90 -85
  2. package/lib/index.js +89 -84
  3. package/package.json +17 -16
package/es/index.js CHANGED
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
5
5
  import React, { useContext, useMemo, useCallback, useState, useEffect } from 'react';
6
6
  import { FormattedMessage } from 'react-intl';
7
7
  import { useFieldComponent, usePanneauResource } from '@panneau/core/contexts';
8
- import { useForm, useQuery, useItemSelection } from '@panneau/core/hooks';
8
+ import { useForm, useQuery } 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';
@@ -22,6 +22,7 @@ import Icon from '@panneau/element-icon';
22
22
  import MediaCard from '@panneau/element-media-card';
23
23
  import Pagination from '@panneau/element-pagination';
24
24
  import Table from '@panneau/element-table';
25
+ import UploadField from '@panneau/field-upload';
25
26
  import Filters from '@panneau/filter-filters';
26
27
  import { useItemsStore, useData, useApi } from '@panneau/data';
27
28
 
@@ -228,7 +229,6 @@ function MediaFrame(_ref) {
228
229
  value: value,
229
230
  maxWidth: "100%",
230
231
  maxHeight: "100%",
231
- withoutZoom: true,
232
232
  onClick: type === 'video' || type === 'audio' ? onClick : null
233
233
  }));
234
234
  }
@@ -487,9 +487,12 @@ function MediaForm(_ref) {
487
487
  }, /*#__PURE__*/React.createElement("nav", {
488
488
  className: "navbar d-flex w-100 align-items-end justify-content-between border-bottom mb-3"
489
489
  }, /*#__PURE__*/React.createElement("div", {
490
- className: "d-flex align-items-end justify-content-end mb-1"
490
+ className: "d-flex align-items-end justify-content-start mb-1",
491
+ style: {
492
+ maxWidth: '66%'
493
+ }
491
494
  }, /*#__PURE__*/React.createElement("h4", {
492
- className: "d-inline text-break mb-0"
495
+ className: "d-inline text-truncate mb-0"
493
496
  }, name), /*#__PURE__*/React.createElement("span", {
494
497
  className: "mx-2"
495
498
  }, type)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
@@ -514,7 +517,7 @@ function MediaForm(_ref) {
514
517
  })), onSave !== null ? /*#__PURE__*/React.createElement(Button, {
515
518
  className: "mb-1 mt-1",
516
519
  theme: "primary",
517
- icon: changed ? 'check-all' : 'check',
520
+ icon: changed ? 'check' : 'check',
518
521
  iconPosition: "right",
519
522
  onClick: onSubmit,
520
523
  disabled: !changed || updating || deleting
@@ -781,7 +784,6 @@ var defaultFilters = [{
781
784
  }],
782
785
  multiple: true
783
786
  }
784
-
785
787
  // {
786
788
  // id: 'author',
787
789
  // component: 'select',
@@ -808,7 +810,6 @@ var propTypes$5 = {
808
810
  items: PropTypes$1.medias,
809
811
  extraItems: PropTypes$1.medias,
810
812
  types: PropTypes.arrayOf(PropTypes.string),
811
- buttons: PropTypes$1.buttons,
812
813
  filters: PropTypes$1.filters,
813
814
  columns: PropTypes$1.tableColumns,
814
815
  query: PropTypes.shape({}),
@@ -817,15 +818,17 @@ var propTypes$5 = {
817
818
  layout: PropTypes.string,
818
819
  layouts: PropTypes.arrayOf(PropTypes.shape({})),
819
820
  theme: PropTypes.string,
820
- tableProps: PropTypes.bool,
821
821
  onItemsChange: PropTypes.func,
822
822
  onLayoutChange: PropTypes.func,
823
- selectedCount: PropTypes.number,
824
- onClearSelected: PropTypes.func,
823
+ selectable: PropTypes.bool,
824
+ selectedItems: PropTypes.arrayOf(PropTypes.shape({})),
825
+ onSelectionChange: PropTypes.func,
826
+ multipleSelection: PropTypes.bool,
827
+ uppyConfig: PropTypes.shape({}),
825
828
  withTrash: PropTypes.bool,
826
829
  withStickySelection: PropTypes.bool,
830
+ withoutUpload: PropTypes.bool,
827
831
  className: PropTypes.string,
828
- buttonsClassName: PropTypes.string,
829
832
  formChildren: PropTypes.node
830
833
  };
831
834
  var defaultProps$5 = {
@@ -851,15 +854,17 @@ var defaultProps$5 = {
851
854
  })
852
855
  }],
853
856
  theme: null,
854
- tableProps: null,
855
857
  onItemsChange: null,
856
858
  onLayoutChange: null,
857
- selectedCount: null,
858
- onClearSelected: null,
859
+ selectable: null,
860
+ selectedItems: null,
861
+ onSelectionChange: null,
862
+ multipleSelection: false,
863
+ uppyConfig: null,
859
864
  withTrash: false,
860
865
  withStickySelection: false,
866
+ withoutUpload: false,
861
867
  className: null,
862
- buttonsClassName: null,
863
868
  formChildren: null
864
869
  };
865
870
  function MediasBrowser(_ref) {
@@ -867,7 +872,6 @@ function MediasBrowser(_ref) {
867
872
  extraItems = _ref.extraItems,
868
873
  types = _ref.types,
869
874
  baseUrl = _ref.baseUrl,
870
- buttons = _ref.buttons,
871
875
  filters = _ref.filters,
872
876
  columns = _ref.columns,
873
877
  fields = _ref.fields,
@@ -875,15 +879,17 @@ function MediasBrowser(_ref) {
875
879
  initialLayout = _ref.layout,
876
880
  layouts = _ref.layouts,
877
881
  theme = _ref.theme,
878
- tableProps = _ref.tableProps,
879
882
  onItemsChange = _ref.onItemsChange,
880
883
  onLayoutChange = _ref.onLayoutChange,
881
- selectedCount = _ref.selectedCount,
882
- onClearSelected = _ref.onClearSelected,
884
+ selectable = _ref.selectable,
885
+ selectedItems = _ref.selectedItems,
886
+ onSelectionChange = _ref.onSelectionChange,
887
+ multipleSelection = _ref.multipleSelection,
888
+ uppyConfig = _ref.uppyConfig,
883
889
  withTrash = _ref.withTrash,
884
890
  withStickySelection = _ref.withStickySelection,
891
+ withoutUpload = _ref.withoutUpload,
885
892
  className = _ref.className,
886
- buttonsClassName = _ref.buttonsClassName,
887
893
  formChildren = _ref.formChildren;
888
894
  var _useState = useState(initialItems || null),
889
895
  _useState2 = _slicedToArray(_useState, 1),
@@ -998,8 +1004,10 @@ function MediasBrowser(_ref) {
998
1004
  onClickPage: onPageChange,
999
1005
  theme: theme,
1000
1006
  loading: loading && pages !== null,
1001
- selectedCount: selectedCount,
1002
- onClearSelected: onClearSelected,
1007
+ selectable: selectable,
1008
+ selectedItems: selectedItems,
1009
+ onSelectionChange: onSelectionChange,
1010
+ multipleSelection: multipleSelection,
1003
1011
  withPreviousNext: true,
1004
1012
  alwaysShowButtons: true
1005
1013
  });
@@ -1067,7 +1075,7 @@ function MediasBrowser(_ref) {
1067
1075
  return /*#__PURE__*/React.createElement("div", {
1068
1076
  className: className
1069
1077
  }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1070
- className: "mt-2 mb-4"
1078
+ className: "mt-2 mb-0"
1071
1079
  }, /*#__PURE__*/React.createElement(Button, {
1072
1080
  theme: "primary",
1073
1081
  onClick: onCloseMedia,
@@ -1085,29 +1093,28 @@ function MediasBrowser(_ref) {
1085
1093
  onSave: onSaveMedia,
1086
1094
  onClose: onCloseMedia,
1087
1095
  withTrash: withTrash
1088
- }, formChildren)) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1096
+ }, formChildren)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1097
+ className: classNames(['d-flex', 'justify-content-between'])
1098
+ }, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1089
1099
  value: query,
1090
1100
  clearValue: types !== null ? queryWithoutTypes : null,
1091
1101
  filters: finalFilters,
1092
1102
  onChange: onQueryChange,
1093
1103
  onReset: onQueryReset,
1094
1104
  theme: theme
1095
- }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
1096
- items: buttons,
1097
- className: buttonsClassName
1098
- }) : null) : null, filters === null && buttons !== null ? /*#__PURE__*/React.createElement("div", {
1099
- className: "mt-2 mb-2"
1100
- }, /*#__PURE__*/React.createElement(Buttons, {
1101
- items: buttons,
1102
- className: buttonsClassName
1103
- })) : null, /*#__PURE__*/React.createElement("div", {
1105
+ }) : null, !withoutUpload ? /*#__PURE__*/React.createElement(UploadField, {
1106
+ className: "ms-auto w-auto text-nowrap mt-2",
1107
+ withButton: true,
1108
+ withoutMedia: true,
1109
+ uppyConfig: uppyConfig
1110
+ }) : null), /*#__PURE__*/React.createElement("div", {
1104
1111
  className: classNames(['d-flex', 'mt-1', 'mb-3', {
1105
1112
  'justify-content-between': hasLayouts,
1106
1113
  'justify-content-end': !hasLayouts
1107
1114
  }])
1108
1115
  }, hasLayouts ? /*#__PURE__*/React.createElement(Buttons, {
1109
1116
  size: "sm",
1110
- theme: "primary",
1117
+ theme: "secondary",
1111
1118
  outline: true,
1112
1119
  items: (layouts || []).map(function (lay) {
1113
1120
  return _objectSpread(_objectSpread({}, lay), {}, {
@@ -1118,7 +1125,7 @@ function MediasBrowser(_ref) {
1118
1125
  className: 'px-3'
1119
1126
  });
1120
1127
  })
1121
- }) : null, pagination), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({
1128
+ }) : null, pagination), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, {
1122
1129
  size: "small",
1123
1130
  theme: theme,
1124
1131
  component: MediaCard,
@@ -1130,22 +1137,22 @@ function MediasBrowser(_ref) {
1130
1137
  onOpenMedia(it);
1131
1138
  }
1132
1139
  },
1133
- onSelectItem: function onSelectItem(it) {
1134
- return onOpenMedia(it);
1135
- }
1136
- }, tableProps, {
1140
+ selectable: selectable,
1141
+ selectedItems: selectedItems,
1142
+ onSelectionChange: onSelectionChange,
1143
+ multipleSelection: multipleSelection,
1137
1144
  items: finalItems || [],
1138
1145
  loading: loading
1139
- })) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, Object.assign({
1146
+ }) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, {
1140
1147
  theme: theme,
1141
1148
  columns: finalColumns,
1142
1149
  displayPlaceholder: /*#__PURE__*/React.createElement("span", {
1143
1150
  className: "text-secondary text-opacity-75"
1144
1151
  }, "\u2014"),
1145
- onSelectItem: function onSelectItem(it) {
1146
- return onOpenMedia(it);
1147
- }
1148
- }, tableProps, {
1152
+ selectable: selectable,
1153
+ selectedItems: selectedItems,
1154
+ onSelectionChange: onSelectionChange,
1155
+ multipleSelection: multipleSelection,
1149
1156
  items: finalItems,
1150
1157
  loading: loading,
1151
1158
  actionsProps: {
@@ -1171,49 +1178,45 @@ function MediasBrowser(_ref) {
1171
1178
  };
1172
1179
  }
1173
1180
  }
1174
- })) : null, /*#__PURE__*/React.createElement("div", {
1181
+ }) : null, /*#__PURE__*/React.createElement("div", {
1175
1182
  className: classNames(['d-flex', 'mt-3', 'mb-1', 'justify-content-end'])
1176
1183
  }, pagination)));
1177
1184
  }
1178
1185
  MediasBrowser.propTypes = propTypes$5;
1179
1186
  MediasBrowser.defaultProps = defaultProps$5;
1180
1187
 
1181
- var _excluded$4 = ["items", "value", "types", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1188
+ var _excluded$4 = ["items", "value", "onSelectionChange", "multipleSelection", "types", "onChange", "onClose", "withoutButtons", "className"];
1182
1189
  var propTypes$4 = {
1183
1190
  // eslint-disable-next-line react/forbid-prop-types
1184
1191
  items: PropTypes.arrayOf(PropTypes.shape({})),
1185
1192
  value: PropTypes.arrayOf(PropTypes.shape({})),
1193
+ onSelectionChange: PropTypes.func,
1194
+ multipleSelection: PropTypes.bool,
1186
1195
  types: PropTypes.arrayOf(PropTypes.string),
1187
1196
  onChange: PropTypes.func.isRequired,
1188
- onConfirm: PropTypes.func.isRequired,
1189
1197
  onClose: PropTypes.func,
1190
- multiple: PropTypes.bool,
1191
1198
  withoutButtons: PropTypes.bool,
1192
- tableProps: PropTypes.shape({
1193
- theme: PropTypes.string
1194
- }),
1195
1199
  className: PropTypes.string
1196
1200
  };
1197
1201
  var defaultProps$4 = {
1198
1202
  items: null,
1199
1203
  value: null,
1204
+ onSelectionChange: null,
1205
+ multipleSelection: false,
1200
1206
  types: null,
1201
1207
  onClose: null,
1202
- multiple: false,
1203
1208
  withoutButtons: false,
1204
- tableProps: null,
1205
1209
  className: null
1206
1210
  };
1207
1211
  function MediasPicker(_ref) {
1208
1212
  var initialItems = _ref.items,
1209
1213
  initialSelectedItems = _ref.value,
1214
+ parentOnSelectionChange = _ref.onSelectionChange,
1215
+ multipleSelection = _ref.multipleSelection,
1210
1216
  types = _ref.types,
1211
1217
  onChange = _ref.onChange,
1212
- onConfirm = _ref.onConfirm,
1213
1218
  onClose = _ref.onClose,
1214
- multiple = _ref.multiple,
1215
1219
  withoutButtons = _ref.withoutButtons,
1216
- tableProps = _ref.tableProps,
1217
1220
  className = _ref.className,
1218
1221
  props = _objectWithoutProperties(_ref, _excluded$4);
1219
1222
  var _useMediasForm = useMediasForm(),
@@ -1228,42 +1231,44 @@ function MediasPicker(_ref) {
1228
1231
  var onItemsChange = useCallback(function (newPageItems) {
1229
1232
  setItems(newPageItems);
1230
1233
  }, [setItems]);
1231
- var _useItemSelection = useItemSelection({
1232
- items: pageItems,
1233
- selectedItems: initialSelectedItems,
1234
- onSelectionChange: onChange,
1235
- multipleSelection: multiple
1236
- }),
1237
- onSelectItem = _useItemSelection.onSelectItem,
1238
- onSelectPage = _useItemSelection.onSelectPage,
1239
- onClearSelected = _useItemSelection.onClearSelected,
1240
- pageSelected = _useItemSelection.pageSelected,
1241
- selectedCount = _useItemSelection.selectedCount,
1242
- selectedItems = _useItemSelection.selectedItems;
1234
+ var _useState3 = useState(initialSelectedItems || null),
1235
+ _useState4 = _slicedToArray(_useState3, 2),
1236
+ selectedItems = _useState4[0],
1237
+ setSelectedItems = _useState4[1];
1238
+ var onSelectionChange = useCallback(function (newSelection) {
1239
+ setSelectedItems(newSelection);
1240
+ }, [setSelectedItems]);
1241
+ // Sync from the top
1242
+ useEffect(function () {
1243
+ setSelectedItems(initialSelectedItems);
1244
+ }, [initialSelectedItems, setSelectedItems]);
1245
+ useEffect(function () {
1246
+ if (parentOnSelectionChange !== null) {
1247
+ parentOnSelectionChange(selectedItems);
1248
+ }
1249
+ }, [selectedItems, parentOnSelectionChange]);
1243
1250
  var onConfirmSelection = useCallback(function () {
1244
- if (onConfirm !== null) {
1245
- onConfirm(selectedItems);
1251
+ if (onChange !== null) {
1252
+ onChange(selectedItems);
1246
1253
  }
1247
- }, [selectedItems, onConfirm]);
1254
+ }, [selectedItems, onChange]);
1248
1255
  return /*#__PURE__*/React.createElement("div", {
1249
1256
  className: className
1250
1257
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
1251
- tableProps: _objectSpread({
1252
- selectable: true,
1253
- multipleSelection: multiple,
1254
- onSelectItem: onSelectItem,
1255
- onSelectPage: onSelectPage,
1256
- selectedItems: selectedItems,
1257
- pageSelected: pageSelected
1258
- }, tableProps)
1259
- // items={initialItems} // TODO: fix useItems if actually using this
1258
+ items: initialItems // TODO: fix useItems if actually using this
1260
1259
  ,
1260
+ selectable: true,
1261
+ selectedItems: selectedItems,
1262
+ onSelectionChange: onSelectionChange,
1263
+ multipleSelection: multipleSelection,
1261
1264
  onItemsChange: onItemsChange,
1262
- selectedCount: selectedCount,
1263
- onClearSelected: onClearSelected,
1264
- types: types,
1265
- extraItems: !multiple && initialSelectedItems !== null ? [initialSelectedItems] : initialSelectedItems
1266
- }, props)), multiple && !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1265
+ types: types
1266
+ // extraItems={
1267
+ // !multiple && initialSelectedItems !== null
1268
+ // ? [initialSelectedItems]
1269
+ // : initialSelectedItems
1270
+ // }
1271
+ }, props)), !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1267
1272
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
1268
1273
  }, /*#__PURE__*/React.createElement("div", {
1269
1274
  className: "btn-group"
package/lib/index.js CHANGED
@@ -24,6 +24,7 @@ var Icon = require('@panneau/element-icon');
24
24
  var MediaCard = require('@panneau/element-media-card');
25
25
  var Pagination = require('@panneau/element-pagination');
26
26
  var Table = require('@panneau/element-table');
27
+ var UploadField = require('@panneau/field-upload');
27
28
  var Filters = require('@panneau/filter-filters');
28
29
  var data = require('@panneau/data');
29
30
 
@@ -230,7 +231,6 @@ function MediaFrame(_ref) {
230
231
  value: value,
231
232
  maxWidth: "100%",
232
233
  maxHeight: "100%",
233
- withoutZoom: true,
234
234
  onClick: type === 'video' || type === 'audio' ? onClick : null
235
235
  }));
236
236
  }
@@ -489,9 +489,12 @@ function MediaForm(_ref) {
489
489
  }, /*#__PURE__*/React.createElement("nav", {
490
490
  className: "navbar d-flex w-100 align-items-end justify-content-between border-bottom mb-3"
491
491
  }, /*#__PURE__*/React.createElement("div", {
492
- className: "d-flex align-items-end justify-content-end mb-1"
492
+ className: "d-flex align-items-end justify-content-start mb-1",
493
+ style: {
494
+ maxWidth: '66%'
495
+ }
493
496
  }, /*#__PURE__*/React.createElement("h4", {
494
- className: "d-inline text-break mb-0"
497
+ className: "d-inline text-truncate mb-0"
495
498
  }, name), /*#__PURE__*/React.createElement("span", {
496
499
  className: "mx-2"
497
500
  }, type)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
@@ -516,7 +519,7 @@ function MediaForm(_ref) {
516
519
  })), onSave !== null ? /*#__PURE__*/React.createElement(Button, {
517
520
  className: "mb-1 mt-1",
518
521
  theme: "primary",
519
- icon: changed ? 'check-all' : 'check',
522
+ icon: changed ? 'check' : 'check',
520
523
  iconPosition: "right",
521
524
  onClick: onSubmit,
522
525
  disabled: !changed || updating || deleting
@@ -783,7 +786,6 @@ var defaultFilters = [{
783
786
  }],
784
787
  multiple: true
785
788
  }
786
-
787
789
  // {
788
790
  // id: 'author',
789
791
  // component: 'select',
@@ -810,7 +812,6 @@ var propTypes$5 = {
810
812
  items: core.PropTypes.medias,
811
813
  extraItems: core.PropTypes.medias,
812
814
  types: PropTypes.arrayOf(PropTypes.string),
813
- buttons: core.PropTypes.buttons,
814
815
  filters: core.PropTypes.filters,
815
816
  columns: core.PropTypes.tableColumns,
816
817
  query: PropTypes.shape({}),
@@ -819,15 +820,17 @@ var propTypes$5 = {
819
820
  layout: PropTypes.string,
820
821
  layouts: PropTypes.arrayOf(PropTypes.shape({})),
821
822
  theme: PropTypes.string,
822
- tableProps: PropTypes.bool,
823
823
  onItemsChange: PropTypes.func,
824
824
  onLayoutChange: PropTypes.func,
825
- selectedCount: PropTypes.number,
826
- onClearSelected: PropTypes.func,
825
+ selectable: PropTypes.bool,
826
+ selectedItems: PropTypes.arrayOf(PropTypes.shape({})),
827
+ onSelectionChange: PropTypes.func,
828
+ multipleSelection: PropTypes.bool,
829
+ uppyConfig: PropTypes.shape({}),
827
830
  withTrash: PropTypes.bool,
828
831
  withStickySelection: PropTypes.bool,
832
+ withoutUpload: PropTypes.bool,
829
833
  className: PropTypes.string,
830
- buttonsClassName: PropTypes.string,
831
834
  formChildren: PropTypes.node
832
835
  };
833
836
  var defaultProps$5 = {
@@ -853,15 +856,17 @@ var defaultProps$5 = {
853
856
  })
854
857
  }],
855
858
  theme: null,
856
- tableProps: null,
857
859
  onItemsChange: null,
858
860
  onLayoutChange: null,
859
- selectedCount: null,
860
- onClearSelected: null,
861
+ selectable: null,
862
+ selectedItems: null,
863
+ onSelectionChange: null,
864
+ multipleSelection: false,
865
+ uppyConfig: null,
861
866
  withTrash: false,
862
867
  withStickySelection: false,
868
+ withoutUpload: false,
863
869
  className: null,
864
- buttonsClassName: null,
865
870
  formChildren: null
866
871
  };
867
872
  function MediasBrowser(_ref) {
@@ -869,7 +874,6 @@ function MediasBrowser(_ref) {
869
874
  extraItems = _ref.extraItems,
870
875
  types = _ref.types,
871
876
  baseUrl = _ref.baseUrl,
872
- buttons = _ref.buttons,
873
877
  filters = _ref.filters,
874
878
  columns = _ref.columns,
875
879
  fields = _ref.fields,
@@ -877,15 +881,17 @@ function MediasBrowser(_ref) {
877
881
  initialLayout = _ref.layout,
878
882
  layouts = _ref.layouts,
879
883
  theme = _ref.theme,
880
- tableProps = _ref.tableProps,
881
884
  onItemsChange = _ref.onItemsChange,
882
885
  onLayoutChange = _ref.onLayoutChange,
883
- selectedCount = _ref.selectedCount,
884
- onClearSelected = _ref.onClearSelected,
886
+ selectable = _ref.selectable,
887
+ selectedItems = _ref.selectedItems,
888
+ onSelectionChange = _ref.onSelectionChange,
889
+ multipleSelection = _ref.multipleSelection,
890
+ uppyConfig = _ref.uppyConfig,
885
891
  withTrash = _ref.withTrash,
886
892
  withStickySelection = _ref.withStickySelection,
893
+ withoutUpload = _ref.withoutUpload,
887
894
  className = _ref.className,
888
- buttonsClassName = _ref.buttonsClassName,
889
895
  formChildren = _ref.formChildren;
890
896
  var _useState = React.useState(initialItems || null),
891
897
  _useState2 = _slicedToArray(_useState, 1),
@@ -1000,8 +1006,10 @@ function MediasBrowser(_ref) {
1000
1006
  onClickPage: onPageChange,
1001
1007
  theme: theme,
1002
1008
  loading: loading && pages !== null,
1003
- selectedCount: selectedCount,
1004
- onClearSelected: onClearSelected,
1009
+ selectable: selectable,
1010
+ selectedItems: selectedItems,
1011
+ onSelectionChange: onSelectionChange,
1012
+ multipleSelection: multipleSelection,
1005
1013
  withPreviousNext: true,
1006
1014
  alwaysShowButtons: true
1007
1015
  });
@@ -1069,7 +1077,7 @@ function MediasBrowser(_ref) {
1069
1077
  return /*#__PURE__*/React.createElement("div", {
1070
1078
  className: className
1071
1079
  }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1072
- className: "mt-2 mb-4"
1080
+ className: "mt-2 mb-0"
1073
1081
  }, /*#__PURE__*/React.createElement(Button, {
1074
1082
  theme: "primary",
1075
1083
  onClick: onCloseMedia,
@@ -1087,29 +1095,28 @@ function MediasBrowser(_ref) {
1087
1095
  onSave: onSaveMedia,
1088
1096
  onClose: onCloseMedia,
1089
1097
  withTrash: withTrash
1090
- }, formChildren)) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1098
+ }, formChildren)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1099
+ className: classNames(['d-flex', 'justify-content-between'])
1100
+ }, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1091
1101
  value: query,
1092
1102
  clearValue: types !== null ? queryWithoutTypes : null,
1093
1103
  filters: finalFilters,
1094
1104
  onChange: onQueryChange,
1095
1105
  onReset: onQueryReset,
1096
1106
  theme: theme
1097
- }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
1098
- items: buttons,
1099
- className: buttonsClassName
1100
- }) : null) : null, filters === null && buttons !== null ? /*#__PURE__*/React.createElement("div", {
1101
- className: "mt-2 mb-2"
1102
- }, /*#__PURE__*/React.createElement(Buttons, {
1103
- items: buttons,
1104
- className: buttonsClassName
1105
- })) : null, /*#__PURE__*/React.createElement("div", {
1107
+ }) : null, !withoutUpload ? /*#__PURE__*/React.createElement(UploadField, {
1108
+ className: "ms-auto w-auto text-nowrap mt-2",
1109
+ withButton: true,
1110
+ withoutMedia: true,
1111
+ uppyConfig: uppyConfig
1112
+ }) : null), /*#__PURE__*/React.createElement("div", {
1106
1113
  className: classNames(['d-flex', 'mt-1', 'mb-3', {
1107
1114
  'justify-content-between': hasLayouts,
1108
1115
  'justify-content-end': !hasLayouts
1109
1116
  }])
1110
1117
  }, hasLayouts ? /*#__PURE__*/React.createElement(Buttons, {
1111
1118
  size: "sm",
1112
- theme: "primary",
1119
+ theme: "secondary",
1113
1120
  outline: true,
1114
1121
  items: (layouts || []).map(function (lay) {
1115
1122
  return _objectSpread(_objectSpread({}, lay), {}, {
@@ -1120,7 +1127,7 @@ function MediasBrowser(_ref) {
1120
1127
  className: 'px-3'
1121
1128
  });
1122
1129
  })
1123
- }) : null, pagination), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({
1130
+ }) : null, pagination), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, {
1124
1131
  size: "small",
1125
1132
  theme: theme,
1126
1133
  component: MediaCard,
@@ -1132,22 +1139,22 @@ function MediasBrowser(_ref) {
1132
1139
  onOpenMedia(it);
1133
1140
  }
1134
1141
  },
1135
- onSelectItem: function onSelectItem(it) {
1136
- return onOpenMedia(it);
1137
- }
1138
- }, tableProps, {
1142
+ selectable: selectable,
1143
+ selectedItems: selectedItems,
1144
+ onSelectionChange: onSelectionChange,
1145
+ multipleSelection: multipleSelection,
1139
1146
  items: finalItems || [],
1140
1147
  loading: loading
1141
- })) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, Object.assign({
1148
+ }) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, {
1142
1149
  theme: theme,
1143
1150
  columns: finalColumns,
1144
1151
  displayPlaceholder: /*#__PURE__*/React.createElement("span", {
1145
1152
  className: "text-secondary text-opacity-75"
1146
1153
  }, "\u2014"),
1147
- onSelectItem: function onSelectItem(it) {
1148
- return onOpenMedia(it);
1149
- }
1150
- }, tableProps, {
1154
+ selectable: selectable,
1155
+ selectedItems: selectedItems,
1156
+ onSelectionChange: onSelectionChange,
1157
+ multipleSelection: multipleSelection,
1151
1158
  items: finalItems,
1152
1159
  loading: loading,
1153
1160
  actionsProps: {
@@ -1173,49 +1180,45 @@ function MediasBrowser(_ref) {
1173
1180
  };
1174
1181
  }
1175
1182
  }
1176
- })) : null, /*#__PURE__*/React.createElement("div", {
1183
+ }) : null, /*#__PURE__*/React.createElement("div", {
1177
1184
  className: classNames(['d-flex', 'mt-3', 'mb-1', 'justify-content-end'])
1178
1185
  }, pagination)));
1179
1186
  }
1180
1187
  MediasBrowser.propTypes = propTypes$5;
1181
1188
  MediasBrowser.defaultProps = defaultProps$5;
1182
1189
 
1183
- var _excluded$4 = ["items", "value", "types", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "tableProps", "className"];
1190
+ var _excluded$4 = ["items", "value", "onSelectionChange", "multipleSelection", "types", "onChange", "onClose", "withoutButtons", "className"];
1184
1191
  var propTypes$4 = {
1185
1192
  // eslint-disable-next-line react/forbid-prop-types
1186
1193
  items: PropTypes.arrayOf(PropTypes.shape({})),
1187
1194
  value: PropTypes.arrayOf(PropTypes.shape({})),
1195
+ onSelectionChange: PropTypes.func,
1196
+ multipleSelection: PropTypes.bool,
1188
1197
  types: PropTypes.arrayOf(PropTypes.string),
1189
1198
  onChange: PropTypes.func.isRequired,
1190
- onConfirm: PropTypes.func.isRequired,
1191
1199
  onClose: PropTypes.func,
1192
- multiple: PropTypes.bool,
1193
1200
  withoutButtons: PropTypes.bool,
1194
- tableProps: PropTypes.shape({
1195
- theme: PropTypes.string
1196
- }),
1197
1201
  className: PropTypes.string
1198
1202
  };
1199
1203
  var defaultProps$4 = {
1200
1204
  items: null,
1201
1205
  value: null,
1206
+ onSelectionChange: null,
1207
+ multipleSelection: false,
1202
1208
  types: null,
1203
1209
  onClose: null,
1204
- multiple: false,
1205
1210
  withoutButtons: false,
1206
- tableProps: null,
1207
1211
  className: null
1208
1212
  };
1209
1213
  function MediasPicker(_ref) {
1210
1214
  var initialItems = _ref.items,
1211
1215
  initialSelectedItems = _ref.value,
1216
+ parentOnSelectionChange = _ref.onSelectionChange,
1217
+ multipleSelection = _ref.multipleSelection,
1212
1218
  types = _ref.types,
1213
1219
  onChange = _ref.onChange,
1214
- onConfirm = _ref.onConfirm,
1215
1220
  onClose = _ref.onClose,
1216
- multiple = _ref.multiple,
1217
1221
  withoutButtons = _ref.withoutButtons,
1218
- tableProps = _ref.tableProps,
1219
1222
  className = _ref.className,
1220
1223
  props = _objectWithoutProperties(_ref, _excluded$4);
1221
1224
  var _useMediasForm = useMediasForm(),
@@ -1230,42 +1233,44 @@ function MediasPicker(_ref) {
1230
1233
  var onItemsChange = React.useCallback(function (newPageItems) {
1231
1234
  setItems(newPageItems);
1232
1235
  }, [setItems]);
1233
- var _useItemSelection = hooks.useItemSelection({
1234
- items: pageItems,
1235
- selectedItems: initialSelectedItems,
1236
- onSelectionChange: onChange,
1237
- multipleSelection: multiple
1238
- }),
1239
- onSelectItem = _useItemSelection.onSelectItem,
1240
- onSelectPage = _useItemSelection.onSelectPage,
1241
- onClearSelected = _useItemSelection.onClearSelected,
1242
- pageSelected = _useItemSelection.pageSelected,
1243
- selectedCount = _useItemSelection.selectedCount,
1244
- selectedItems = _useItemSelection.selectedItems;
1236
+ var _useState3 = React.useState(initialSelectedItems || null),
1237
+ _useState4 = _slicedToArray(_useState3, 2),
1238
+ selectedItems = _useState4[0],
1239
+ setSelectedItems = _useState4[1];
1240
+ var onSelectionChange = React.useCallback(function (newSelection) {
1241
+ setSelectedItems(newSelection);
1242
+ }, [setSelectedItems]);
1243
+ // Sync from the top
1244
+ React.useEffect(function () {
1245
+ setSelectedItems(initialSelectedItems);
1246
+ }, [initialSelectedItems, setSelectedItems]);
1247
+ React.useEffect(function () {
1248
+ if (parentOnSelectionChange !== null) {
1249
+ parentOnSelectionChange(selectedItems);
1250
+ }
1251
+ }, [selectedItems, parentOnSelectionChange]);
1245
1252
  var onConfirmSelection = React.useCallback(function () {
1246
- if (onConfirm !== null) {
1247
- onConfirm(selectedItems);
1253
+ if (onChange !== null) {
1254
+ onChange(selectedItems);
1248
1255
  }
1249
- }, [selectedItems, onConfirm]);
1256
+ }, [selectedItems, onChange]);
1250
1257
  return /*#__PURE__*/React.createElement("div", {
1251
1258
  className: className
1252
1259
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
1253
- tableProps: _objectSpread({
1254
- selectable: true,
1255
- multipleSelection: multiple,
1256
- onSelectItem: onSelectItem,
1257
- onSelectPage: onSelectPage,
1258
- selectedItems: selectedItems,
1259
- pageSelected: pageSelected
1260
- }, tableProps)
1261
- // items={initialItems} // TODO: fix useItems if actually using this
1260
+ items: initialItems // TODO: fix useItems if actually using this
1262
1261
  ,
1262
+ selectable: true,
1263
+ selectedItems: selectedItems,
1264
+ onSelectionChange: onSelectionChange,
1265
+ multipleSelection: multipleSelection,
1263
1266
  onItemsChange: onItemsChange,
1264
- selectedCount: selectedCount,
1265
- onClearSelected: onClearSelected,
1266
- types: types,
1267
- extraItems: !multiple && initialSelectedItems !== null ? [initialSelectedItems] : initialSelectedItems
1268
- }, props)), multiple && !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1267
+ types: types
1268
+ // extraItems={
1269
+ // !multiple && initialSelectedItems !== null
1270
+ // ? [initialSelectedItems]
1271
+ // : initialSelectedItems
1272
+ // }
1273
+ }, props)), !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1269
1274
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
1270
1275
  }, /*#__PURE__*/React.createElement("div", {
1271
1276
  className: "btn-group"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/medias",
3
- "version": "3.0.179",
3
+ "version": "3.0.182",
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.176",
50
- "@panneau/data": "^3.0.178",
51
- "@panneau/display-image": "^3.0.177",
52
- "@panneau/element-button": "^3.0.177",
53
- "@panneau/element-buttons": "^3.0.177",
54
- "@panneau/element-form": "^3.0.177",
55
- "@panneau/element-form-status": "^3.0.176",
56
- "@panneau/element-grid": "^3.0.176",
57
- "@panneau/element-icon": "^3.0.176",
58
- "@panneau/element-media-card": "^3.0.177",
59
- "@panneau/element-media-player": "^3.0.176",
60
- "@panneau/element-pagination": "^3.0.177",
61
- "@panneau/element-table": "^3.0.177",
62
- "@panneau/filter-filters": "^3.0.177",
49
+ "@panneau/core": "^3.0.182",
50
+ "@panneau/data": "^3.0.182",
51
+ "@panneau/display-image": "^3.0.182",
52
+ "@panneau/element-button": "^3.0.182",
53
+ "@panneau/element-buttons": "^3.0.182",
54
+ "@panneau/element-form": "^3.0.182",
55
+ "@panneau/element-form-status": "^3.0.182",
56
+ "@panneau/element-grid": "^3.0.182",
57
+ "@panneau/element-icon": "^3.0.182",
58
+ "@panneau/element-media-card": "^3.0.182",
59
+ "@panneau/element-media-player": "^3.0.182",
60
+ "@panneau/element-pagination": "^3.0.182",
61
+ "@panneau/element-table": "^3.0.182",
62
+ "@panneau/field-upload": "^3.0.182",
63
+ "@panneau/filter-filters": "^3.0.182",
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": "b30a47b8b078044365622de3c85911898037c1f3"
72
+ "gitHead": "27626681ce1bcf3e4779ecabeb5d69c58df4d351"
72
73
  }