@panneau/medias 3.0.172 → 3.0.174

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 +241 -122
  2. package/lib/index.js +241 -121
  3. package/package.json +16 -16
package/es/index.js CHANGED
@@ -23,7 +23,7 @@ import MediaCard from '@panneau/element-media-card';
23
23
  import Pagination from '@panneau/element-pagination';
24
24
  import Table from '@panneau/element-table';
25
25
  import Filters from '@panneau/filter-filters';
26
- import { useItems, useData, useApi } from '@panneau/data';
26
+ import { useItemsStore, useData, useApi } from '@panneau/data';
27
27
 
28
28
  /* eslint-disable react/jsx-props-no-spreading */
29
29
  var MediasApiContext = /*#__PURE__*/React.createContext(null);
@@ -60,60 +60,42 @@ function MediasApiProvider(_ref) {
60
60
  MediasApiProvider.propTypes = propTypes$9;
61
61
  MediasApiProvider.defaultProps = defaultProps$9;
62
62
 
63
- var _excluded$7 = ["items", "pageItems"];
63
+ var _excluded$7 = ["items"];
64
64
  var useMedias = function useMedias() {
65
65
  var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
66
66
  var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
67
67
  var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
68
68
  var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
69
69
  var api = useMediasApi();
70
+ var trashed = useMemo(function () {
71
+ var _ref = opts || {},
72
+ trashedOpt = _ref.trashed;
73
+ return trashedOpt;
74
+ }, [opts]);
75
+ var finalQuery = useMemo(function () {
76
+ return _objectSpread(_objectSpread({}, query), {}, {
77
+ trashed: trashed
78
+ });
79
+ }, [query, trashed]);
70
80
  var getItems = useCallback(function () {
71
81
  var requestedPage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
72
- return api.get(query, requestedPage, count);
73
- }, [api, query, count]);
74
- var _useItems = useItems(_objectSpread({
82
+ return trashed ? api.getTrashed(query, requestedPage, count) : api.get(query, requestedPage, count);
83
+ }, [api, query, count, trashed]);
84
+ var _useItemsStore = useItemsStore('medias', _objectSpread({
75
85
  getPage: page !== null ? getItems : null,
76
86
  getItems: page === null ? getItems : null,
77
- page: page
87
+ page: page,
88
+ count: count,
89
+ query: finalQuery
78
90
  }, opts)),
79
- items = _useItems.items,
80
- pageItems = _useItems.pageItems,
81
- request = _objectWithoutProperties(_useItems, _excluded$7);
91
+ items = _useItemsStore.items,
92
+ props = _objectWithoutProperties(_useItemsStore, _excluded$7);
82
93
  return _objectSpread({
83
- medias: page !== null ? pageItems : items,
84
- allMedias: items
85
- }, request);
94
+ items: items
95
+ }, props);
86
96
  };
87
97
  var useMedias$1 = useMedias;
88
98
 
89
- var useMediasRecent = function useMediasRecent(opts) {
90
- var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'media-gallery-recent-searches';
91
- var addSearchValue = useCallback(function (value) {
92
- if (typeof window !== 'undefined' && typeof window.localStorage !== 'undefined' && value) {
93
- var recent = window.localStorage.getItem(key) || null;
94
- var current = recent !== null ? JSON.parse(recent || '[]') : [];
95
- var encoded = JSON.stringify([value].concat(_toConsumableArray(current)));
96
- window.localStorage.setItem(key, encoded);
97
- return true;
98
- }
99
- return false;
100
- }, [key]);
101
- var getSearchValues = useCallback(function () {
102
- var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;
103
- if (typeof window !== 'undefined' && typeof window.localStorage !== 'undefined') {
104
- var recent = window.localStorage.getItem(key) || null;
105
- var current = recent !== null ? JSON.parse(recent || '[]') : [];
106
- return current.slice(0, count);
107
- }
108
- return [];
109
- }, [key]);
110
- return {
111
- addSearchValue: addSearchValue,
112
- getSearchValues: getSearchValues
113
- };
114
- };
115
- var useMediasRecent$1 = useMediasRecent;
116
-
117
99
  var _excluded$6 = ["data"];
118
100
  var useMedia = function useMedia(id, opts) {
119
101
  var api = useMediasApi();
@@ -132,19 +114,19 @@ var useMedia$1 = useMedia;
132
114
  var useMediaCreate = function useMediaCreate() {
133
115
  var _useState = useState(false),
134
116
  _useState2 = _slicedToArray(_useState, 2),
135
- loading = _useState2[0],
136
- setLoading = _useState2[1];
117
+ creating = _useState2[0],
118
+ setCreating = _useState2[1];
137
119
  var api = useMediasApi();
138
120
  var create = useCallback(function (data) {
139
- setLoading(true);
121
+ setCreating(true);
140
122
  return api.create(data).then(function (response) {
141
- setLoading(false);
123
+ setCreating(false);
142
124
  return response;
143
125
  });
144
- }, [api, setLoading]);
126
+ }, [api, setCreating]);
145
127
  return {
146
128
  create: create,
147
- loading: loading
129
+ creating: creating
148
130
  };
149
131
  };
150
132
  var useMediaCreate$1 = useMediaCreate;
@@ -152,41 +134,62 @@ var useMediaCreate$1 = useMediaCreate;
152
134
  var useMediaUpdate = function useMediaUpdate() {
153
135
  var _useState = useState(false),
154
136
  _useState2 = _slicedToArray(_useState, 2),
155
- loading = _useState2[0],
156
- setLoading = _useState2[1];
137
+ updating = _useState2[0],
138
+ setUpdating = _useState2[1];
157
139
  var api = useMediasApi();
158
140
  var update = useCallback(function (id, data) {
159
- setLoading(true);
141
+ setUpdating(true);
160
142
  return api.update(id, data).then(function (response) {
161
- setLoading(false);
143
+ setUpdating(false);
162
144
  return response;
163
145
  });
164
- }, [api, setLoading]);
146
+ }, [api, setUpdating]);
165
147
  return {
166
148
  update: update,
167
- loading: loading
149
+ updating: updating
168
150
  };
169
151
  };
170
152
  var useMediaUpdate$1 = useMediaUpdate;
171
153
 
