@micromag/data 0.2.286

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 +897 -0
  2. package/lib/index.js +930 -0
  3. package/package.json +62 -0
package/es/index.js ADDED
@@ -0,0 +1,897 @@
1
+ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
4
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
+ import React, { useContext, useMemo, useState, useCallback, useEffect, useRef } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
8
+ import _inherits from '@babel/runtime/helpers/inherits';
9
+ import _createSuper from '@babel/runtime/helpers/createSuper';
10
+ import _createClass from '@babel/runtime/helpers/createClass';
11
+ import { getJSON, getCSRFHeaders, postJSON } from '@folklore/fetch';
12
+ import { generatePath } from 'react-router';
13
+ import { stringify } from 'query-string';
14
+
15
+ var Base = /*#__PURE__*/function () {
16
+ function Base() {
17
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18
+
19
+ _classCallCheck(this, Base);
20
+
21
+ this.options = _objectSpread(_objectSpread({
22
+ routes: {}
23
+ }, opts), {}, {
24
+ baseUrl: opts.baseUrl || 'https://micromag.ca/api'
25
+ });
26
+ }
27
+
28
+ _createClass(Base, [{
29
+ key: "requestGet",
30
+ value: function requestGet(path) {
31
+ var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
32
+ var queryString = query !== null ? stringify(query, {
33
+ arrayFormat: 'bracket'
34
+ }) : null;
35
+ return getJSON("".concat(this.getFullUrl(path)).concat(queryString !== null && queryString.length > 0 ? "?".concat(queryString) : ''), {
36
+ credentials: 'include',
37
+ headers: getCSRFHeaders()
38
+ });
39
+ }
40
+ }, {
41
+ key: "requestPost",
42
+ value: function requestPost(path, data) {
43
+ return postJSON(this.getFullUrl(path), data, {
44
+ credentials: 'include',
45
+ headers: getCSRFHeaders()
46
+ });
47
+ }
48
+ }, {
49
+ key: "requestPut",
50
+ value: function requestPut(path, data) {
51
+ return postJSON(this.getFullUrl(path), _objectSpread({
52
+ _method: 'PUT'
53
+ }, data), {
54
+ credentials: 'include',
55
+ headers: getCSRFHeaders()
56
+ });
57
+ }
58
+ }, {
59
+ key: "requestDelete",
60
+ value: function requestDelete(path) {
61
+ return this.requestPost(path, {
62
+ _method: 'DELETE'
63
+ });
64
+ }
65
+ }, {
66
+ key: "route",
67
+ value: function route(_route, params) {
68
+ var routes = this.options.routes;
69
+ return generatePath(routes[_route] || _route, params);
70
+ }
71
+ }, {
72
+ key: "getFullUrl",
73
+ value: function getFullUrl(path) {
74
+ var baseUrl = this.options.baseUrl;
75
+ return "".concat(baseUrl.replace(/\/$/, ''), "/").concat(path.replace(/^\//, ''));
76
+ }
77
+ }]);
78
+
79
+ return Base;
80
+ }();
81
+
82
+ var MediasApi = /*#__PURE__*/function (_Base) {
83
+ _inherits(MediasApi, _Base);
84
+
85
+ var _super = _createSuper(MediasApi);
86
+
87
+ function MediasApi() {
88
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
89
+
90
+ _classCallCheck(this, MediasApi);
91
+
92
+ return _super.call(this, _objectSpread(_objectSpread({}, opts), {}, {
93
+ routes: _objectSpread({
94
+ index: 'medias',
95
+ tags: 'medias/tags',
96
+ show: 'medias/:media',
97
+ store: 'medias',
98
+ update: 'medias/:media',
99
+ "delete": 'medias/:media'
100
+ }, opts.routes || null)
101
+ }));
102
+ }
103
+
104
+ _createClass(MediasApi, [{
105
+ key: "find",
106
+ value: function find(id) {
107
+ return this.requestGet(this.route('show', {
108
+ media: id
109
+ }));
110
+ }
111
+ }, {
112
+ key: "get",
113
+ value: function get() {
114
+ var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
115
+ var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
116
+ var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
117
+
118
+ var finalQuery = _objectSpread({}, query);
119
+
120
+ if (page !== null) {
121
+ finalQuery.page = page;
122
+ }
123
+
124
+ if (count !== null) {
125
+ finalQuery.count = count;
126
+ }
127
+
128
+ return this.requestGet(this.route('index'), finalQuery);
129
+ }
130
+ }, {
131
+ key: "getTags",
132
+ value: function getTags() {
133
+ var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
134
+ var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
135
+
136
+ var finalQuery = _objectSpread({}, query);
137
+
138
+ if (count !== null) {
139
+ finalQuery.count = count;
140
+ }
141
+
142
+ return this.requestGet(this.route('tags'), finalQuery);
143
+ }
144
+ }, {
145
+ key: "create",
146
+ value: function create(data) {
147
+ return this.requestPost(this.route('store'), data);
148
+ }
149
+ }, {
150
+ key: "update",
151
+ value: function update(id, data) {
152
+ return this.requestPut(this.route('update', {
153
+ media: id
154
+ }), data);
155
+ }
156
+ }, {
157
+ key: "delete",
158
+ value: function _delete(id) {
159
+ return this.requestDelete(this.route('delete', {
160
+ media: id
161
+ }));
162
+ }
163
+ }]);
164
+
165
+ return MediasApi;
166
+ }(Base);
167
+
168
+ var ContributionsApi = /*#__PURE__*/function (_Base) {
169
+ _inherits(ContributionsApi, _Base);
170
+
171
+ var _super = _createSuper(ContributionsApi);
172
+
173
+ function ContributionsApi() {
174
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
175
+
176
+ _classCallCheck(this, ContributionsApi);
177
+
178
+ return _super.call(this, _objectSpread(_objectSpread({}, opts), {}, {
179
+ routes: _objectSpread({
180
+ index: '/contributions/:screen',
181
+ store: '/contributions',
182
+ update: '/contributions/:contribution',
183
+ "delete": '/contributions/:contribution'
184
+ }, opts.routes || null)
185
+ }));
186
+ }
187
+
188
+ _createClass(ContributionsApi, [{
189
+ key: "get",
190
+ value: function get(id) {
191
+ var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
192
+ var page = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
193
+ var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
194
+
195
+ var finalQuery = _objectSpread({}, query);
196
+
197
+ if (page !== null) {
198
+ finalQuery.page = page;
199
+ }
200
+
201
+ if (count !== null) {
202
+ finalQuery.count = count;
203
+ }
204
+
205
+ return this.requestGet(this.route('index', {
206
+ screen: id
207
+ }), finalQuery);
208
+ }
209
+ }, {
210
+ key: "create",
211
+ value: function create(data) {
212
+ return this.requestPost(this.route('store'), data);
213
+ }
214
+ }]);
215
+
216
+ return ContributionsApi;
217
+ }(Base);
218
+
219
+ var QuizApi = /*#__PURE__*/function (_Base) {
220
+ _inherits(QuizApi, _Base);
221
+
222
+ var _super = _createSuper(QuizApi);
223
+
224
+ function QuizApi() {
225
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
226
+
227
+ _classCallCheck(this, QuizApi);
228
+
229
+ return _super.call(this, _objectSpread(_objectSpread({}, opts), {}, {
230
+ routes: _objectSpread({
231
+ results: '/quiz/:screen',
232
+ store: '/quiz',
233
+ update: '/quiz/:quiz',
234
+ "delete": '/quiz/:quiz'
235
+ }, opts.routes || null)
236
+ }));
237
+ }
238
+
239
+ _createClass(QuizApi, [{
240
+ key: "results",
241
+ value: function results(screenId) {
242
+ return this.requestGet(this.route('results', {
243
+ screen: screenId
244
+ }));
245
+ }
246
+ }, {
247
+ key: "create",
248
+ value: function create(data) {
249
+ return this.requestPost(this.route('store'), data);
250
+ }
251
+ }]);
252
+
253
+ return QuizApi;
254
+ }(Base);
255
+
256
+ var Api = /*#__PURE__*/function (_Base) {
257
+ _inherits(Api, _Base);
258
+
259
+ var _super = _createSuper(Api);
260
+
261
+ function Api() {
262
+ var _this;
263
+
264
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
265
+
266
+ _classCallCheck(this, Api);
267
+
268
+ _this = _super.call(this, opts);
269
+ _this.medias = new MediasApi(opts);
270
+ _this.contributions = new ContributionsApi(opts);
271
+ _this.quiz = new QuizApi(opts);
272
+ return _this;
273
+ }
274
+
275
+ return Api;
276
+ }(Base);
277
+
278
+ /* eslint-disable react/jsx-props-no-spreading */
279
+ var ApiContext = /*#__PURE__*/React.createContext(null);
280
+ var useApi = function useApi() {
281
+ return useContext(ApiContext);
282
+ };
283
+ var propTypes$1 = {
284
+ api: PropTypes.instanceOf(Api),
285
+ baseUrl: PropTypes.string,
286
+ children: PropTypes.node.isRequired
287
+ };
288
+ var defaultProps$1 = {
289
+ api: null,
290
+ baseUrl: undefined
291
+ };
292
+ var ApiProvider = function ApiProvider(_ref) {
293
+ var initialApi = _ref.api,
294
+ baseUrl = _ref.baseUrl,
295
+ children = _ref.children;
296
+ var previousApi = useApi();
297
+ var api = useMemo(function () {
298
+ return initialApi || previousApi || new Api({
299
+ baseUrl: baseUrl // baseUrl: 'https://micromag.studio.homestead.flklr.ca/api',
300
+
301
+ });
302
+ }, [previousApi, initialApi, baseUrl]);
303
+ return /*#__PURE__*/React.createElement(ApiContext.Provider, {
304
+ value: api
305
+ }, children);
306
+ };
307
+ ApiProvider.propTypes = propTypes$1;
308
+ ApiProvider.defaultProps = defaultProps$1;
309
+
310
+ var useData = function useData(loadData) {
311
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
312
+ _ref$initialData = _ref.initialData,
313
+ initialData = _ref$initialData === void 0 ? null : _ref$initialData,
314
+ _ref$autoload = _ref.autoload,
315
+ autoload = _ref$autoload === void 0 ? true : _ref$autoload;
316
+
317
+ var _useState = useState(false),
318
+ _useState2 = _slicedToArray(_useState, 2),
319
+ loading = _useState2[0],
320
+ setLoading = _useState2[1];
321
+
322
+ var _useState3 = useState(false),
323
+ _useState4 = _slicedToArray(_useState3, 2),
324
+ error = _useState4[0],
325
+ setError = _useState4[1];
326
+
327
+ var _useState5 = useState(initialData),
328
+ _useState6 = _slicedToArray(_useState5, 2),
329
+ data = _useState6[0],
330
+ setData = _useState6[1];
331
+
332
+ var load = useCallback(function () {
333
+ var canceled = false;
334
+ setLoading(true);
335
+ var promise = loadData.apply(void 0, arguments).then(function (newData) {
336
+ if (!canceled) {
337
+ setData(newData);
338
+ setLoading(false);
339
+ }
340
+
341
+ return newData;
342
+ })["catch"](function (newError) {
343
+ setError(newError);
344
+ setLoading(false);
345
+ });
346
+
347
+ promise.cancel = function () {
348
+ canceled = true;
349
+ setLoading(false);
350
+ };
351
+
352
+ return promise;
353
+ }, [loadData, setLoading, setData]);
354
+ useEffect(function () {
355
+ var loader = null;
356
+
357
+ if (autoload) {
358
+ loader = load();
359
+ }
360
+
361
+ return function () {
362
+ if (loader !== null) {
363
+ loader.cancel();
364
+ }
365
+ };
366
+ }, [autoload, load]);
367
+ return {
368
+ data: data,
369
+ load: load,
370
+ loading: loading,
371
+ error: error
372
+ };
373
+ };
374
+
375
+ var useContributions = function useContributions() {
376
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
377
+ screenId = _ref.screenId,
378
+ _ref$opts = _ref.opts,
379
+ opts = _ref$opts === void 0 ? {} : _ref$opts;
380
+
381
+ var api = useApi();
382
+
383
+ var _useState = useState(_toConsumableArray(new Array(10)).map(function (el, i) {
384
+ return {
385
+ name: "Nom ".concat(i + 1),
386
+ message: "Message ".concat(i + 1)
387
+ };
388
+ })),
389
+ _useState2 = _slicedToArray(_useState, 1),
390
+ defaultContributions = _useState2[0];
391
+
392
+ var loader = useCallback(function () {
393
+ return api !== null ? api.contributions.get(screenId) : null;
394
+ }, [api, screenId]);
395
+
396
+ var _ref2 = api !== null ? useData(loader, opts) : {
397
+ data: null
398
+ },
399
+ data = _ref2.data,
400
+ request = _objectWithoutProperties(_ref2, ["data"]);
401
+
402
+ return _objectSpread({
403
+ contributions: data || defaultContributions
404
+ }, request);
405
+ };
406
+
407
+ var useContributionCreate = function useContributionCreate() {
408
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
409
+ screenId = _ref.screenId,
410
+ _ref$onSuccess = _ref.onSuccess,
411
+ onSuccess = _ref$onSuccess === void 0 ? null : _ref$onSuccess;
412
+
413
+ var api = useApi();
414
+
415
+ var _useState = useState(false),
416
+ _useState2 = _slicedToArray(_useState, 2),
417
+ creating = _useState2[0],
418
+ setCreating = _useState2[1];
419
+
420
+ var create = useCallback(function (data) {
421
+ if (api === null) {
422
+ return null;
423
+ }
424
+
425
+ setCreating(true);
426
+ return api.contributions.create(_objectSpread({
427
+ screen_id: screenId
428
+ }, data)).then(function (response) {
429
+ setCreating(false);
430
+
431
+ if (onSuccess !== null) {
432
+ onSuccess(response);
433
+ }
434
+
435
+ return response;
436
+ });
437
+ }, [api, setCreating, onSuccess, screenId]);
438
+ return {
439
+ create: create,
440
+ creating: creating
441
+ };
442
+ };
443
+
444
+ var useItems = function useItems(_ref) {
445
+ var _ref$getPage = _ref.getPage,
446
+ getPage = _ref$getPage === void 0 ? null : _ref$getPage,
447
+ _ref$getItems = _ref.getItems,
448
+ getItems = _ref$getItems === void 0 ? null : _ref$getItems,
449
+ _ref$page = _ref.page,
450
+ page = _ref$page === void 0 ? null : _ref$page,
451
+ _ref$count = _ref.count,
452
+ count = _ref$count === void 0 ? 10 : _ref$count,
453
+ _ref$items = _ref.items,
454
+ providedItems = _ref$items === void 0 ? null : _ref$items,
455
+ _ref$pages = _ref.pages,
456
+ initialPages = _ref$pages === void 0 ? null : _ref$pages,
457
+ _ref$getPageFromRespo = _ref.getPageFromResponse,
458
+ getPageFromResponse = _ref$getPageFromRespo === void 0 ? function (_ref2) {
459
+ var _ref2$meta = _ref2.meta,
460
+ currentPage = _ref2$meta.current_page,
461
+ lastPage = _ref2$meta.last_page,
462
+ total = _ref2$meta.total,
463
+ items = _ref2.data;
464
+ return {
465
+ page: parseInt(currentPage, 10),
466
+ lastPage: parseInt(lastPage, 10),
467
+ total: parseInt(total, 10),
468
+ items: items
469
+ };
470
+ } : _ref$getPageFromRespo,
471
+ _ref$getItemsFromResp = _ref.getItemsFromResponse,
472
+ getItemsFromResponse = _ref$getItemsFromResp === void 0 ? function (data) {
473
+ return data;
474
+ } : _ref$getItemsFromResp,
475
+ _ref$onItemsLoaded = _ref.onItemsLoaded,
476
+ onItemsLoaded = _ref$onItemsLoaded === void 0 ? null : _ref$onItemsLoaded,
477
+ _ref$onPageLoaded = _ref.onPageLoaded,
478
+ onPageLoaded = _ref$onPageLoaded === void 0 ? null : _ref$onPageLoaded,
479
+ _ref$onLoaded = _ref.onLoaded,
480
+ onLoaded = _ref$onLoaded === void 0 ? null : _ref$onLoaded,
481
+ _ref$onError = _ref.onError,
482
+ onError = _ref$onError === void 0 ? null : _ref$onError;
483
+ var isPaginated = getPage !== null || initialPages !== null;
484
+ var lastState = useRef(null);
485
+ var initialState = useMemo(function () {
486
+ var finalInitialPages = initialPages !== null ? initialPages.map(function (it) {
487
+ return getPageFromResponse(it);
488
+ }) : null;
489
+ return {
490
+ lastPage: finalInitialPages !== null ? finalInitialPages.reduce(function (currentLastPage, _ref3) {
491
+ var initialLastPage = _ref3.lastPage;
492
+ return initialLastPage > currentLastPage ? initialLastPage : currentLastPage;
493
+ }, -1) : -1,
494
+ total: finalInitialPages !== null ? finalInitialPages[0].total : (providedItems || []).length,
495
+ loaded: providedItems !== null,
496
+ loading: false,
497
+ pages: finalInitialPages !== null ? finalInitialPages : null,
498
+ items: null
499
+ };
500
+ }, [initialPages, providedItems]);
501
+
502
+ var _useState = useState(initialState),
503
+ _useState2 = _slicedToArray(_useState, 2),
504
+ state = _useState2[0],
505
+ setState = _useState2[1];
506
+
507
+ var lastPage = state.lastPage,
508
+ loaded = state.loaded,
509
+ loading = state.loading,
510
+ stateItems = state.items,
511
+ pages = state.pages,
512
+ total = state.total;
513
+ var items = providedItems || (isPaginated && pages !== null ? pages.reduce(function (pagesItems, _ref4) {
514
+ var pageItems = _ref4.items;
515
+ return pagesItems.concat(pageItems);
516
+ }, []) : stateItems) || null;
517
+
518
+ var updateState = function updateState(update) {
519
+ return setState(_objectSpread(_objectSpread({}, state), update));
520
+ };
521
+
522
+ var updateFromResponse = function updateFromResponse(response) {
523
+ var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
524
+ var reset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
525
+
526
+ if (error !== null) {
527
+ updateState({
528
+ loaded: false,
529
+ loading: false
530
+ });
531
+ throw error;
532
+ }
533
+
534
+ if (isPaginated) {
535
+ var newPage = getPageFromResponse(response);
536
+ var newPages = (reset ? [newPage] : [].concat(_toConsumableArray((pages || []).filter(function (it) {
537
+ return it.page !== newPage.page;
538
+ })), [newPage])).sort(function (a, b) {
539
+ if (a === b) {
540
+ return 0;
541
+ }
542
+
543
+ return a > b ? 1 : -1;
544
+ });
545
+ updateState({
546
+ loaded: true,
547
+ loading: false,
548
+ lastPage: newPage.lastPage,
549
+ total: newPage.total,
550
+ pages: newPages
551
+ });
552
+ return newPage;
553
+ }
554
+
555
+ var newItems = _toConsumableArray(getItemsFromResponse(response));
556
+
557
+ updateState({
558
+ loaded: true,
559
+ loading: false,
560
+ items: newItems,
561
+ total: newItems.length
562
+ });
563
+ return newItems;
564
+ };
565
+
566
+ var getNextPage = function getNextPage() {
567
+ var allPages = lastPage !== -1 ? Array.call.apply(Array, [null].concat(_toConsumableArray(Array(lastPage)))).map(function (it, index) {
568
+ return index + 1;
569
+ }) : [];
570
+ var remainingPages = allPages.filter(function (pageNumber) {
571
+ return pages.findIndex(function (it) {
572
+ return it.page === pageNumber;
573
+ }) === -1;
574
+ });
575
+ var firstItem = remainingPages.length > 0 ? remainingPages.shift() : null;
576
+ return firstItem !== null ? firstItem : null;
577
+ };
578
+
579
+ var loadItems = function loadItems(requestPage) {
580
+ updateState({
581
+ loading: true
582
+ });
583
+ var canceled = false;
584
+ var request = isPaginated ? getPage(requestPage, count) : getItems();
585
+ var promise = request.then(function (response) {
586
+ return !canceled ? updateFromResponse(response) : Promise.reject();
587
+ })["catch"](function (error) {
588
+ return !canceled ? updateFromResponse(null, error) : Promise.reject();
589
+ }).then(function (response) {
590
+ if (isPaginated && onPageLoaded !== null) {
591
+ onPageLoaded(response);
592
+ } else if (!isPaginated && onItemsLoaded !== null) {
593
+ onItemsLoaded(response);
594
+ }
595
+
596
+ if (onLoaded !== null) {
597
+ onLoaded(response);
598
+ }
599
+
600
+ return response;
601
+ })["catch"](function (error) {
602
+ if (!canceled && onError !== null) {
603
+ onError(error);
604
+ }
605
+ });
606
+
607
+ promise.cancel = function () {
608
+ canceled = true;
609
+ };
610
+
611
+ return promise;
612
+ };
613
+
614
+ var loadPage = function loadPage(pageToLoad) {
615
+ if (loading) {
616
+ return Promise.reject();
617
+ }
618
+
619
+ if (pages.find(function (it) {
620
+ return it.page === pageToLoad;
621
+ }) !== -1) {
622
+ return Promise.reject();
623
+ }
624
+
625
+ return loadItems(pageToLoad);
626
+ };
627
+
628
+ var loadNextPage = function loadNextPage() {
629
+ if (loading) {
630
+ return Promise.reject();
631
+ }
632
+
633
+ var nextPage = getNextPage();
634
+ return nextPage !== null ? loadItems(nextPage) : Promise.resolve();
635
+ };
636
+
637
+ useEffect(function () {
638
+ var hadState = lastState.current !== null;
639
+ lastState.current = initialState;
640
+
641
+ if (hadState) {
642
+ setState(initialState);
643
+ }
644
+ }, [initialState]);
645
+ useEffect(function () {
646
+ if (getPage === null && getItems === null || providedItems !== null) {
647
+ return function () {};
648
+ }
649
+
650
+ var loadPromise = null;
651
+ var pageToLoad = isPaginated && initialPages === null && page === null ? 1 : page;
652
+
653
+ if (!isPaginated || pageToLoad !== null) {
654
+ loadPromise = loadItems(pageToLoad);
655
+ }
656
+
657
+ return function () {
658
+ if (loadPromise !== null) {
659
+ loadPromise.cancel();
660
+ }
661
+ };
662
+ }, [getPage, getItems, page]);
663
+ var currentPage = isPaginated && pages !== null ? pages.find(function (_ref5) {
664
+ var pageNumber = _ref5.page;
665
+ return parseInt(pageNumber, 10) === parseInt(page, 10);
666
+ }) || null : null;
667
+ return {
668
+ items: items,
669
+ pages: pages,
670
+ pageItems: currentPage !== null ? currentPage.items : null,
671
+ total: total,
672
+ lastPage: lastPage,
673
+ loaded: loaded,
674
+ allLoaded: !isPaginated && loaded || lastPage !== -1 && isPaginated && pages.length === lastPage,
675
+ loading: loading,
676
+ loadNextPage: loadNextPage,
677
+ loadPage: loadPage
678
+ };
679
+ };
680
+
681
+ var useMedias = function useMedias() {
682
+ 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;
685
+ var opts = arguments.length > 3 ? arguments[3] : undefined;
686
+ var api = useApi();
687
+ var getItems = 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
+
692
+ var _useItems = useItems(_objectSpread({
693
+ getPage: page !== null ? getItems : null,
694
+ getItems: page === null ? getItems : null,
695
+ page: page
696
+ }, opts)),
697
+ items = _useItems.items,
698
+ pageItems = _useItems.pageItems,
699
+ request = _objectWithoutProperties(_useItems, ["items", "pageItems"]); // console.log('medias', items);
700
+
701
+
702
+ return _objectSpread({
703
+ medias: page !== null ? pageItems : items,
704
+ allMedias: items
705
+ }, request);
706
+ };
707
+
708
+ var useMediasRecent = function useMediasRecent(opts) {
709
+ var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'media-gallery-recent-searches';
710
+ var createSearch = useCallback(function (value) {
711
+ if (window !== undefined && value) {
712
+ var recent = window.localStorage.getItem(key) || null;
713
+ var current = recent !== null ? JSON.parse(recent || '[]') : [];
714
+ var encoded = JSON.stringify([value].concat(_toConsumableArray(current)));
715
+ window.localStorage.setItem(key, encoded);
716
+ return true;
717
+ }
718
+
719
+ return false;
720
+ }, [key]);
721
+ var getSearches = useCallback(function () {
722
+ var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;
723
+
724
+ if (window !== undefined) {
725
+ var recent = window.localStorage.getItem(key) || null;
726
+ var current = recent !== null ? JSON.parse(recent || '[]') : [];
727
+ return current.slice(0, count);
728
+ }
729
+
730
+ return [];
731
+ }, [key]);
732
+ return {
733
+ createSearch: createSearch,
734
+ getSearches: getSearches
735
+ };
736
+ };
737
+
738
+ var useMedia = function useMedia(id, opts) {
739
+ var api = useApi();
740
+ var loader = useCallback(function () {
741
+ return api.medias.find(id);
742
+ }, [api, id]);
743
+
744
+ var _useData = useData(loader, opts),
745
+ data = _useData.data,
746
+ request = _objectWithoutProperties(_useData, ["data"]);
747
+
748
+ return _objectSpread({
749
+ story: data
750
+ }, request);
751
+ };
752
+
753
+ var useMediaCreate = function useMediaCreate() {
754
+ var _useState = useState(false),
755
+ _useState2 = _slicedToArray(_useState, 2),
756
+ creating = _useState2[0],
757
+ setCreating = _useState2[1];
758
+
759
+ var api = useApi();
760
+ var create = useCallback(function (data) {
761
+ setCreating(true);
762
+ return api.medias.create(data).then(function (response) {
763
+ setCreating(false);
764
+ return response;
765
+ });
766
+ }, [api, setCreating]);
767
+ return {
768
+ create: create,
769
+ creating: creating
770
+ };
771
+ };
772
+
773
+ var useMediaTags = function useMediaTags() {
774
+ var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
775
+ var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;
776
+ var opts = arguments.length > 2 ? arguments[2] : undefined;
777
+ var api = useApi();
778
+ var getItems = useCallback(function () {
779
+ return api.medias.getTags(query, count);
780
+ }, [api, query, count]);
781
+
782
+ var _useItems = useItems(_objectSpread({
783
+ getItems: getItems
784
+ }, opts)),
785
+ items = _useItems.items,
786
+ request = _objectWithoutProperties(_useItems, ["items", "pageItems"]);
787
+
788
+ return _objectSpread({
789
+ tags: items
790
+ }, request);
791
+ };
792
+
793
+ var useMediaUpdate = function useMediaUpdate() {
794
+ var _useState = useState(false),
795
+ _useState2 = _slicedToArray(_useState, 2),
796
+ updating = _useState2[0],
797
+ setUpdating = _useState2[1];
798
+
799
+ var api = useApi();
800
+ var update = useCallback(function (id, data) {
801
+ setUpdating(true);
802
+ return api.medias.update(id, data).then(function (response) {
803
+ setUpdating(false);
804
+ return response;
805
+ });
806
+ }, [api, setUpdating]);
807
+ return {
808
+ update: update,
809
+ updating: updating
810
+ };
811
+ };
812
+
813
+ var useQuiz = function useQuiz() {
814
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
815
+ screenId = _ref.screenId,
816
+ _ref$opts = _ref.opts,
817
+ opts = _ref$opts === void 0 ? {} : _ref$opts;
818
+
819
+ var api = useApi();
820
+ var loader = useCallback(function () {
821
+ return api !== null ? api.quiz.results(screenId) : null;
822
+ }, [api, screenId]);
823
+
824
+ var _ref2 = api !== null ? useData(loader, opts) : {
825
+ data: null
826
+ },
827
+ data = _ref2.data,
828
+ request = _objectWithoutProperties(_ref2, ["data"]);
829
+
830
+ return _objectSpread({
831
+ quiz: data || []
832
+ }, request);
833
+ };
834
+
835
+ var useQuizCreate = function useQuizCreate() {
836
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
837
+ screenId = _ref.screenId,
838
+ _ref$onSuccess = _ref.onSuccess,
839
+ onSuccess = _ref$onSuccess === void 0 ? null : _ref$onSuccess;
840
+
841
+ var api = useApi();
842
+
843
+ var _useState = useState(false),
844
+ _useState2 = _slicedToArray(_useState, 2),
845
+ creating = _useState2[0],
846
+ setCreating = _useState2[1];
847
+
848
+ var create = useCallback(function (data) {
849
+ if (api === null) {
850
+ return null;
851
+ }
852
+
853
+ setCreating(true);
854
+ return api.quiz.create(_objectSpread({
855
+ screen_id: screenId
856
+ }, data)).then(function (response) {
857
+ setCreating(false);
858
+
859
+ if (onSuccess !== null) {
860
+ onSuccess(response);
861
+ }
862
+
863
+ return response;
864
+ });
865
+ }, [api, setCreating, onSuccess, screenId]);
866
+ return {
867
+ create: create,
868
+ creating: creating
869
+ };
870
+ };
871
+
872
+ /* eslint-disable react/jsx-props-no-spreading */
873
+ var propTypes = {
874
+ api: PropTypes.instanceOf(Api),
875
+ apiBaseUrl: PropTypes.string,
876
+ children: PropTypes.node
877
+ };
878
+ var defaultProps = {
879
+ api: null,
880
+ apiBaseUrl: undefined,
881
+ children: null
882
+ };
883
+
884
+ var DataProvider = function DataProvider(_ref) {
885
+ var api = _ref.api,
886
+ apiBaseUrl = _ref.apiBaseUrl,
887
+ children = _ref.children;
888
+ return /*#__PURE__*/React.createElement(ApiProvider, {
889
+ api: api,
890
+ baseUrl: apiBaseUrl
891
+ }, children);
892
+ };
893
+
894
+ DataProvider.propTypes = propTypes;
895
+ DataProvider.defaultProps = defaultProps;
896
+
897
+ export { Api, ApiProvider, Base as BaseApi, DataProvider, useApi, useContributionCreate, useContributions, useData, useItems, useMedia, useMediaCreate, useMediaTags, useMediaUpdate, useMedias, useMediasRecent as useMediasRecentSearches, useQuiz, useQuizCreate };