@micromag/data 0.3.329 → 0.3.334

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 +233 -30
  2. package/lib/index.js +234 -29
  3. package/package.json +4 -3
package/es/index.js CHANGED
@@ -8,9 +8,10 @@ import _inherits from '@babel/runtime/helpers/inherits';
8
8
  import _createSuper from '@babel/runtime/helpers/createSuper';
9
9
  import { getJSON, getCSRFHeaders, postJSON } from '@folklore/fetch';
10
10
  import { generatePath } from 'react-router';
11
- import { stringify } from 'query-string';
11
+ import { stringify, parse } from 'query-string';
12
12
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
13
13
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
14
+ import isString from 'lodash/isString';
14
15
  import { useVisitor, useStory } from '@micromag/core/contexts';
15
16
 
16
17
  var Base = /*#__PURE__*/function () {
@@ -128,6 +129,7 @@ var MediasApi = /*#__PURE__*/function (_Base) {
128
129
  index: 'medias',
129
130
  tags: 'medias/tags',
130
131
  authors: 'medias/authors',
132
+ requestDelete: 'medias/requestDelete/:media',
131
133
  show: 'medias/:media',
132
134
  store: 'medias',
133
135
  update: 'medias/:media',
@@ -191,6 +193,13 @@ var MediasApi = /*#__PURE__*/function (_Base) {
191
193
  media: id
192
194
  }), data);
193
195
  }
