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