172
- var useMediaDestroy = function useMediaDestroy() {
154
+ var useMediaDelete = function useMediaDelete() {
173
155
  var _useState = useState(false),
174
156
  _useState2 = _slicedToArray(_useState, 2),
175
- loading = _useState2[0],
176
- setLoading = _useState2[1];
157
+ deleting = _useState2[0],
158
+ setDeleting = _useState2[1];
177
159
  var api = useMediasApi();
178
- var destroy = useCallback(function (id, data) {
179
- setLoading(true);
160
+ var mediaDelete = useCallback(function (id, data) {
161
+ setDeleting(true);
180
162
  return api["delete"](id, data).then(function (response) {
181
- setLoading(false);
163
+ setDeleting(false);
182
164
  return response;
183
165
  });
184
- }, [api, setLoading]);
166
+ }, [api, setDeleting]);
185
167
  return {
186
- destroy: destroy,
187
- loading: loading
168
+ mediaDelete: mediaDelete,
169
+ deleting: deleting
188
170
  };
189
171
  };
172
+ var useMediaDelete$1 = useMediaDelete;
173
+
174
+ var useMediaTrash = function useMediaTrash() {
175
+ var _useState = useState(false),
176
+ _useState2 = _slicedToArray(_useState, 2),
177
+ trashing = _useState2[0],
178
+ setTrashing = _useState2[1];
179
+ var api = useMediasApi();
180
+ var mediaTrash = useCallback(function (id, data) {
181
+ setTrashing(true);
182
+ return api.trash(id, data).then(function (response) {
183
+ setTrashing(false);
184
+ return response;
185
+ });
186
+ }, [api, setTrashing]);
187
+ return {
188
+ mediaTrash: mediaTrash,
189
+ trashing: trashing
190
+ };
191
+ };
192
+ var useMediaTrash$1 = useMediaTrash;
190
193
 
191
194
  var styles = {"mediaFrame":"panneau-medias-mediaFrame","playButton":"panneau-medias-playButton"};
192
195
 
@@ -381,6 +384,7 @@ var propTypes$7 = {
381
384
  onSave: PropTypes.func,
382
385
  onDelete: PropTypes.func,
383
386
  onClose: PropTypes.func,
387
+ withTrash: PropTypes.bool,
384
388
  className: PropTypes.string,
385
389
  children: PropTypes.node
386
390
  };
@@ -391,6 +395,7 @@ var defaultProps$7 = {
391
395
  onSave: null,
392
396
  onDelete: null,
393
397
  onClose: null,
398
+ withTrash: false,
394
399
  className: null,
395
400
  children: null
396
401
  };
@@ -401,25 +406,31 @@ function MediaForm(_ref) {
401
406
  onSave = _ref.onSave,
402
407
  onDelete = _ref.onDelete,
403
408
  onClose = _ref.onClose,
409
+ withTrash = _ref.withTrash,
404
410
  className = _ref.className,
405
411
  children = _ref.children;
406
412
  var FieldsComponent = useFieldComponent('fields');
407
413
  var _useMediaUpdate = useMediaUpdate$1(),
408
414
  update = _useMediaUpdate.update,
409
- updating = _useMediaUpdate.loading;
410
- var _useMediaDestroy = useMediaDestroy(),
411
- destroy = _useMediaDestroy.destroy,
412
- destroying = _useMediaDestroy.loading;
415
+ updating = _useMediaUpdate.updating;
416
+ var _useMediaTrash = useMediaTrash$1(),
417
+ mediaTrash = _useMediaTrash.mediaTrash,
418
+ trashing = _useMediaTrash.trashing;
419
+ var _useMediaDelete = useMediaDelete$1(),
420
+ mediaDelete = _useMediaDelete.mediaDelete,
421
+ deleting = _useMediaDelete.deleting;
413
422
  var _useState = useState(false),
414
423
  _useState2 = _slicedToArray(_useState, 2),
415
424
  changed = _useState2[0],
416
425
  setChanged = _useState2[1];
417
- var disabled = updating || destroying || initialValue === null;
426
+ var disabled = updating || deleting || trashing || initialValue === null;
418
427
  var _ref2 = initialValue || {},
419
428
  _ref2$name = _ref2.name,
420
429
  name = _ref2$name === void 0 ? null : _ref2$name,
421
430
  _ref2$type = _ref2.type,
422
- type = _ref2$type === void 0 ? null : _ref2$type;
431
+ type = _ref2$type === void 0 ? null : _ref2$type,
432
+ _ref2$deletedAt = _ref2.deletedAt,
433
+ deletedAt = _ref2$deletedAt === void 0 ? null : _ref2$deletedAt;
423
434
  var onChangeMedia = useCallback(function (newValue) {
424
435
  if (onChange !== null) {
425
436
  onChange(newValue);
@@ -433,20 +444,32 @@ function MediaForm(_ref) {
433
444
  setChanged(false);
434
445
  }, [onChange, setChanged]);
435
446
  var onDeleteMedia = useCallback(function () {
436
- // Destroy
437
447
  var _ref3 = initialValue || {},
438
448
  _ref3$id = _ref3.id,
439
449
  id = _ref3$id === void 0 ? null : _ref3$id;
440
- destroy(id, initialValue).then(function () {
441
- if (onDelete !== null) {
442
- onDelete();
443
- }
444
- setChanged(false);
445
- if (onClose !== null) {
446
- onClose();
447
- }
448
- });
449
- }, [initialValue, destroy, destroying, setChanged]);
450
+ if (withTrash && deletedAt !== null) {
451
+ mediaTrash(id, initialValue).then(function () {
452
+ if (onDelete !== null) {
453
+ onDelete();
454
+ }
455
+ setChanged(false);
456
+ if (onClose !== null) {
457
+ onClose();
458
+ }
459
+ });
460
+ } else {
461
+ // Destroy
462
+ mediaDelete(id, initialValue).then(function () {
463
+ if (onDelete !== null) {
464
+ onDelete();
465
+ }
466
+ setChanged(false);
467
+ if (onClose !== null) {
468
+ onClose();
469
+ }
470
+ });
471
+ }
472
+ }, [initialValue, mediaDelete, mediaTrash, deletedAt, setChanged, withTrash]);
450
473
  var postForm = useCallback(function (action, data) {
451
474
  return initialValue !== null ? update(initialValue.id, data) : new Promise();
452
475
  }, [initialValue, update]);
@@ -477,9 +500,17 @@ function MediaForm(_ref) {
477
500
  }, type)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
478
501
  className: "me-2 mb-1 mt-1",
479
502
  theme: "danger",
503
+ icon: withTrash && deletedAt !== null ? 'trash-fill' : 'trash',
504
+ iconPosition: "right",
480
505
  onClick: onDeleteMedia,
481
- disabled: destroying
482
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
506
+ disabled: deleting || trashing
507
+ }, withTrash && deletedAt === null ? /*#__PURE__*/React.createElement(FormattedMessage, {
508
+ id: "PSlT7H",
509
+ defaultMessage: [{
510
+ "type": 0,
511
+ "value": "Trash"
512
+ }]
513
+ }) : /*#__PURE__*/React.createElement(FormattedMessage, {
483
514
  id: "Bhu3B2",
484
515
  defaultMessage: [{
485
516
  "type": 0,
@@ -488,8 +519,10 @@ function MediaForm(_ref) {
488
519
  })), onSave !== null ? /*#__PURE__*/React.createElement(Button, {
489
520
  className: "mb-1 mt-1",
490
521
  theme: "primary",
522
+ icon: changed ? 'check-all' : 'check',
523
+ iconPosition: "right",
491
524
  onClick: onSubmit,
492
- disabled: !changed || updating || destroying
525
+ disabled: !changed || updating || deleting
493
526
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
494
527
  id: "R1HYj0",
495
528
  defaultMessage: [{
@@ -680,7 +713,7 @@ var defaultColumns = [{
680
713
  "value": "Actions"
681
714
  }]
682
715
  }),
683
- actions: ['edit']
716
+ actions: ['edit', 'delete']
684
717
  // component: ItemActions,
685
718
  // label: 'Edit',
686
719
  // url: '/edit/1',
@@ -769,7 +802,7 @@ var defaultFilters = [{
769
802
  ];
770
803
 
771
804
  var _excluded$5 = ["page", "count"],
772
- _excluded2 = ["types"];
805
+ _excluded2 = ["types", "trashed"];
773
806
  var propTypes$5 = {
774
807
  items: PropTypes$1.medias,
775
808
  extraItems: PropTypes$1.medias,
@@ -788,8 +821,11 @@ var propTypes$5 = {
788
821
  onLayoutChange: PropTypes.func,
789
822
  selectedCount: PropTypes.number,
790
823
  onClearSelected: PropTypes.func,
824
+ withTrash: PropTypes.bool,
825
+ withStickySelection: PropTypes.bool,
791
826
  className: PropTypes.string,
792
- buttonsClassName: PropTypes.string
827
+ buttonsClassName: PropTypes.string,
828
+ formChildren: PropTypes.node
793
829
  };
794
830
  var defaultProps$5 = {
795
831
  items: null,
@@ -819,8 +855,11 @@ var defaultProps$5 = {
819
855
  onLayoutChange: null,
820
856
  selectedCount: null,
821
857
  onClearSelected: null,
858
+ withTrash: false,
859
+ withStickySelection: false,
822
860
  className: null,
823
- buttonsClassName: null
861
+ buttonsClassName: null,
862
+ formChildren: null
824
863
  };
825
864
  function MediasBrowser(_ref) {
826
865
  var initialItems = _ref.items,
@@ -840,8 +879,11 @@ function MediasBrowser(_ref) {
840
879
  onLayoutChange = _ref.onLayoutChange,
841
880
  selectedCount = _ref.selectedCount,
842
881
  onClearSelected = _ref.onClearSelected,
882
+ withTrash = _ref.withTrash,
883
+ withStickySelection = _ref.withStickySelection,
843
884
  className = _ref.className,
844
- buttonsClassName = _ref.buttonsClassName;
885
+ buttonsClassName = _ref.buttonsClassName,
886
+ formChildren = _ref.formChildren;
845
887
  var _useState = useState(initialItems || null),
846
888
  _useState2 = _slicedToArray(_useState, 1),
847
889
  baseItems = _useState2[0];
@@ -880,14 +922,35 @@ function MediasBrowser(_ref) {
880
922
  // eslint-disable-next-line no-unused-vars
881
923
  var _ref3 = query || {};
882
924
  _ref3.types;
925
+ _ref3.trashed;
883
926
  var queryWithoutTypes = _objectWithoutProperties(_ref3, _excluded2);
927
+ var _useMediaTrash = useMediaTrash$1(),
928
+ mediaTrash = _useMediaTrash.mediaTrash,
929
+ trashing = _useMediaTrash.trashing;
930
+ var _useMediaDelete = useMediaDelete$1(),
931
+ mediaDelete = _useMediaDelete.mediaDelete,
932
+ deleting = _useMediaDelete.deleting;
933
+ var _useState3 = useState(false),
934
+ _useState4 = _slicedToArray(_useState3, 2),
935
+ showTrashed = _useState4[0],
936
+ setShowTrashed = _useState4[1];
937
+ var onClickTrash = useCallback(function () {
938
+ setShowTrashed(!showTrashed);
939
+ }, [showTrashed, setShowTrashed]);
884
940
  var _useMedias = useMedias$1(query, page, count, {
885
- items: baseItems
941
+ items: baseItems,
942
+ trashed: showTrashed
886
943
  }),
887
- items = _useMedias.medias,
888
- loading = _useMedias.loading,
889
- lastPage = _useMedias.lastPage,
890
- total = _useMedias.total;
944
+ items = _useMedias.items,
945
+ allItems = _useMedias.allItems,
946
+ _useMedias$loading = _useMedias.loading,
947
+ loading = _useMedias$loading === void 0 ? false : _useMedias$loading,
948
+ _useMedias$updateItem = _useMedias.updateItem,
949
+ updateItem = _useMedias$updateItem === void 0 ? null : _useMedias$updateItem,
950
+ _useMedias$pagination = _useMedias.pagination,
951
+ _useMedias$pagination2 = _useMedias$pagination === void 0 ? {} : _useMedias$pagination,
952
+ lastPage = _useMedias$pagination2.lastPage,
953
+ total = _useMedias$pagination2.total;
891
954
 
892
955
  // For picker
893
956
  useEffect(function () {
@@ -895,10 +958,10 @@ function MediasBrowser(_ref) {
895
958
  onItemsChange(items);
896
959
  }
897
960
  }, [items, onItemsChange]);
898
- var _useState3 = useState(initialLayout || 'table'),
899
- _useState4 = _slicedToArray(_useState3, 2),
900
- layout = _useState4[0],
901
- setLayout = _useState4[1];
961
+ var _useState5 = useState(initialLayout || 'table'),
962
+ _useState6 = _slicedToArray(_useState5, 2),
963
+ layout = _useState6[0],
964
+ setLayout = _useState6[1];
902
965
  var hasLayouts = useMemo(function () {
903
966
  return layouts !== null && layouts.length > 1;
904
967
  }, [layouts]);
@@ -919,10 +982,10 @@ function MediasBrowser(_ref) {
919
982
  var onCloseMedia = useCallback(function () {
920
983
  setCurrentMedia(null);
921
984
  }, [setCurrentMedia]);
922
- var onSaveMedia = useCallback(function () {
985
+ var onSaveMedia = useCallback(function (item) {
923
986
  setCurrentMedia(null);
924
- onQueryReset();
925
- }, [setCurrentMedia, onQueryReset]);
987
+ updateItem(item);
988
+ }, [setCurrentMedia, updateItem]);
926
989
  var pagination = /*#__PURE__*/React.createElement(Pagination, {
927
990
  page: page,
928
991
  lastPage: lastPage,
@@ -938,8 +1001,17 @@ function MediasBrowser(_ref) {
938
1001
  alwaysShowButtons: true
939
1002
  });
940
1003
  var finalFilters = useMemo(function () {
941
- if (types !== null && filters !== null) {
942
- return (filters || []).map(function (filter) {
1004
+ var partialFilters = withTrash ? (filters || []).concat([{
1005
+ name: 'trashed',
1006
+ component: 'button',
1007
+ theme: showTrashed ? 'danger' : 'secondary',
1008
+ outline: !showTrashed,
1009
+ activeTheme: 'danger',
1010
+ icon: showTrashed ? 'trash-fill' : 'trash',
1011
+ onClick: onClickTrash
1012
+ }]) : filters;
1013
+ if (types !== null && partialFilters !== null) {
1014
+ return (partialFilters || []).map(function (filter) {
943
1015
  var _ref4 = filter || {},
944
1016
  _ref4$id = _ref4.id,
945
1017
  id = _ref4$id === void 0 ? null : _ref4$id;
@@ -948,16 +1020,47 @@ function MediasBrowser(_ref) {
948
1020
  }) : filter;
949
1021
  });
950
1022
  }
951
- return filters;
952
- }, [filters, types]);
1023
+ return partialFilters;
1024
+ }, [filters, types, withTrash, showTrashed, onClickTrash]);
1025
+ var finalColumns = useMemo(function () {
1026
+ return withTrash && showTrashed ? (columns || []).map(function (column) {
1027
+ var _ref5 = column || {},
1028
+ _ref5$id = _ref5.id,
1029
+ columnId = _ref5$id === void 0 ? null : _ref5$id;
1030
+ if (columnId === 'created_at') {
1031
+ return _objectSpread(_objectSpread({}, column), {}, {
1032
+ path: 'deleted_at',
1033
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
1034
+ id: "uds4wJ",
1035
+ defaultMessage: [{
1036
+ "type": 0,
1037
+ "value": "Deleted at"
1038
+ }]
1039
+ })
1040
+ });
1041
+ }
1042
+ return column;
1043
+ }) : columns;
1044
+ }, [columns, withTrash, showTrashed]);
953
1045
  var finalItems = useMemo(function () {
954
- if (page === 1 && extraItems !== null) {
955
- return uniqBy([].concat(_toConsumableArray(extraItems), _toConsumableArray(items || [])), function (it) {
1046
+ if (withStickySelection && extraItems !== null) {
1047
+ return uniqBy([].concat(_toConsumableArray((extraItems || []).map(function (item) {
1048
+ var _item$id = item.id,
1049
+ itemId = _item$id === void 0 ? null : _item$id;
1050
+ return (allItems || []).find(function () {
1051
+ var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1052
+ _ref6$id = _ref6.id,
1053
+ otherId = _ref6$id === void 0 ? null : _ref6$id;
1054
+ return otherId === itemId;
1055
+ }) || item || null;
1056
+ }).filter(function (it) {
1057
+ return it !== null;
1058
+ })), _toConsumableArray(items || [])), function (it) {
956
1059
  return it === null || it === void 0 ? void 0 : it.id;
957
1060
  });
958
1061
  }
959
1062
  return items;
960
- }, [items, page, extraItems]);
1063
+ }, [items, page, allItems, withStickySelection, extraItems]);
961
1064
  return /*#__PURE__*/React.createElement("div", {
962
1065
  className: classNames([styles.container, className])
963
1066
  }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -977,8 +1080,9 @@ function MediasBrowser(_ref) {
977
1080
  fields: fields,
978
1081
  onChange: setCurrentMedia,
979
1082
  onSave: onSaveMedia,
980
- onClose: onCloseMedia
981
- })) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1083
+ onClose: onCloseMedia,
1084
+ withTrash: withTrash
1085
+ }, formChildren)) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
982
1086
  value: query,
983
1087
  clearValue: types !== null ? queryWithoutTypes : null,
984
1088
  filters: finalFilters,
@@ -990,10 +1094,10 @@ function MediasBrowser(_ref) {
990
1094
  className: buttonsClassName
991
1095
  }) : null) : null, filters === null && buttons !== null ? /*#__PURE__*/React.createElement("div", {
992
1096
  className: "mt-2 mb-2"
993
- }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
1097
+ }, /*#__PURE__*/React.createElement(Buttons, {
994
1098
  items: buttons,
995
1099
  className: buttonsClassName
996
- }) : null) : null, /*#__PURE__*/React.createElement("div", {
1100
+ })) : null, /*#__PURE__*/React.createElement("div", {
997
1101
  className: classNames(['d-flex', 'mt-1', 'mb-3', {
998
1102
  'justify-content-between': hasLayouts,
999
1103
  'justify-content-end': !hasLayouts
@@ -1031,7 +1135,7 @@ function MediasBrowser(_ref) {
1031
1135
  loading: loading
1032
1136
  })) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, Object.assign({
1033
1137
  theme: theme,
1034
- columns: columns,
1138
+ columns: finalColumns,
1035
1139
  displayPlaceholder: /*#__PURE__*/React.createElement("span", {
1036
1140
  className: "text-secondary text-opacity-75"
1037
1141
  }, "\u2014"),
@@ -1042,6 +1146,19 @@ function MediasBrowser(_ref) {
1042
1146
  items: finalItems,
1043
1147
  loading: loading,
1044
1148
  actionsProps: {
1149
+ getDeletePropsFromItem: function getDeletePropsFromItem() {
1150
+ var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1151
+ _ref7$id = _ref7.id,
1152
+ id = _ref7$id === void 0 ? null : _ref7$id;
1153
+ return {
1154
+ href: null,
1155
+ onClick: function onClick() {
1156
+ return showTrashed ? mediaDelete(id) : mediaTrash(id);
1157
+ },
1158
+ disabled: trashing || deleting,
1159
+ icon: showTrashed ? 'trash-fill' : 'trash'
1160
+ };
1161
+ },
1045
1162
  getEditPropsFromItem: function getEditPropsFromItem(it) {
1046
1163
  return {
1047
1164
  href: null,
@@ -1096,18 +1213,20 @@ function MediasPicker(_ref) {
1096
1213
  tableProps = _ref.tableProps,
1097
1214
  className = _ref.className,
1098
1215
  props = _objectWithoutProperties(_ref, _excluded$4);
1099
- // For selection only
1216
+ var _useMediasForm = useMediasForm(),
1217
+ currentMedia = _useMediasForm.media;
1218
+
1219
+ // For selection
1100
1220
  var _useState = useState(initialItems),
1101
1221
  _useState2 = _slicedToArray(_useState, 2),
1102
- currentItems = _useState2[0],
1222
+ pageItems = _useState2[0],
1103
1223
  setItems = _useState2[1];
1104
- var onItemsChange = useCallback(function (pageItems) {
1105
- setItems(pageItems);
1224
+ var disabled = pageItems === null || pageItems.length < 1;
1225
+ var onItemsChange = useCallback(function (newPageItems) {
1226
+ setItems(newPageItems);
1106
1227
  }, [setItems]);
1107
- var _useMediasForm = useMediasForm(),
1108
- currentMedia = _useMediasForm.media;
1109
1228
  var _useItemSelection = useItemSelection({
1110
- currentItems: currentItems,
1229
+ items: pageItems,
1111
1230
  selectedItems: initialSelectedItems,
1112
1231
  onSelectionChange: onChange,
1113
1232
  multipleSelection: multiple
@@ -1118,7 +1237,6 @@ function MediasPicker(_ref) {
1118
1237
  pageSelected = _useItemSelection.pageSelected,
1119
1238
  selectedCount = _useItemSelection.selectedCount,
1120
1239
  selectedItems = _useItemSelection.selectedItems;
1121
- var disabled = currentItems === null || currentItems.length < 1;
1122
1240
  var onConfirmSelection = useCallback(function () {
1123
1241
  if (onConfirm !== null) {
1124
1242
  onConfirm(selectedItems);
@@ -1134,13 +1252,14 @@ function MediasPicker(_ref) {
1134
1252
  onSelectPage: onSelectPage,
1135
1253
  selectedItems: selectedItems,
1136
1254
  pageSelected: pageSelected
1137
- }, tableProps)
1138
- // items={initialItems} // TODO: fix useItems if using this
1255
+ }, tableProps),
1256
+ items: initialItems // TODO: fix useItems if actually using this
1139
1257
  ,
1140
1258
  onItemsChange: onItemsChange,
1141
1259
  selectedCount: selectedCount,
1142
1260
  onClearSelected: onClearSelected,
1143
- types: types
1261
+ types: types,
1262
+ extraItems: !multiple && initialSelectedItems !== null ? [initialSelectedItems] : initialSelectedItems
1144
1263
  }, props)), multiple && !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1145
1264
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
1146
1265
  }, /*#__PURE__*/React.createElement("div", {
@@ -1386,4 +1505,4 @@ function MediasResourcePicker(_ref) {
1386
1505
  MediasResourcePicker.propTypes = propTypes;
1387
1506
  MediasResourcePicker.defaultProps = defaultProps;
1388
1507
 
1389
- export { MediaForm, MediasApiProvider, MediasBrowser, MediasBrowserContainer, MediasPicker, MediasPickerContainer, MediasResourceBrowser, MediasResourcePicker, apiPropTypes, defaultColumns as columns, defaultFields as fields, defaultFilters as filters, useMedia$1 as useMedia, useMediaCreate$1 as useMediaCreate, useMediaUpdate$1 as useMediaUpdate, useMedias$1 as useMedias, useMediasApi, useMediasRecent$1 as useMediasRecentSearches };
1508
+ export { MediaForm, MediasApiProvider, MediasBrowser, MediasBrowserContainer, MediasPicker, MediasPickerContainer, MediasResourceBrowser, MediasResourcePicker, apiPropTypes, defaultColumns as columns, defaultFields as fields, defaultFilters as filters, useMedia$1 as useMedia, useMediaCreate$1 as useMediaCreate, useMediaDelete$1 as useMediaDelete, useMediaTrash$1 as useMediaTrash, useMediaUpdate$1 as useMediaUpdate, useMedias$1 as useMedias, useMediasApi };
package/lib/index.js CHANGED
@@ -62,60 +62,42 @@ function MediasApiProvider(_ref) {
62
62
  MediasApiProvider.propTypes = propTypes$9;
63
63
  MediasApiProvider.defaultProps = defaultProps$9;
64
64
 
65
- var _excluded$7 = ["items", "pageItems"];
65
+ var _excluded$7 = ["items"];
66
66
  var useMedias = function useMedias() {
67
67
  var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
68
68
  var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
69
69
  var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
70
70
  var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
71
71
  var api = useMediasApi();
72
+ var trashed = React.useMemo(function () {
73
+ var _ref = opts || {},
74
+ trashedOpt = _ref.trashed;
75
+ return trashedOpt;
76
+ }, [opts]);
77
+ var finalQuery = React.useMemo(function () {
78
+ return _objectSpread(_objectSpread({}, query), {}, {
79
+ trashed: trashed
80
+ });
81
+ }, [query, trashed]);
72
82
  var getItems = React.useCallback(function () {
73
83
  var requestedPage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
74
- return api.get(query, requestedPage, count);
75
- }, [api, query, count]);
76
- var _useItems = data.useItems(_objectSpread({
84
+ return trashed ? api.getTrashed(query, requestedPage, count) : api.get(query, requestedPage, count);
85
+ }, [api, query, count, trashed]);
86
+ var _useItemsStore = data.useItemsStore('medias', _objectSpread({
77
87
  getPage: page !== null ? getItems : null,
78
88
  getItems: page === null ? getItems : null,
79
- page: page
89
+ page: page,
90
+ count: count,
91
+ query: finalQuery
80
92
  }, opts)),
81
- items = _useItems.items,
82
- pageItems = _useItems.pageItems,
83
- request = _objectWithoutProperties(_useItems, _excluded$7);
93
+ items = _useItemsStore.items,
94
+ props = _objectWithoutProperties(_useItemsStore, _excluded$7);
84
95
  return _objectSpread({
85
- medias: page !== null ? pageItems : items,
86
- allMedias: items
87
- }, request);
96
+ items: items
97
+ }, props);
88
98
  };
89
99
  var useMedias$1 = useMedias;
90
100
 
91
- var useMediasRecent = function useMediasRecent(opts) {
92
- var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'media-gallery-recent-searches';
93
- var addSearchValue = React.useCallback(function (value) {
94
- if (typeof window !== 'undefined' && typeof window.localStorage !== 'undefined' && value) {
95
- var recent = window.localStorage.getItem(key) || null;
96
- var current = recent !== null ? JSON.parse(recent || '[]') : [];
97
- var encoded = JSON.stringify([value].concat(_toConsumableArray(current)));
98
- window.localStorage.setItem(key, encoded);
99
- return true;
100
- }
101
- return false;
102
- }, [key]);
103
- var getSearchValues = React.useCallback(function () {
104
- var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;
105
- if (typeof window !== 'undefined' && typeof window.localStorage !== 'undefined') {
106
- var recent = window.localStorage.getItem(key) || null;
107
- var current = recent !== null ? JSON.parse(recent || '[]') : [];
108
- return current.slice(0, count);
109
- }
110
- return [];
111
- }, [key]);
112
- return {
113
- addSearchValue: addSearchValue,
114
- getSearchValues: getSearchValues
115
- };
116
- };
117
- var useMediasRecent$1 = useMediasRecent;
118
-
119
101
  var _excluded$6 = ["data"];
120
102
  var useMedia = function useMedia(id, opts) {
121
103
  var api = useMediasApi();
@@ -134,19 +116,19 @@ var useMedia$1 = useMedia;
134
116
  var useMediaCreate = function useMediaCreate() {
135
117
  var _useState = React.useState(false),
136
118
  _useState2 = _slicedToArray(_useState, 2),
137
- loading = _useState2[0],
138
- setLoading = _useState2[1];
119
+ creating = _useState2[0],
120
+ setCreating = _useState2[1];
139
121
  var api = useMediasApi();
140
122
  var create = React.useCallback(function (data) {
141
- setLoading(true);
123
+ setCreating(true);
142
124
  return api.create(data).then(function (response) {
143
- setLoading(false);
125
+ setCreating(false);
144
126
  return response;
145
127
  });
146
- }, [api, setLoading]);
128
+ }, [api, setCreating]);
147
129
  return {
148
130
  create: create,
149
- loading: loading
131
+ creating: creating
150
132
  };
151
133
  };
152
134
  var useMediaCreate$1 = useMediaCreate;
@@ -154,41 +136,62 @@ var useMediaCreate$1 = useMediaCreate;
154
136
  var useMediaUpdate = function useMediaUpdate() {
155
137
  var _useState = React.useState(false),
156
138
  _useState2 = _slicedToArray(_useState, 2),
157
- loading = _useState2[0],
158
- setLoading = _useState2[1];
139
+ updating = _useState2[0],
140
+ setUpdating = _useState2[1];
159
141
  var api = useMediasApi();
160
142
  var update = React.useCallback(function (id, data) {
161
- setLoading(true);
143
+ setUpdating(true);
162
144
  return api.update(id, data).then(function (response) {
163
- setLoading(false);
145
+ setUpdating(false);
164
146
  return response;
165
147
  });
166
- }, [api, setLoading]);
148
+ }, [api, setUpdating]);
167
149
  return {
168
150
  update: update,
169
- loading: loading
151
+ updating: updating
170
152
  };
171
153
  };
172
154
  var useMediaUpdate$1 = useMediaUpdate;
173
155
 
174
- var useMediaDestroy = function useMediaDestroy() {
156
+ var useMediaDelete = function useMediaDelete() {
175
157
  var _useState = React.useState(false),
176
158
  _useState2 = _slicedToArray(_useState, 2),
177
- loading = _useState2[0],
178
- setLoading = _useState2[1];
159
+ deleting = _useState2[0],
160
+ setDeleting = _useState2[1];
179
161
  var api = useMediasApi();
180
- var destroy = React.useCallback(function (id, data) {
181
- setLoading(true);
162
+ var mediaDelete = React.useCallback(function (id, data) {
163
+ setDeleting(true);
182
164
  return api["delete"](id, data).then(function (response) {
183
- setLoading(false);
165
+ setDeleting(false);
184
166
  return response;
185
167
  });
186
- }, [api, setLoading]);
168
+ }, [api, setDeleting]);
187
169
  return {
188
- destroy: destroy,
189
- loading: loading
170
+ mediaDelete: mediaDelete,
171
+ deleting: deleting
190
172
  };
191
173
  };
174
+ var useMediaDelete$1 = useMediaDelete;
175
+
176
+ var useMediaTrash = function useMediaTrash() {
177
+ var _useState = React.useState(false),
178
+ _useState2 = _slicedToArray(_useState, 2),
179
+ trashing = _useState2[0],
180
+ setTrashing = _useState2[1];
181
+ var api = useMediasApi();
182
+ var mediaTrash = React.useCallback(function (id, data) {
183
+ setTrashing(true);
184
+ return api.trash(id, data).then(function (response) {
185
+ setTrashing(false);
186
+ return response;
187
+ });
188
+ }, [api, setTrashing]);
189
+ return {
190
+ mediaTrash: mediaTrash,
191
+ trashing: trashing
192
+ };
193
+ };
194
+ var useMediaTrash$1 = useMediaTrash;
192
195
 
193
196
  var styles = {"mediaFrame":"panneau-medias-mediaFrame","playButton":"panneau-medias-playButton"};
194
197
 
@@ -383,6 +386,7 @@ var propTypes$7 = {
383
386
  onSave: PropTypes.func,
384
387
  onDelete: PropTypes.func,
385
388
  onClose: PropTypes.func,
389
+ withTrash: PropTypes.bool,
386
390
  className: PropTypes.string,
387
391
  children: PropTypes.node
388
392
  };
@@ -393,6 +397,7 @@ var defaultProps$7 = {
393
397
  onSave: null,
394
398
  onDelete: null,
395
399
  onClose: null,
400
+ withTrash: false,
396
401
  className: null,
397
402
  children: null
398
403
  };
@@ -403,25 +408,31 @@ function MediaForm(_ref) {
403
408
  onSave = _ref.onSave,
404
409
  onDelete = _ref.onDelete,
405
410
  onClose = _ref.onClose,
411
+ withTrash = _ref.withTrash,
406
412
  className = _ref.className,
407
413
  children = _ref.children;
408
414
  var FieldsComponent = contexts.useFieldComponent('fields');
409
415
  var _useMediaUpdate = useMediaUpdate$1(),
410
416
  update = _useMediaUpdate.update,
411
- updating = _useMediaUpdate.loading;
412
- var _useMediaDestroy = useMediaDestroy(),
413
- destroy = _useMediaDestroy.destroy,
414
- destroying = _useMediaDestroy.loading;
417
+ updating = _useMediaUpdate.updating;
418
+ var _useMediaTrash = useMediaTrash$1(),
419
+ mediaTrash = _useMediaTrash.mediaTrash,
420
+ trashing = _useMediaTrash.trashing;
421
+ var _useMediaDelete = useMediaDelete$1(),
422
+ mediaDelete = _useMediaDelete.mediaDelete,
423
+ deleting = _useMediaDelete.deleting;
415
424
  var _useState = React.useState(false),
416
425
  _useState2 = _slicedToArray(_useState, 2),
417
426
  changed = _useState2[0],
418
427
  setChanged = _useState2[1];
419
- var disabled = updating || destroying || initialValue === null;
428
+ var disabled = updating || deleting || trashing || initialValue === null;
420
429
  var _ref2 = initialValue || {},
421
430
  _ref2$name = _ref2.name,
422
431
  name = _ref2$name === void 0 ? null : _ref2$name,
423
432
  _ref2$type = _ref2.type,
424
- type = _ref2$type === void 0 ? null : _ref2$type;
433
+ type = _ref2$type === void 0 ? null : _ref2$type,
434
+ _ref2$deletedAt = _ref2.deletedAt,
435
+ deletedAt = _ref2$deletedAt === void 0 ? null : _ref2$deletedAt;
425
436
  var onChangeMedia = React.useCallback(function (newValue) {
426
437
  if (onChange !== null) {
427
438
  onChange(newValue);
@@ -435,20 +446,32 @@ function MediaForm(_ref) {
435
446
  setChanged(false);
436
447
  }, [onChange, setChanged]);
437
448
  var onDeleteMedia = React.useCallback(function () {
438
- // Destroy
439
449
  var _ref3 = initialValue || {},
440
450
  _ref3$id = _ref3.id,
441
451
  id = _ref3$id === void 0 ? null : _ref3$id;
442
- destroy(id, initialValue).then(function () {
443
- if (onDelete !== null) {
444
- onDelete();
445
- }
446
- setChanged(false);
447
- if (onClose !== null) {
448
- onClose();
449
- }
450
- });
451
- }, [initialValue, destroy, destroying, setChanged]);
452
+ if (withTrash && deletedAt !== null) {
453
+ mediaTrash(id, initialValue).then(function () {
454
+ if (onDelete !== null) {
455
+ onDelete();
456
+ }
457
+ setChanged(false);
458
+ if (onClose !== null) {
459
+ onClose();
460
+ }
461
+ });
462
+ } else {
463
+ // Destroy
464
+ mediaDelete(id, initialValue).then(function () {
465
+ if (onDelete !== null) {
466
+ onDelete();
467
+ }
468
+ setChanged(false);
469
+ if (onClose !== null) {
470
+ onClose();
471
+ }
472
+ });
473
+ }
474
+ }, [initialValue, mediaDelete, mediaTrash, deletedAt, setChanged, withTrash]);
452
475
  var postForm = React.useCallback(function (action, data) {
453
476
  return initialValue !== null ? update(initialValue.id, data) : new Promise();
454
477
  }, [initialValue, update]);
@@ -479,9 +502,17 @@ function MediaForm(_ref) {
479
502
  }, type)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
480
503
  className: "me-2 mb-1 mt-1",
481
504
  theme: "danger",
505
+ icon: withTrash && deletedAt !== null ? 'trash-fill' : 'trash',
506
+ iconPosition: "right",
482
507
  onClick: onDeleteMedia,
483
- disabled: destroying
484
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
508
+ disabled: deleting || trashing
509
+ }, withTrash && deletedAt === null ? /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
510
+ id: "PSlT7H",
511
+ defaultMessage: [{
512
+ "type": 0,
513
+ "value": "Trash"
514
+ }]
515
+ }) : /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
485
516
  id: "Bhu3B2",
486
517
  defaultMessage: [{
487
518
  "type": 0,
@@ -490,8 +521,10 @@ function MediaForm(_ref) {
490
521
  })), onSave !== null ? /*#__PURE__*/React.createElement(Button, {
491
522
  className: "mb-1 mt-1",
492
523
  theme: "primary",
524
+ icon: changed ? 'check-all' : 'check',
525
+ iconPosition: "right",
493
526
  onClick: onSubmit,
494
- disabled: !changed || updating || destroying
527
+ disabled: !changed || updating || deleting
495
528
  }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
496
529
  id: "R1HYj0",
497
530
  defaultMessage: [{
@@ -682,7 +715,7 @@ var defaultColumns = [{
682
715
  "value": "Actions"
683
716
  }]
684
717
  }),
685
- actions: ['edit']
718
+ actions: ['edit', 'delete']
686
719
  // component: ItemActions,
687
720
  // label: 'Edit',
688
721
  // url: '/edit/1',
@@ -771,7 +804,7 @@ var defaultFilters = [{
771
804
  ];
772
805
 
773
806
  var _excluded$5 = ["page", "count"],
774
- _excluded2 = ["types"];
807
+ _excluded2 = ["types", "trashed"];
775
808
  var propTypes$5 = {
776
809
  items: core.PropTypes.medias,
777
810
  extraItems: core.PropTypes.medias,
@@ -790,8 +823,11 @@ var propTypes$5 = {
790
823
  onLayoutChange: PropTypes.func,
791
824
  selectedCount: PropTypes.number,
792
825
  onClearSelected: PropTypes.func,
826
+ withTrash: PropTypes.bool,
827
+ withStickySelection: PropTypes.bool,
793
828
  className: PropTypes.string,
794
- buttonsClassName: PropTypes.string
829
+ buttonsClassName: PropTypes.string,
830
+ formChildren: PropTypes.node
795
831
  };
796
832
  var defaultProps$5 = {
797
833
  items: null,
@@ -821,8 +857,11 @@ var defaultProps$5 = {
821
857
  onLayoutChange: null,
822
858
  selectedCount: null,
823
859
  onClearSelected: null,
860
+ withTrash: false,
861
+ withStickySelection: false,
824
862
  className: null,
825
- buttonsClassName: null
863
+ buttonsClassName: null,
864
+ formChildren: null
826
865
  };
827
866
  function MediasBrowser(_ref) {
828
867
  var initialItems = _ref.items,
@@ -842,8 +881,11 @@ function MediasBrowser(_ref) {
842
881
  onLayoutChange = _ref.onLayoutChange,
843
882
  selectedCount = _ref.selectedCount,
844
883
  onClearSelected = _ref.onClearSelected,
884
+ withTrash = _ref.withTrash,
885
+ withStickySelection = _ref.withStickySelection,
845
886
  className = _ref.className,
846
- buttonsClassName = _ref.buttonsClassName;
887
+ buttonsClassName = _ref.buttonsClassName,
888
+ formChildren = _ref.formChildren;
847
889
  var _useState = React.useState(initialItems || null),
848
890
  _useState2 = _slicedToArray(_useState, 1),
849
891
  baseItems = _useState2[0];
@@ -882,14 +924,35 @@ function MediasBrowser(_ref) {
882
924
  // eslint-disable-next-line no-unused-vars
883
925
  var _ref3 = query || {};
884
926
  _ref3.types;
927
+ _ref3.trashed;
885
928
  var queryWithoutTypes = _objectWithoutProperties(_ref3, _excluded2);
929
+ var _useMediaTrash = useMediaTrash$1(),
930
+ mediaTrash = _useMediaTrash.mediaTrash,
931
+ trashing = _useMediaTrash.trashing;
932
+ var _useMediaDelete = useMediaDelete$1(),
933
+ mediaDelete = _useMediaDelete.mediaDelete,
934
+ deleting = _useMediaDelete.deleting;
935
+ var _useState3 = React.useState(false),
936
+ _useState4 = _slicedToArray(_useState3, 2),
937
+ showTrashed = _useState4[0],
938
+ setShowTrashed = _useState4[1];
939
+ var onClickTrash = React.useCallback(function () {
940
+ setShowTrashed(!showTrashed);
941
+ }, [showTrashed, setShowTrashed]);
886
942
  var _useMedias = useMedias$1(query, page, count, {
887
- items: baseItems
943
+ items: baseItems,
944
+ trashed: showTrashed
888
945
  }),
889
- items = _useMedias.medias,
890
- loading = _useMedias.loading,
891
- lastPage = _useMedias.lastPage,
892
- total = _useMedias.total;
946
+ items = _useMedias.items,
947
+ allItems = _useMedias.allItems,
948
+ _useMedias$loading = _useMedias.loading,
949
+ loading = _useMedias$loading === void 0 ? false : _useMedias$loading,
950
+ _useMedias$updateItem = _useMedias.updateItem,
951
+ updateItem = _useMedias$updateItem === void 0 ? null : _useMedias$updateItem,
952
+ _useMedias$pagination = _useMedias.pagination,
953
+ _useMedias$pagination2 = _useMedias$pagination === void 0 ? {} : _useMedias$pagination,
954
+ lastPage = _useMedias$pagination2.lastPage,
955
+ total = _useMedias$pagination2.total;
893
956
 
894
957
  // For picker
895
958
  React.useEffect(function () {
@@ -897,10 +960,10 @@ function MediasBrowser(_ref) {
897
960
  onItemsChange(items);
898
961
  }
899
962
  }, [items, onItemsChange]);
900
- var _useState3 = React.useState(initialLayout || 'table'),
901
- _useState4 = _slicedToArray(_useState3, 2),
902
- layout = _useState4[0],
903
- setLayout = _useState4[1];
963
+ var _useState5 = React.useState(initialLayout || 'table'),
964
+ _useState6 = _slicedToArray(_useState5, 2),
965
+ layout = _useState6[0],
966
+ setLayout = _useState6[1];
904
967
  var hasLayouts = React.useMemo(function () {
905
968
  return layouts !== null && layouts.length > 1;
906
969
  }, [layouts]);
@@ -921,10 +984,10 @@ function MediasBrowser(_ref) {
921
984
  var onCloseMedia = React.useCallback(function () {
922
985
  setCurrentMedia(null);
923
986
  }, [setCurrentMedia]);
924
- var onSaveMedia = React.useCallback(function () {
987
+ var onSaveMedia = React.useCallback(function (item) {
925
988
  setCurrentMedia(null);
926
- onQueryReset();
927
- }, [setCurrentMedia, onQueryReset]);
989
+ updateItem(item);
990
+ }, [setCurrentMedia, updateItem]);
928
991
  var pagination = /*#__PURE__*/React.createElement(Pagination, {
929
992
  page: page,
930
993
  lastPage: lastPage,
@@ -940,8 +1003,17 @@ function MediasBrowser(_ref) {
940
1003
  alwaysShowButtons: true
941
1004
  });
942
1005
  var finalFilters = React.useMemo(function () {
943
- if (types !== null && filters !== null) {
944
- return (filters || []).map(function (filter) {
1006
+ var partialFilters = withTrash ? (filters || []).concat([{
1007
+ name: 'trashed',
1008
+ component: 'button',
1009
+ theme: showTrashed ? 'danger' : 'secondary',
1010
+ outline: !showTrashed,
1011
+ activeTheme: 'danger',
1012
+ icon: showTrashed ? 'trash-fill' : 'trash',
1013
+ onClick: onClickTrash
1014
+ }]) : filters;
1015
+ if (types !== null && partialFilters !== null) {
1016
+ return (partialFilters || []).map(function (filter) {
945
1017
  var _ref4 = filter || {},
946
1018
  _ref4$id = _ref4.id,
947
1019
  id = _ref4$id === void 0 ? null : _ref4$id;
@@ -950,16 +1022,47 @@ function MediasBrowser(_ref) {
950
1022
  }) : filter;
951
1023
  });
952
1024
  }
953
- return filters;
954
- }, [filters, types]);
1025
+ return partialFilters;
1026
+ }, [filters, types, withTrash, showTrashed, onClickTrash]);
1027
+ var finalColumns = React.useMemo(function () {
1028
+ return withTrash && showTrashed ? (columns || []).map(function (column) {
1029
+ var _ref5 = column || {},
1030
+ _ref5$id = _ref5.id,
1031
+ columnId = _ref5$id === void 0 ? null : _ref5$id;
1032
+ if (columnId === 'created_at') {
1033
+ return _objectSpread(_objectSpread({}, column), {}, {
1034
+ path: 'deleted_at',
1035
+ label: /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
1036
+ id: "uds4wJ",
1037
+ defaultMessage: [{
1038
+ "type": 0,
1039
+ "value": "Deleted at"
1040
+ }]
1041
+ })
1042
+ });
1043
+ }
1044
+ return column;
1045
+ }) : columns;
1046
+ }, [columns, withTrash, showTrashed]);
955
1047
  var finalItems = React.useMemo(function () {
956
- if (page === 1 && extraItems !== null) {
957
- return uniqBy([].concat(_toConsumableArray(extraItems), _toConsumableArray(items || [])), function (it) {
1048
+ if (withStickySelection && extraItems !== null) {
1049
+ return uniqBy([].concat(_toConsumableArray((extraItems || []).map(function (item) {
1050
+ var _item$id = item.id,
1051
+ itemId = _item$id === void 0 ? null : _item$id;
1052
+ return (allItems || []).find(function () {
1053
+ var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1054
+ _ref6$id = _ref6.id,
1055
+ otherId = _ref6$id === void 0 ? null : _ref6$id;
1056
+ return otherId === itemId;
1057
+ }) || item || null;
1058
+ }).filter(function (it) {
1059
+ return it !== null;
1060
+ })), _toConsumableArray(items || [])), function (it) {
958
1061
  return it === null || it === void 0 ? void 0 : it.id;
959
1062
  });
960
1063
  }
961
1064
  return items;
962
- }, [items, page, extraItems]);
1065
+ }, [items, page, allItems, withStickySelection, extraItems]);
963
1066
  return /*#__PURE__*/React.createElement("div", {
964
1067
  className: classNames([styles.container, className])
965
1068
  }, currentMedia !== null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -979,8 +1082,9 @@ function MediasBrowser(_ref) {
979
1082
  fields: fields,
980
1083
  onChange: setCurrentMedia,
981
1084
  onSave: onSaveMedia,
982
- onClose: onCloseMedia
983
- })) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1085
+ onClose: onCloseMedia,
1086
+ withTrash: withTrash
1087
+ }, formChildren)) : /*#__PURE__*/React.createElement(React.Fragment, null, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
984
1088
  value: query,
985
1089
  clearValue: types !== null ? queryWithoutTypes : null,
986
1090
  filters: finalFilters,
@@ -992,10 +1096,10 @@ function MediasBrowser(_ref) {
992
1096
  className: buttonsClassName
993
1097
  }) : null) : null, filters === null && buttons !== null ? /*#__PURE__*/React.createElement("div", {
994
1098
  className: "mt-2 mb-2"
995
- }, buttons !== null ? /*#__PURE__*/React.createElement(Buttons, {
1099
+ }, /*#__PURE__*/React.createElement(Buttons, {
996
1100
  items: buttons,
997
1101
  className: buttonsClassName
998
- }) : null) : null, /*#__PURE__*/React.createElement("div", {
1102
+ })) : null, /*#__PURE__*/React.createElement("div", {
999
1103
  className: classNames(['d-flex', 'mt-1', 'mb-3', {
1000
1104
  'justify-content-between': hasLayouts,
1001
1105
  'justify-content-end': !hasLayouts
@@ -1033,7 +1137,7 @@ function MediasBrowser(_ref) {
1033
1137
  loading: loading
1034
1138
  })) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, Object.assign({
1035
1139
  theme: theme,
1036
- columns: columns,
1140
+ columns: finalColumns,
1037
1141
  displayPlaceholder: /*#__PURE__*/React.createElement("span", {
1038
1142
  className: "text-secondary text-opacity-75"
1039
1143
  }, "\u2014"),
@@ -1044,6 +1148,19 @@ function MediasBrowser(_ref) {
1044
1148
  items: finalItems,
1045
1149
  loading: loading,
1046
1150
  actionsProps: {
1151
+ getDeletePropsFromItem: function getDeletePropsFromItem() {
1152
+ var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1153
+ _ref7$id = _ref7.id,
1154
+ id = _ref7$id === void 0 ? null : _ref7$id;
1155
+ return {
1156
+ href: null,
1157
+ onClick: function onClick() {
1158
+ return showTrashed ? mediaDelete(id) : mediaTrash(id);
1159
+ },
1160
+ disabled: trashing || deleting,
1161
+ icon: showTrashed ? 'trash-fill' : 'trash'
1162
+ };
1163
+ },
1047
1164
  getEditPropsFromItem: function getEditPropsFromItem(it) {
1048
1165
  return {
1049
1166
  href: null,
@@ -1098,18 +1215,20 @@ function MediasPicker(_ref) {
1098
1215
  tableProps = _ref.tableProps,
1099
1216
  className = _ref.className,
1100
1217
  props = _objectWithoutProperties(_ref, _excluded$4);
1101
- // For selection only
1218
+ var _useMediasForm = useMediasForm(),
1219
+ currentMedia = _useMediasForm.media;
1220
+
1221
+ // For selection
1102
1222
  var _useState = React.useState(initialItems),
1103
1223
  _useState2 = _slicedToArray(_useState, 2),
1104
- currentItems = _useState2[0],
1224
+ pageItems = _useState2[0],
1105
1225
  setItems = _useState2[1];
1106
- var onItemsChange = React.useCallback(function (pageItems) {
1107
- setItems(pageItems);
1226
+ var disabled = pageItems === null || pageItems.length < 1;
1227
+ var onItemsChange = React.useCallback(function (newPageItems) {
1228
+ setItems(newPageItems);
1108
1229
  }, [setItems]);
1109
- var _useMediasForm = useMediasForm(),
1110
- currentMedia = _useMediasForm.media;
1111
1230
  var _useItemSelection = hooks.useItemSelection({
1112
- currentItems: currentItems,
1231
+ items: pageItems,
1113
1232
  selectedItems: initialSelectedItems,
1114
1233
  onSelectionChange: onChange,
1115
1234
  multipleSelection: multiple
@@ -1120,7 +1239,6 @@ function MediasPicker(_ref) {
1120
1239
  pageSelected = _useItemSelection.pageSelected,
1121
1240
  selectedCount = _useItemSelection.selectedCount,
1122
1241
  selectedItems = _useItemSelection.selectedItems;
1123
- var disabled = currentItems === null || currentItems.length < 1;
1124
1242
  var onConfirmSelection = React.useCallback(function () {
1125
1243
  if (onConfirm !== null) {
1126
1244
  onConfirm(selectedItems);
@@ -1136,13 +1254,14 @@ function MediasPicker(_ref) {
1136
1254
  onSelectPage: onSelectPage,
1137
1255
  selectedItems: selectedItems,
1138
1256
  pageSelected: pageSelected
1139
- }, tableProps)
1140
- // items={initialItems} // TODO: fix useItems if using this
1257
+ }, tableProps),
1258
+ items: initialItems // TODO: fix useItems if actually using this
1141
1259
  ,
1142
1260
  onItemsChange: onItemsChange,
1143
1261
  selectedCount: selectedCount,
1144
1262
  onClearSelected: onClearSelected,
1145
- types: types
1263
+ types: types,
1264
+ extraItems: !multiple && initialSelectedItems !== null ? [initialSelectedItems] : initialSelectedItems
1146
1265
  }, props)), multiple && !withoutButtons && currentMedia === null ? /*#__PURE__*/React.createElement("div", {
1147
1266
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
1148
1267
  }, /*#__PURE__*/React.createElement("div", {
@@ -1402,7 +1521,8 @@ exports.fields = defaultFields;
1402
1521
  exports.filters = defaultFilters;
1403
1522
  exports.useMedia = useMedia$1;
1404
1523
  exports.useMediaCreate = useMediaCreate$1;
1524
+ exports.useMediaDelete = useMediaDelete$1;
1525
+ exports.useMediaTrash = useMediaTrash$1;
1405
1526
  exports.useMediaUpdate = useMediaUpdate$1;
1406
1527
  exports.useMedias = useMedias$1;
1407
1528
  exports.useMediasApi = useMediasApi;
1408
- exports.useMediasRecentSearches = useMediasRecent$1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/medias",
3
- "version": "3.0.172",
3
+ "version": "3.0.174",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -46,20 +46,20 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@babel/runtime": "^7.12.5",
49
- "@panneau/core": "^3.0.169",
50
- "@panneau/data": "^3.0.169",
51
- "@panneau/display-image": "^3.0.172",
52
- "@panneau/element-button": "^3.0.169",
53
- "@panneau/element-buttons": "^3.0.169",
54
- "@panneau/element-form": "^3.0.169",
55
- "@panneau/element-form-status": "^3.0.169",
56
- "@panneau/element-grid": "^3.0.172",
57
- "@panneau/element-icon": "^3.0.169",
58
- "@panneau/element-media-card": "^3.0.172",
59
- "@panneau/element-media-player": "^3.0.172",
60
- "@panneau/element-pagination": "^3.0.169",
61
- "@panneau/element-table": "^3.0.170",
62
- "@panneau/filter-filters": "^3.0.171",
49
+ "@panneau/core": "^3.0.174",
50
+ "@panneau/data": "^3.0.174",
51
+ "@panneau/display-image": "^3.0.174",
52
+ "@panneau/element-button": "^3.0.174",
53
+ "@panneau/element-buttons": "^3.0.174",
54
+ "@panneau/element-form": "^3.0.174",
55
+ "@panneau/element-form-status": "^3.0.174",
56
+ "@panneau/element-grid": "^3.0.174",
57
+ "@panneau/element-icon": "^3.0.174",
58
+ "@panneau/element-media-card": "^3.0.174",
59
+ "@panneau/element-media-player": "^3.0.174",
60
+ "@panneau/element-pagination": "^3.0.174",
61
+ "@panneau/element-table": "^3.0.174",
62
+ "@panneau/filter-filters": "^3.0.174",
63
63
  "classnames": "^2.5.1",
64
64
  "lodash": "^4.17.21",
65
65
  "prop-types": "^15.7.2",
@@ -68,5 +68,5 @@
68
68
  "publishConfig": {
69
69
  "access": "public"
70
70
  },
71
- "gitHead": "74ada3ded1a27ab2d7008d67790d8431f57c5b0a"
71
+ "gitHead": "0b3a328b97ef9e9c02f8cfe731ac50a1611dc854"
72
72
  }