196
+ }, {
197
+ key: "requestDeleteMedia",
198
+ value: function requestDeleteMedia(id) {
199
+ return this.requestPost(this.route('requestDelete', {
200
+ media: id
201
+ }));
202
+ }
194
203
  }, {
195
204
  key: "delete",
196
205
  value: function _delete(id) {
@@ -368,7 +377,7 @@ var useData = function useData(loadData) {
368
377
  };
369
378
  };
370
379
 
371
- var _excluded$4 = ["data"];
380
+ var _excluded$3 = ["data"];
372
381
  var useContributions = function useContributions() {
373
382
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
374
383
  screenId = _ref.screenId,
@@ -390,13 +399,13 @@ var useContributions = function useContributions() {
390
399
  data: null
391
400
  },
392
401
  data = _ref2.data,
393
- request = _objectWithoutProperties(_ref2, _excluded$4);
402
+ request = _objectWithoutProperties(_ref2, _excluded$3);
394
403
  return _objectSpread({
395
404
  contributions: data || defaultContributions
396
405
  }, request);
397
406
  };
398
407
 
399
- var useItems = function useItems(_ref) {
408
+ var useItems$1 = function useItems(_ref) {
400
409
  var _ref$getPage = _ref.getPage,
401
410
  getPage = _ref$getPage === void 0 ? null : _ref$getPage,
402
411
  _ref$getItems = _ref.getItems,
@@ -608,7 +617,7 @@ var useItems = function useItems(_ref) {
608
617
  };
609
618
  };
610
619
 
611
- var _excluded$3 = ["data"];
620
+ var _excluded$2 = ["data"];
612
621
  var useMedia = function useMedia(id, opts) {
613
622
  var api = useApi();
614
623
  var loader = useCallback(function () {
@@ -616,7 +625,7 @@ var useMedia = function useMedia(id, opts) {
616
625
  }, [api, id]);
617
626
  var _useData = useData(loader, opts),
618
627
  data = _useData.data,
619
- request = _objectWithoutProperties(_useData, _excluded$3);
628
+ request = _objectWithoutProperties(_useData, _excluded$2);
620
629
  return _objectSpread({
621
630
  story: data
622
631
  }, request);
@@ -660,30 +669,205 @@ var useMediaCreate = function useMediaCreate() {
660
669
  };
661
670
  };
662
671
 
663
- var _excluded$2 = ["items", "pageItems"];
672
+ var useItems = function useItems(_ref) {
673
+ var _ref$getPage = _ref.getPage,
674
+ getPage = _ref$getPage === void 0 ? null : _ref$getPage,
675
+ _ref$page = _ref.page,
676
+ page = _ref$page === void 0 ? 1 : _ref$page,
677
+ _ref$count = _ref.count,
678
+ count = _ref$count === void 0 ? 10 : _ref$count,
679
+ _ref$query = _ref.query,
680
+ pageQuery = _ref$query === void 0 ? null : _ref$query,
681
+ _ref$pages = _ref.pages,
682
+ startingPages = _ref$pages === void 0 ? null : _ref$pages,
683
+ _ref$getPageFromRespo = _ref.getPageFromResponse,
684
+ getPageFromResponse = _ref$getPageFromRespo === void 0 ? function (newPage) {
685
+ return newPage;
686
+ } : _ref$getPageFromRespo,
687
+ _ref$getPagination = _ref.getPagination,
688
+ getPagination = _ref$getPagination === void 0 ? function () {
689
+ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
690
+ cp = _ref2.current_page,
691
+ pp = _ref2.per_page,
692
+ lp = _ref2.last_page,
693
+ total = _ref2.total;
694
+ return {
695
+ pageNumber: cp,
696
+ pageCount: pp,
697
+ lastPage: lp,
698
+ total: total
699
+ };
700
+ } : _ref$getPagination,
701
+ _ref$onLoaded = _ref.onLoaded,
702
+ onLoaded = _ref$onLoaded === void 0 ? null : _ref$onLoaded,
703
+ _ref$onError = _ref.onError,
704
+ onError = _ref$onError === void 0 ? null : _ref$onError;
705
+ // Pagination
706
+ var _useState = useState(page !== null),
707
+ _useState2 = _slicedToArray(_useState, 2),
708
+ paginated = _useState2[0],
709
+ setPaginated = _useState2[1];
710
+ var _useState3 = useState(null),
711
+ _useState4 = _slicedToArray(_useState3, 2),
712
+ pagination = _useState4[0],
713
+ setPagination = _useState4[1];
714
+ var _getPagination = getPagination(pagination || {}),
715
+ _getPagination$pageNu = _getPagination.pageNumber,
716
+ pageNumber = _getPagination$pageNu === void 0 ? page : _getPagination$pageNu,
717
+ _getPagination$pageCo = _getPagination.pageCount,
718
+ pageCount = _getPagination$pageCo === void 0 ? count : _getPagination$pageCo,
719
+ _getPagination$lastPa = _getPagination.lastPage,
720
+ lastPage = _getPagination$lastPa === void 0 ? null : _getPagination$lastPa,
721
+ _getPagination$total = _getPagination.total,
722
+ total = _getPagination$total === void 0 ? null : _getPagination$total;
723
+ var _useMemo = useMemo(function () {
724
+ return (startingPages || []).reduce(function (paginatedData, it) {
725
+ var _ref3 = it || {},
726
+ items = _ref3.data,
727
+ currentPagination = _ref3.pagination;
728
+ // eslint-disable-next-line no-param-reassign
729
+ paginatedData.data = paginatedData.data.concat(items);
730
+ // eslint-disable-next-line no-param-reassign
731
+ paginatedData.pagination = currentPagination;
732
+ return paginatedData;
733
+ }, {
734
+ data: [],
735
+ pagination: {}
736
+ });
737
+ }, [startingPages]),
738
+ initialPages = _useMemo.data,
739
+ initialPagination = _useMemo.pagination;
740
+ var _useState5 = useState(startingPages === null),
741
+ _useState6 = _slicedToArray(_useState5, 2),
742
+ canLoad = _useState6[0],
743
+ setCanLoad = _useState6[1];
744
+ var _useState7 = useState(false),
745
+ _useState8 = _slicedToArray(_useState7, 2),
746
+ loading = _useState8[0],
747
+ setLoading = _useState8[1];
748
+
749
+ // Query
750
+ var query = useMemo(function () {
751
+ return _objectSpread({}, isString(pageQuery) ? parse(pageQuery || null, {
752
+ arrayFormat: 'bracket'
753
+ }) : pageQuery);
754
+ }, [pageQuery]);
755
+
756
+ // Items
757
+ var _useState9 = useState(null),
758
+ _useState10 = _slicedToArray(_useState9, 2),
759
+ items = _useState10[0],
760
+ setItems = _useState10[1];
761
+ var getPages = useCallback(function (newQuery, newPageNumber, newPageCount) {
762
+ return getPage(newQuery, newPageNumber, newPageCount);
763
+ }, [getPage]);
764
+
765
+ // Api has changed, reset to beginning
766
+ useEffect(function () {
767
+ setItems(initialPages);
768
+ setPagination(initialPagination);
769
+ }, [getPages, setItems, setPagination]);
770
+ useEffect(function () {
771
+ // console.log('try to load');
772
+ if (!canLoad || loading || lastPage !== null && pageNumber > lastPage) {
773
+ // console.log('skips loading');
774
+ return;
775
+ }
776
+ // console.log('actually load', query, pageNumber, pageCount);
777
+ setLoading(true);
778
+ setCanLoad(false);
779
+ // TODO: make this a cancellable promise
780
+ getPages(query, pageNumber, pageCount).then(function (response) {
781
+ return getPageFromResponse(response);
782
+ }).then(function (response) {
783
+ var _ref4 = response || {},
784
+ _ref4$data = _ref4.data,
785
+ data = _ref4$data === void 0 ? null : _ref4$data,
786
+ _ref4$meta = _ref4.meta,
787
+ meta = _ref4$meta === void 0 ? null : _ref4$meta;
788
+ // console.log('response --- ', response);
789
+ // This is not a paginated list so we dont care anymore
790
+ if (data === null && meta === null) {
791
+ setItems(response);
792
+ setPaginated(false);
793
+ } else {
794
+ setItems(function (old) {
795
+ return [].concat(_toConsumableArray(old || null), _toConsumableArray(data));
796
+ });
797
+ setPagination(meta);
798
+ setPaginated(true);
799
+ }
800
+ return response;
801
+ }).then(function (response) {
802
+ setLoading(false);
803
+ if (onLoaded !== null) {
804
+ onLoaded(response);
805
+ }
806
+ })["catch"](function (e) {
807
+ // Error is real
808
+ setLoading(false);
809
+ if (onError !== null) {
810
+ onError(e);
811
+ }
812
+ });
813
+ }, [query, pageNumber, canLoad, getPages, setLoading, setItems, setPagination, onLoaded, onError]);
814
+ var reset = useCallback(function () {
815
+ setItems([]);
816
+ setPagination(null);
817
+ setCanLoad(true);
818
+ }, [setItems, setPagination, setCanLoad]);
819
+
820
+ // Resets the game, "natural" refresh
821
+ var onQueryChange = useEffect(function () {
822
+ reset();
823
+ }, [query, page, count, reset]);
824
+
825
+ // Handle to Load next
826
+ var loadNextPage = useCallback(function () {
827
+ if (!loading && pageNumber < lastPage) {
828
+ var params = _objectSpread(_objectSpread({}, pagination), {}, {
829
+ current_page: pageNumber + 1,
830
+ per_page: pageCount
831
+ });
832
+ setPagination(params);
833
+ setCanLoad(true);
834
+ }
835
+ }, [query, pagination, pageNumber, pageCount, loading, lastPage, onQueryChange, setCanLoad]);
836
+ var disabled = (items || []).length === 0 || loading || pageNumber >= lastPage || lastPage === null || lastPage === 1;
837
+ var regularLoaded = !paginated && items !== null;
838
+ var paginatedLoaded = !loading && items !== null && (items.length === total || pageNumber >= lastPage);
839
+ return {
840
+ items: items,
841
+ total: total,
842
+ page: pageNumber,
843
+ count: pageCount,
844
+ lastPage: lastPage,
845
+ loading: loading,
846
+ loaded: !loading,
847
+ allLoaded: regularLoaded || paginatedLoaded,
848
+ disabled: disabled,
849
+ loadNextPage: loadNextPage,
850
+ reset: reset
851
+ };
852
+ };
853
+
664
854
  var useMedias = function useMedias() {
665
855
  var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
666
- var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
667
- var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
856
+ var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
857
+ var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
668
858
  var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
669
859
  var api = useApi();
670
- var getItems = useCallback(function () {
671
- var requestedPage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
672
- return api.medias.get(query, requestedPage, count);
673
- }, [api, query, count]);
674
- var _useItems = useItems(_objectSpread({
675
- getPage: page !== null ? getItems : null,
676
- getItems: page === null ? getItems : null,
677
- page: page
678
- }, opts)),
679
- items = _useItems.items,
680
- pageItems = _useItems.pageItems,
681
- request = _objectWithoutProperties(_useItems, _excluded$2);
682
- // console.log('medias', items);
683
- return _objectSpread({
684
- medias: page !== null ? pageItems : items,
685
- allMedias: items
686
- }, request);
860
+ var getPage = useCallback(function (newQuery) {
861
+ var requestedPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
862
+ var requestedCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
863
+ return api.medias.get(newQuery, requestedPage, requestedCount);
864
+ }, [api]);
865
+ return useItems(_objectSpread({
866
+ getPage: getPage,
867
+ query: query,
868
+ page: page,
869
+ count: count
870
+ }, opts));
687
871
  };
688
872
 
689
873
  var useMediasRecent = function useMediasRecent(opts) {
@@ -722,7 +906,7 @@ var useMediaTags = function useMediaTags() {
722
906
  var getItems = useCallback(function () {
723
907
  return api.medias.getTags(query, count);
724
908
  }, [api, query, count]);
725
- var _useItems = useItems(_objectSpread({
909
+ var _useItems = useItems$1(_objectSpread({
726
910
  getItems: getItems
727
911
  }, opts)),
728
912
  items = _useItems.items;
@@ -752,15 +936,34 @@ var useMediaUpdate = function useMediaUpdate() {
752
936
  };
753
937
  };
754
938
 
939
+ var useMediaRequestDelete = function useMediaRequestDelete() {
940
+ var _useState = useState(false),
941
+ _useState2 = _slicedToArray(_useState, 2),
942
+ requesting = _useState2[0],
943
+ setRequesting = _useState2[1];
944
+ var api = useApi();
945
+ var requestDeleteMedia = useCallback(function (id) {
946
+ setRequesting(true);
947
+ return api.medias.requestDeleteMedia(id).then(function (response) {
948
+ setRequesting(false);
949
+ return response;
950
+ });
951
+ }, [api, setRequesting]);
952
+ return {
953
+ requestDeleteMedia: requestDeleteMedia,
954
+ requesting: requesting
955
+ };
956
+ };
957
+
755
958
  var useMediaDelete = function useMediaDelete() {
756
959
  var _useState = useState(false),
757
960
  _useState2 = _slicedToArray(_useState, 2),
758
961
  deleting = _useState2[0],
759
962
  setDeleting = _useState2[1];
760
963
  var api = useApi();
761
- var deleteMedia = useCallback(function (id, data) {
964
+ var deleteMedia = useCallback(function (id) {
762
965
  setDeleting(true);
763
- return api.medias["delete"](id, data).then(function (response) {
966
+ return api.medias["delete"](id).then(function (response) {
764
967
  setDeleting(false);
765
968
  return response;
766
969
  });
@@ -855,4 +1058,4 @@ var DataProvider = function DataProvider(_ref) {
855
1058
  DataProvider.propTypes = propTypes;
856
1059
  DataProvider.defaultProps = defaultProps;
857
1060
 
858
- export { Api, ApiProvider, Base as BaseApi, DataProvider, useApi, useContributionCreate, useContributions, useData, useItems, useMedia, useMediaAuthors, useMediaCreate, useMediaDelete, useMediaTags, useMediaUpdate, useMedias, useMediasRecent as useMediasRecentSearches, useQuiz, useQuizCreate };
1061
+ export { Api, ApiProvider, Base as BaseApi, DataProvider, useApi, useContributionCreate, useContributions, useData, useItems$1 as useItems, useMedia, useMediaAuthors, useMediaCreate, useMediaDelete, useMediaRequestDelete, useMediaTags, useMediaUpdate, useMedias, useMediasRecent as useMediasRecentSearches, useQuiz, useQuizCreate };
package/lib/index.js CHANGED
@@ -15,6 +15,7 @@ var reactRouter = require('react-router');
15
15
  var queryString = require('query-string');
16
16
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
17
17
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
18
+ var isString = require('lodash/isString');
18
19
  var contexts = require('@micromag/core/contexts');
19
20
 
20
21
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -29,6 +30,7 @@ var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
29
30
  var _createSuper__default = /*#__PURE__*/_interopDefaultLegacy(_createSuper);
30
31
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
31
32
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
33
+ var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
32
34
 
33
35
  var Base = /*#__PURE__*/function () {
34
36
  function Base() {
@@ -145,6 +147,7 @@ var MediasApi = /*#__PURE__*/function (_Base) {
145
147
  index: 'medias',
146
148
  tags: 'medias/tags',
147
149
  authors: 'medias/authors',
150
+ requestDelete: 'medias/requestDelete/:media',
148
151
  show: 'medias/:media',
149
152
  store: 'medias',
150
153
  update: 'medias/:media',
@@ -208,6 +211,13 @@ var MediasApi = /*#__PURE__*/function (_Base) {
208
211
  media: id
209
212
  }), data);
210
213
  }
214
+ }, {
215
+ key: "requestDeleteMedia",
216
+ value: function requestDeleteMedia(id) {
217
+ return this.requestPost(this.route('requestDelete', {
218
+ media: id
219
+ }));
220
+ }
211
221
  }, {
212
222
  key: "delete",
213
223
  value: function _delete(id) {
@@ -385,7 +395,7 @@ var useData = function useData(loadData) {
385
395
  };
386
396
  };
387
397
 
388
- var _excluded$4 = ["data"];
398
+ var _excluded$3 = ["data"];
389
399
  var useContributions = function useContributions() {
390
400
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
391
401
  screenId = _ref.screenId,
@@ -407,13 +417,13 @@ var useContributions = function useContributions() {
407
417
  data: null
408
418
  },
409
419
  data = _ref2.data,
410
- request = _objectWithoutProperties__default["default"](_ref2, _excluded$4);
420
+ request = _objectWithoutProperties__default["default"](_ref2, _excluded$3);
411
421
  return _objectSpread__default["default"]({
412
422
  contributions: data || defaultContributions
413
423
  }, request);
414
424
  };
415
425
 
416
- var useItems = function useItems(_ref) {
426
+ var useItems$1 = function useItems(_ref) {
417
427
  var _ref$getPage = _ref.getPage,
418
428
  getPage = _ref$getPage === void 0 ? null : _ref$getPage,
419
429
  _ref$getItems = _ref.getItems,
@@ -625,7 +635,7 @@ var useItems = function useItems(_ref) {
625
635
  };
626
636
  };
627
637
 
628
- var _excluded$3 = ["data"];
638
+ var _excluded$2 = ["data"];
629
639
  var useMedia = function useMedia(id, opts) {
630
640
  var api = useApi();
631
641
  var loader = React.useCallback(function () {
@@ -633,7 +643,7 @@ var useMedia = function useMedia(id, opts) {
633
643
  }, [api, id]);
634
644
  var _useData = useData(loader, opts),
635
645
  data = _useData.data,
636
- request = _objectWithoutProperties__default["default"](_useData, _excluded$3);
646
+ request = _objectWithoutProperties__default["default"](_useData, _excluded$2);
637
647
  return _objectSpread__default["default"]({
638
648
  story: data
639
649
  }, request);
@@ -677,30 +687,205 @@ var useMediaCreate = function useMediaCreate() {
677
687
  };
678
688
  };
679
689
 
680
- var _excluded$2 = ["items", "pageItems"];
690
+ var useItems = function useItems(_ref) {
691
+ var _ref$getPage = _ref.getPage,
692
+ getPage = _ref$getPage === void 0 ? null : _ref$getPage,
693
+ _ref$page = _ref.page,
694
+ page = _ref$page === void 0 ? 1 : _ref$page,
695
+ _ref$count = _ref.count,
696
+ count = _ref$count === void 0 ? 10 : _ref$count,
697
+ _ref$query = _ref.query,
698
+ pageQuery = _ref$query === void 0 ? null : _ref$query,
699
+ _ref$pages = _ref.pages,
700
+ startingPages = _ref$pages === void 0 ? null : _ref$pages,
701
+ _ref$getPageFromRespo = _ref.getPageFromResponse,
702
+ getPageFromResponse = _ref$getPageFromRespo === void 0 ? function (newPage) {
703
+ return newPage;
704
+ } : _ref$getPageFromRespo,
705
+ _ref$getPagination = _ref.getPagination,
706
+ getPagination = _ref$getPagination === void 0 ? function () {
707
+ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
708
+ cp = _ref2.current_page,
709
+ pp = _ref2.per_page,
710
+ lp = _ref2.last_page,
711
+ total = _ref2.total;
712
+ return {
713
+ pageNumber: cp,
714
+ pageCount: pp,
715
+ lastPage: lp,
716
+ total: total
717
+ };
718
+ } : _ref$getPagination,
719
+ _ref$onLoaded = _ref.onLoaded,
720
+ onLoaded = _ref$onLoaded === void 0 ? null : _ref$onLoaded,
721
+ _ref$onError = _ref.onError,
722
+ onError = _ref$onError === void 0 ? null : _ref$onError;
723
+ // Pagination
724
+ var _useState = React.useState(page !== null),
725
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
726
+ paginated = _useState2[0],
727
+ setPaginated = _useState2[1];
728
+ var _useState3 = React.useState(null),
729
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
730
+ pagination = _useState4[0],
731
+ setPagination = _useState4[1];
732
+ var _getPagination = getPagination(pagination || {}),
733
+ _getPagination$pageNu = _getPagination.pageNumber,
734
+ pageNumber = _getPagination$pageNu === void 0 ? page : _getPagination$pageNu,
735
+ _getPagination$pageCo = _getPagination.pageCount,
736
+ pageCount = _getPagination$pageCo === void 0 ? count : _getPagination$pageCo,
737
+ _getPagination$lastPa = _getPagination.lastPage,
738
+ lastPage = _getPagination$lastPa === void 0 ? null : _getPagination$lastPa,
739
+ _getPagination$total = _getPagination.total,
740
+ total = _getPagination$total === void 0 ? null : _getPagination$total;
741
+ var _useMemo = React.useMemo(function () {
742
+ return (startingPages || []).reduce(function (paginatedData, it) {
743
+ var _ref3 = it || {},
744
+ items = _ref3.data,
745
+ currentPagination = _ref3.pagination;
746
+ // eslint-disable-next-line no-param-reassign
747
+ paginatedData.data = paginatedData.data.concat(items);
748
+ // eslint-disable-next-line no-param-reassign
749
+ paginatedData.pagination = currentPagination;
750
+ return paginatedData;
751
+ }, {
752
+ data: [],
753
+ pagination: {}
754
+ });
755
+ }, [startingPages]),
756
+ initialPages = _useMemo.data,
757
+ initialPagination = _useMemo.pagination;
758
+ var _useState5 = React.useState(startingPages === null),
759
+ _useState6 = _slicedToArray__default["default"](_useState5, 2),
760
+ canLoad = _useState6[0],
761
+ setCanLoad = _useState6[1];
762
+ var _useState7 = React.useState(false),
763
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
764
+ loading = _useState8[0],
765
+ setLoading = _useState8[1];
766
+
767
+ // Query
768
+ var query = React.useMemo(function () {
769
+ return _objectSpread__default["default"]({}, isString__default["default"](pageQuery) ? queryString.parse(pageQuery || null, {
770
+ arrayFormat: 'bracket'
771
+ }) : pageQuery);
772
+ }, [pageQuery]);
773
+
774
+ // Items
775
+ var _useState9 = React.useState(null),
776
+ _useState10 = _slicedToArray__default["default"](_useState9, 2),
777
+ items = _useState10[0],
778
+ setItems = _useState10[1];
779
+ var getPages = React.useCallback(function (newQuery, newPageNumber, newPageCount) {
780
+ return getPage(newQuery, newPageNumber, newPageCount);
781
+ }, [getPage]);
782
+
783
+ // Api has changed, reset to beginning
784
+ React.useEffect(function () {
785
+ setItems(initialPages);
786
+ setPagination(initialPagination);
787
+ }, [getPages, setItems, setPagination]);
788
+ React.useEffect(function () {
789
+ // console.log('try to load');
790
+ if (!canLoad || loading || lastPage !== null && pageNumber > lastPage) {
791
+ // console.log('skips loading');
792
+ return;
793
+ }
794
+ // console.log('actually load', query, pageNumber, pageCount);
795
+ setLoading(true);
796
+ setCanLoad(false);
797
+ // TODO: make this a cancellable promise
798
+ getPages(query, pageNumber, pageCount).then(function (response) {
799
+ return getPageFromResponse(response);
800
+ }).then(function (response) {
801
+ var _ref4 = response || {},
802
+ _ref4$data = _ref4.data,
803
+ data = _ref4$data === void 0 ? null : _ref4$data,
804
+ _ref4$meta = _ref4.meta,
805
+ meta = _ref4$meta === void 0 ? null : _ref4$meta;
806
+ // console.log('response --- ', response);
807
+ // This is not a paginated list so we dont care anymore
808
+ if (data === null && meta === null) {
809
+ setItems(response);
810
+ setPaginated(false);
811
+ } else {
812
+ setItems(function (old) {
813
+ return [].concat(_toConsumableArray__default["default"](old || null), _toConsumableArray__default["default"](data));
814
+ });
815
+ setPagination(meta);
816
+ setPaginated(true);
817
+ }
818
+ return response;
819
+ }).then(function (response) {
820
+ setLoading(false);
821
+ if (onLoaded !== null) {
822
+ onLoaded(response);
823
+ }
824
+ })["catch"](function (e) {
825
+ // Error is real
826
+ setLoading(false);
827
+ if (onError !== null) {
828
+ onError(e);
829
+ }
830
+ });
831
+ }, [query, pageNumber, canLoad, getPages, setLoading, setItems, setPagination, onLoaded, onError]);
832
+ var reset = React.useCallback(function () {
833
+ setItems([]);
834
+ setPagination(null);
835
+ setCanLoad(true);
836
+ }, [setItems, setPagination, setCanLoad]);
837
+
838
+ // Resets the game, "natural" refresh
839
+ var onQueryChange = React.useEffect(function () {
840
+ reset();
841
+ }, [query, page, count, reset]);
842
+
843
+ // Handle to Load next
844
+ var loadNextPage = React.useCallback(function () {
845
+ if (!loading && pageNumber < lastPage) {
846
+ var params = _objectSpread__default["default"](_objectSpread__default["default"]({}, pagination), {}, {
847
+ current_page: pageNumber + 1,
848
+ per_page: pageCount
849
+ });
850
+ setPagination(params);
851
+ setCanLoad(true);
852
+ }
853
+ }, [query, pagination, pageNumber, pageCount, loading, lastPage, onQueryChange, setCanLoad]);
854
+ var disabled = (items || []).length === 0 || loading || pageNumber >= lastPage || lastPage === null || lastPage === 1;
855
+ var regularLoaded = !paginated && items !== null;
856
+ var paginatedLoaded = !loading && items !== null && (items.length === total || pageNumber >= lastPage);
857
+ return {
858
+ items: items,
859
+ total: total,
860
+ page: pageNumber,
861
+ count: pageCount,
862
+ lastPage: lastPage,
863
+ loading: loading,
864
+ loaded: !loading,
865
+ allLoaded: regularLoaded || paginatedLoaded,
866
+ disabled: disabled,
867
+ loadNextPage: loadNextPage,
868
+ reset: reset
869
+ };
870
+ };
871
+
681
872
  var useMedias = function useMedias() {
682
873
  var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
683
- var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
684
- var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
874
+ var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
875
+ var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
685
876
  var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
686
877
  var api = useApi();
687
- var getItems = React.useCallback(function () {
688
- var requestedPage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
689
- return api.medias.get(query, requestedPage, count);
690
- }, [api, query, count]);
691
- var _useItems = useItems(_objectSpread__default["default"]({
692
- getPage: page !== null ? getItems : null,
693
- getItems: page === null ? getItems : null,
694
- page: page
695
- }, opts)),
696
- items = _useItems.items,
697
- pageItems = _useItems.pageItems,
698
- request = _objectWithoutProperties__default["default"](_useItems, _excluded$2);
699
- // console.log('medias', items);
700
- return _objectSpread__default["default"]({
701
- medias: page !== null ? pageItems : items,
702
- allMedias: items
703
- }, request);
878
+ var getPage = React.useCallback(function (newQuery) {
879
+ var requestedPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
880
+ var requestedCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
881
+ return api.medias.get(newQuery, requestedPage, requestedCount);
882
+ }, [api]);
883
+ return useItems(_objectSpread__default["default"]({
884
+ getPage: getPage,
885
+ query: query,
886
+ page: page,
887
+ count: count
888
+ }, opts));
704
889
  };
705
890
 
706
891
  var useMediasRecent = function useMediasRecent(opts) {
@@ -739,7 +924,7 @@ var useMediaTags = function useMediaTags() {
739
924
  var getItems = React.useCallback(function () {
740
925
  return api.medias.getTags(query, count);
741
926
  }, [api, query, count]);
742
- var _useItems = useItems(_objectSpread__default["default"]({
927
+ var _useItems = useItems$1(_objectSpread__default["default"]({
743
928
  getItems: getItems
744
929
  }, opts)),
745
930
  items = _useItems.items;
@@ -769,15 +954,34 @@ var useMediaUpdate = function useMediaUpdate() {
769
954
  };
770
955
  };
771
956
 
957
+ var useMediaRequestDelete = function useMediaRequestDelete() {
958
+ var _useState = React.useState(false),
959
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
960
+ requesting = _useState2[0],
961
+ setRequesting = _useState2[1];
962
+ var api = useApi();
963
+ var requestDeleteMedia = React.useCallback(function (id) {
964
+ setRequesting(true);
965
+ return api.medias.requestDeleteMedia(id).then(function (response) {
966
+ setRequesting(false);
967
+ return response;
968
+ });
969
+ }, [api, setRequesting]);
970
+ return {
971
+ requestDeleteMedia: requestDeleteMedia,
972
+ requesting: requesting
973
+ };
974
+ };
975
+
772
976
  var useMediaDelete = function useMediaDelete() {
773
977
  var _useState = React.useState(false),
774
978
  _useState2 = _slicedToArray__default["default"](_useState, 2),
775
979
  deleting = _useState2[0],
776
980
  setDeleting = _useState2[1];
777
981
  var api = useApi();
778
- var deleteMedia = React.useCallback(function (id, data) {
982
+ var deleteMedia = React.useCallback(function (id) {
779
983
  setDeleting(true);
780
- return api.medias["delete"](id, data).then(function (response) {
984
+ return api.medias["delete"](id).then(function (response) {
781
985
  setDeleting(false);
782
986
  return response;
783
987
  });
@@ -880,11 +1084,12 @@ exports.useApi = useApi;
880
1084
  exports.useContributionCreate = useContributionCreate;
881
1085
  exports.useContributions = useContributions;
882
1086
  exports.useData = useData;
883
- exports.useItems = useItems;
1087
+ exports.useItems = useItems$1;
884
1088
  exports.useMedia = useMedia;
885
1089
  exports.useMediaAuthors = useMediaAuthors;
886
1090
  exports.useMediaCreate = useMediaCreate;
887
1091
  exports.useMediaDelete = useMediaDelete;
1092
+ exports.useMediaRequestDelete = useMediaRequestDelete;
888
1093
  exports.useMediaTags = useMediaTags;
889
1094
  exports.useMediaUpdate = useMediaUpdate;
890
1095
  exports.useMedias = useMedias;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/data",
3
- "version": "0.3.329",
3
+ "version": "0.3.334",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -50,7 +50,8 @@
50
50
  "dependencies": {
51
51
  "@babel/runtime": "^7.13.10",
52
52
  "@folklore/fetch": "^0.1.15",
53
- "@micromag/core": "^0.3.329",
53
+ "@micromag/core": "^0.3.332",
54
+ "lodash": "^4.17.21",
54
55
  "prop-types": "^15.7.2",
55
56
  "query-string": "^6.13.7",
56
57
  "react-router": "^5.2.0"
@@ -58,5 +59,5 @@
58
59
  "publishConfig": {
59
60
  "access": "public"
60
61
  },
61
- "gitHead": "2bfbc2ca564fd104e1df42dfa9314668fe48a000"
62
+ "gitHead": "aecd5e405aff415fe8d1a627f03d1e74ccd9ef95"
62
63
  }