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