@micromag/data 0.3.541 → 0.3.547

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 (2) hide show
  1. package/package.json +4 -5
  2. package/lib/index.js +0 -1685
package/lib/index.js DELETED
@@ -1,1685 +0,0 @@
1
- 'use strict';
2
-
3
- var PropTypes = require('prop-types');
4
- var React = require('react');
5
- var _createClass = require('@babel/runtime/helpers/createClass');
6
- var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
7
- var _callSuper = require('@babel/runtime/helpers/callSuper');
8
- var _inherits = require('@babel/runtime/helpers/inherits');
9
- var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
10
- var fetch = require('@folklore/fetch');
11
- var pathToRegexp = require('path-to-regexp');
12
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
13
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
14
- var _createForOfIteratorHelper = require('@babel/runtime/helpers/createForOfIteratorHelper');
15
- var _typeof = require('@babel/runtime/helpers/typeof');
16
- var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
17
- var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
18
- var isString = require('lodash/isString');
19
- var contexts = require('@micromag/core/contexts');
20
-
21
- ({
22
- children: PropTypes.node.isRequired,
23
- routes: PropTypes.objectOf(PropTypes.string).isRequired,
24
- basePath: PropTypes.string
25
- });
26
- var compilers = {};
27
- function generatePath(fullPath, data) {
28
- var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
29
- var fullUrlMatches = fullPath.match(/^(https?:\/\/)/);
30
- if (typeof compilers[fullPath] === 'undefined') {
31
- compilers[fullPath] = pathToRegexp.compile(fullPath.replace(/^(https?:\/\/)/, ''), opts);
32
- }
33
- var compiler = compilers[fullPath];
34
- return fullUrlMatches !== null ? "".concat(fullUrlMatches[1]).concat(compiler(data)) : compiler(data);
35
- }
36
-
37
- var token = '%[a-f0-9]{2}';
38
- var singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');
39
- var multiMatcher = new RegExp('(' + token + ')+', 'gi');
40
- function decodeComponents(components, split) {
41
- try {
42
- // Try to decode the entire string first
43
- return [decodeURIComponent(components.join(''))];
44
- } catch (_unused) {
45
- // Do nothing
46
- }
47
- if (components.length === 1) {
48
- return components;
49
- }
50
- split = split || 1;
51
-
52
- // Split the array in 2 parts
53
- var left = components.slice(0, split);
54
- var right = components.slice(split);
55
- return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));
56
- }
57
- function decode$1(input) {
58
- try {
59
- return decodeURIComponent(input);
60
- } catch (_unused2) {
61
- var tokens = input.match(singleMatcher) || [];
62
- for (var i = 1; i < tokens.length; i++) {
63
- input = decodeComponents(tokens, i).join('');
64
- tokens = input.match(singleMatcher) || [];
65
- }
66
- return input;
67
- }
68
- }
69
- function customDecodeURIComponent(input) {
70
- // Keep track of all the replacements and prefill the map with the `BOM`
71
- var replaceMap = {
72
- '%FE%FF': "\uFFFD\uFFFD",
73
- '%FF%FE': "\uFFFD\uFFFD"
74
- };
75
- var match = multiMatcher.exec(input);
76
- while (match) {
77
- try {
78
- // Decode as big chunks as possible
79
- replaceMap[match[0]] = decodeURIComponent(match[0]);
80
- } catch (_unused3) {
81
- var result = decode$1(match[0]);
82
- if (result !== match[0]) {
83
- replaceMap[match[0]] = result;
84
- }
85
- }
86
- match = multiMatcher.exec(input);
87
- }
88
-
89
- // Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else
90
- replaceMap['%C2'] = "\uFFFD";
91
- var entries = Object.keys(replaceMap);
92
- for (var _i = 0, _entries = entries; _i < _entries.length; _i++) {
93
- var key = _entries[_i];
94
- // Replace all decoded components
95
- input = input.replace(new RegExp(key, 'g'), replaceMap[key]);
96
- }
97
- return input;
98
- }
99
- function decodeUriComponent(encodedURI) {
100
- if (typeof encodedURI !== 'string') {
101
- throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + _typeof(encodedURI) + '`');
102
- }
103
- try {
104
- // Try the built in decoder first
105
- return decodeURIComponent(encodedURI);
106
- } catch (_unused4) {
107
- // Fallback to a more advanced decoder
108
- return customDecodeURIComponent(encodedURI);
109
- }
110
- }
111
-
112
- function splitOnFirst(string, separator) {
113
- if (!(typeof string === 'string' && typeof separator === 'string')) {
114
- throw new TypeError('Expected the arguments to be of type `string`');
115
- }
116
- if (string === '' || separator === '') {
117
- return [];
118
- }
119
- var separatorIndex = string.indexOf(separator);
120
- if (separatorIndex === -1) {
121
- return [];
122
- }
123
- return [string.slice(0, separatorIndex), string.slice(separatorIndex + separator.length)];
124
- }
125
-
126
- function includeKeys(object, predicate) {
127
- var result = {};
128
- if (Array.isArray(predicate)) {
129
- var _iterator = _createForOfIteratorHelper(predicate),
130
- _step;
131
- try {
132
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
133
- var key = _step.value;
134
- var descriptor = Object.getOwnPropertyDescriptor(object, key);
135
- if (descriptor !== null && descriptor !== void 0 && descriptor.enumerable) {
136
- Object.defineProperty(result, key, descriptor);
137
- }
138
- }
139
- } catch (err) {
140
- _iterator.e(err);
141
- } finally {
142
- _iterator.f();
143
- }
144
- } else {
145
- // `Reflect.ownKeys()` is required to retrieve symbol properties
146
- var _iterator2 = _createForOfIteratorHelper(Reflect.ownKeys(object)),
147
- _step2;
148
- try {
149
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
150
- var _key = _step2.value;
151
- var _descriptor = Object.getOwnPropertyDescriptor(object, _key);
152
- if (_descriptor.enumerable) {
153
- var value = object[_key];
154
- if (predicate(_key, value, object)) {
155
- Object.defineProperty(result, _key, _descriptor);
156
- }
157
- }
158
- }
159
- } catch (err) {
160
- _iterator2.e(err);
161
- } finally {
162
- _iterator2.f();
163
- }
164
- }
165
- return result;
166
- }
167
-
168
- var isNullOrUndefined = function isNullOrUndefined(value) {
169
- return value === null || value === undefined;
170
- };
171
-
172
- // eslint-disable-next-line unicorn/prefer-code-point
173
- var strictUriEncode = function strictUriEncode(string) {
174
- return encodeURIComponent(string).replaceAll(/[!'()*]/g, function (x) {
175
- return "%".concat(x.charCodeAt(0).toString(16).toUpperCase());
176
- });
177
- };
178
- var encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');
179
- function encoderForArrayFormat(options) {
180
- switch (options.arrayFormat) {
181
- case 'index':
182
- {
183
- return function (key) {
184
- return function (result, value) {
185
- var index = result.length;
186
- if (value === undefined || options.skipNull && value === null || options.skipEmptyString && value === '') {
187
- return result;
188
- }
189
- if (value === null) {
190
- return [].concat(_toConsumableArray(result), [[encode(key, options), '[', index, ']'].join('')]);
191
- }
192
- return [].concat(_toConsumableArray(result), [[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')]);
193
- };
194
- };
195
- }
196
- case 'bracket':
197
- {
198
- return function (key) {
199
- return function (result, value) {
200
- if (value === undefined || options.skipNull && value === null || options.skipEmptyString && value === '') {
201
- return result;
202
- }
203
- if (value === null) {
204
- return [].concat(_toConsumableArray(result), [[encode(key, options), '[]'].join('')]);
205
- }
206
- return [].concat(_toConsumableArray(result), [[encode(key, options), '[]=', encode(value, options)].join('')]);
207
- };
208
- };
209
- }
210
- case 'colon-list-separator':
211
- {
212
- return function (key) {
213
- return function (result, value) {
214
- if (value === undefined || options.skipNull && value === null || options.skipEmptyString && value === '') {
215
- return result;
216
- }
217
- if (value === null) {
218
- return [].concat(_toConsumableArray(result), [[encode(key, options), ':list='].join('')]);
219
- }
220
- return [].concat(_toConsumableArray(result), [[encode(key, options), ':list=', encode(value, options)].join('')]);
221
- };
222
- };
223
- }
224
- case 'comma':
225
- case 'separator':
226
- case 'bracket-separator':
227
- {
228
- var keyValueSeparator = options.arrayFormat === 'bracket-separator' ? '[]=' : '=';
229
- return function (key) {
230
- return function (result, value) {
231
- if (value === undefined || options.skipNull && value === null || options.skipEmptyString && value === '') {
232
- return result;
233
- }
234
-
235
- // Translate null to an empty string so that it doesn't serialize as 'null'
236
- value = value === null ? '' : value;
237
- if (result.length === 0) {
238
- return [[encode(key, options), keyValueSeparator, encode(value, options)].join('')];
239
- }
240
- return [[result, encode(value, options)].join(options.arrayFormatSeparator)];
241
- };
242
- };
243
- }
244
- default:
245
- {
246
- return function (key) {
247
- return function (result, value) {
248
- if (value === undefined || options.skipNull && value === null || options.skipEmptyString && value === '') {
249
- return result;
250
- }
251
- if (value === null) {
252
- return [].concat(_toConsumableArray(result), [encode(key, options)]);
253
- }
254
- return [].concat(_toConsumableArray(result), [[encode(key, options), '=', encode(value, options)].join('')]);
255
- };
256
- };
257
- }
258
- }
259
- }
260
- function parserForArrayFormat(options) {
261
- var result;
262
- switch (options.arrayFormat) {
263
- case 'index':
264
- {
265
- return function (key, value, accumulator) {
266
- result = /\[(\d*)]$/.exec(key);
267
- key = key.replace(/\[\d*]$/, '');
268
- if (!result) {
269
- accumulator[key] = value;
270
- return;
271
- }
272
- if (accumulator[key] === undefined) {
273
- accumulator[key] = {};
274
- }
275
- accumulator[key][result[1]] = value;
276
- };
277
- }
278
- case 'bracket':
279
- {
280
- return function (key, value, accumulator) {
281
- result = /(\[])$/.exec(key);
282
- key = key.replace(/\[]$/, '');
283
- if (!result) {
284
- accumulator[key] = value;
285
- return;
286
- }
287
- if (accumulator[key] === undefined) {
288
- accumulator[key] = [value];
289
- return;
290
- }
291
- accumulator[key] = [].concat(_toConsumableArray(accumulator[key]), [value]);
292
- };
293
- }
294
- case 'colon-list-separator':
295
- {
296
- return function (key, value, accumulator) {
297
- result = /(:list)$/.exec(key);
298
- key = key.replace(/:list$/, '');
299
- if (!result) {
300
- accumulator[key] = value;
301
- return;
302
- }
303
- if (accumulator[key] === undefined) {
304
- accumulator[key] = [value];
305
- return;
306
- }
307
- accumulator[key] = [].concat(_toConsumableArray(accumulator[key]), [value]);
308
- };
309
- }
310
- case 'comma':
311
- case 'separator':
312
- {
313
- return function (key, value, accumulator) {
314
- var isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);
315
- var isEncodedArray = typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator);
316
- value = isEncodedArray ? decode(value, options) : value;
317
- var newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(function (item) {
318
- return decode(item, options);
319
- }) : value === null ? value : decode(value, options);
320
- accumulator[key] = newValue;
321
- };
322
- }
323
- case 'bracket-separator':
324
- {
325
- return function (key, value, accumulator) {
326
- var isArray = /(\[])$/.test(key);
327
- key = key.replace(/\[]$/, '');
328
- if (!isArray) {
329
- accumulator[key] = value ? decode(value, options) : value;
330
- return;
331
- }
332
- var arrayValue = value === null ? [] : value.split(options.arrayFormatSeparator).map(function (item) {
333
- return decode(item, options);
334
- });
335
- if (accumulator[key] === undefined) {
336
- accumulator[key] = arrayValue;
337
- return;
338
- }
339
- accumulator[key] = [].concat(_toConsumableArray(accumulator[key]), _toConsumableArray(arrayValue));
340
- };
341
- }
342
- default:
343
- {
344
- return function (key, value, accumulator) {
345
- if (accumulator[key] === undefined) {
346
- accumulator[key] = value;
347
- return;
348
- }
349
- accumulator[key] = [].concat(_toConsumableArray([accumulator[key]].flat()), [value]);
350
- };
351
- }
352
- }
353
- }
354
- function validateArrayFormatSeparator(value) {
355
- if (typeof value !== 'string' || value.length !== 1) {
356
- throw new TypeError('arrayFormatSeparator must be single character string');
357
- }
358
- }
359
- function encode(value, options) {
360
- if (options.encode) {
361
- return options.strict ? strictUriEncode(value) : encodeURIComponent(value);
362
- }
363
- return value;
364
- }
365
- function decode(value, options) {
366
- if (options.decode) {
367
- return decodeUriComponent(value);
368
- }
369
- return value;
370
- }
371
- function keysSorter(input) {
372
- if (Array.isArray(input)) {
373
- return input.sort();
374
- }
375
- if (_typeof(input) === 'object') {
376
- return keysSorter(Object.keys(input)).sort(function (a, b) {
377
- return Number(a) - Number(b);
378
- }).map(function (key) {
379
- return input[key];
380
- });
381
- }
382
- return input;
383
- }
384
- function removeHash(input) {
385
- var hashStart = input.indexOf('#');
386
- if (hashStart !== -1) {
387
- input = input.slice(0, hashStart);
388
- }
389
- return input;
390
- }
391
- function getHash(url) {
392
- var hash = '';
393
- var hashStart = url.indexOf('#');
394
- if (hashStart !== -1) {
395
- hash = url.slice(hashStart);
396
- }
397
- return hash;
398
- }
399
- function parseValue(value, options) {
400
- if (options.parseNumbers && !Number.isNaN(Number(value)) && typeof value === 'string' && value.trim() !== '') {
401
- value = Number(value);
402
- } else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {
403
- value = value.toLowerCase() === 'true';
404
- }
405
- return value;
406
- }
407
- function extract(input) {
408
- input = removeHash(input);
409
- var queryStart = input.indexOf('?');
410
- if (queryStart === -1) {
411
- return '';
412
- }
413
- return input.slice(queryStart + 1);
414
- }
415
- function parse(query, options) {
416
- options = _objectSpread({
417
- decode: true,
418
- sort: true,
419
- arrayFormat: 'none',
420
- arrayFormatSeparator: ',',
421
- parseNumbers: false,
422
- parseBooleans: false
423
- }, options);
424
- validateArrayFormatSeparator(options.arrayFormatSeparator);
425
- var formatter = parserForArrayFormat(options);
426
-
427
- // Create an object with no prototype
428
- var returnValue = Object.create(null);
429
- if (typeof query !== 'string') {
430
- return returnValue;
431
- }
432
- query = query.trim().replace(/^[?#&]/, '');
433
- if (!query) {
434
- return returnValue;
435
- }
436
- var _iterator = _createForOfIteratorHelper(query.split('&')),
437
- _step;
438
- try {
439
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
440
- var parameter = _step.value;
441
- if (parameter === '') {
442
- continue;
443
- }
444
- var parameter_ = options.decode ? parameter.replaceAll('+', ' ') : parameter;
445
- var _splitOnFirst = splitOnFirst(parameter_, '='),
446
- _splitOnFirst2 = _slicedToArray(_splitOnFirst, 2),
447
- _key = _splitOnFirst2[0],
448
- _value = _splitOnFirst2[1];
449
- if (_key === undefined) {
450
- _key = parameter_;
451
- }
452
-
453
- // Missing `=` should be `null`:
454
- // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
455
- _value = _value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? _value : decode(_value, options);
456
- formatter(decode(_key, options), _value, returnValue);
457
- }
458
- } catch (err) {
459
- _iterator.e(err);
460
- } finally {
461
- _iterator.f();
462
- }
463
- for (var _i = 0, _Object$entries = Object.entries(returnValue); _i < _Object$entries.length; _i++) {
464
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
465
- key = _Object$entries$_i[0],
466
- value = _Object$entries$_i[1];
467
- if (_typeof(value) === 'object' && value !== null) {
468
- for (var _i2 = 0, _Object$entries2 = Object.entries(value); _i2 < _Object$entries2.length; _i2++) {
469
- var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
470
- key2 = _Object$entries2$_i[0],
471
- value2 = _Object$entries2$_i[1];
472
- value[key2] = parseValue(value2, options);
473
- }
474
- } else {
475
- returnValue[key] = parseValue(value, options);
476
- }
477
- }
478
- if (options.sort === false) {
479
- return returnValue;
480
- }
481
-
482
- // TODO: Remove the use of `reduce`.
483
- // eslint-disable-next-line unicorn/no-array-reduce
484
- return (options.sort === true ? Object.keys(returnValue).sort() : Object.keys(returnValue).sort(options.sort)).reduce(function (result, key) {
485
- var value = returnValue[key];
486
- result[key] = Boolean(value) && _typeof(value) === 'object' && !Array.isArray(value) ? keysSorter(value) : value;
487
- return result;
488
- }, Object.create(null));
489
- }
490
- function stringify(object, options) {
491
- if (!object) {
492
- return '';
493
- }
494
- options = _objectSpread({
495
- encode: true,
496
- strict: true,
497
- arrayFormat: 'none',
498
- arrayFormatSeparator: ','
499
- }, options);
500
- validateArrayFormatSeparator(options.arrayFormatSeparator);
501
- var shouldFilter = function shouldFilter(key) {
502
- return options.skipNull && isNullOrUndefined(object[key]) || options.skipEmptyString && object[key] === '';
503
- };
504
- var formatter = encoderForArrayFormat(options);
505
- var objectCopy = {};
506
- for (var _i3 = 0, _Object$entries3 = Object.entries(object); _i3 < _Object$entries3.length; _i3++) {
507
- var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),
508
- key = _Object$entries3$_i[0],
509
- value = _Object$entries3$_i[1];
510
- if (!shouldFilter(key)) {
511
- objectCopy[key] = value;
512
- }
513
- }
514
- var keys = Object.keys(objectCopy);
515
- if (options.sort !== false) {
516
- keys.sort(options.sort);
517
- }
518
- return keys.map(function (key) {
519
- var value = object[key];
520
- if (value === undefined) {
521
- return '';
522
- }
523
- if (value === null) {
524
- return encode(key, options);
525
- }
526
- if (Array.isArray(value)) {
527
- if (value.length === 0 && options.arrayFormat === 'bracket-separator') {
528
- return encode(key, options) + '[]';
529
- }
530
- return value.reduce(formatter(key), []).join('&');
531
- }
532
- return encode(key, options) + '=' + encode(value, options);
533
- }).filter(function (x) {
534
- return x.length > 0;
535
- }).join('&');
536
- }
537
- function parseUrl(url, options) {
538
- var _url_$split$, _url_;
539
- options = _objectSpread({
540
- decode: true
541
- }, options);
542
- var _splitOnFirst3 = splitOnFirst(url, '#'),
543
- _splitOnFirst4 = _slicedToArray(_splitOnFirst3, 2),
544
- url_ = _splitOnFirst4[0],
545
- hash = _splitOnFirst4[1];
546
- if (url_ === undefined) {
547
- url_ = url;
548
- }
549
- return _objectSpread({
550
- url: (_url_$split$ = (_url_ = url_) === null || _url_ === void 0 || (_url_ = _url_.split('?')) === null || _url_ === void 0 ? void 0 : _url_[0]) !== null && _url_$split$ !== void 0 ? _url_$split$ : '',
551
- query: parse(extract(url), options)
552
- }, options && options.parseFragmentIdentifier && hash ? {
553
- fragmentIdentifier: decode(hash, options)
554
- } : {});
555
- }
556
- function stringifyUrl(object, options) {
557
- options = _objectSpread(_defineProperty({
558
- encode: true,
559
- strict: true
560
- }, encodeFragmentIdentifier, true), options);
561
- var url = removeHash(object.url).split('?')[0] || '';
562
- var queryFromUrl = extract(object.url);
563
- var query = _objectSpread(_objectSpread({}, parse(queryFromUrl, {
564
- sort: false
565
- })), object.query);
566
- var queryString = stringify(query, options);
567
- queryString && (queryString = "?".concat(queryString));
568
- var hash = getHash(object.url);
569
- if (typeof object.fragmentIdentifier === 'string') {
570
- var urlObjectForFragmentEncode = new URL(url);
571
- urlObjectForFragmentEncode.hash = object.fragmentIdentifier;
572
- hash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : "#".concat(object.fragmentIdentifier);
573
- }
574
- return "".concat(url).concat(queryString).concat(hash);
575
- }
576
- function pick(input, filter, options) {
577
- options = _objectSpread(_defineProperty({
578
- parseFragmentIdentifier: true
579
- }, encodeFragmentIdentifier, false), options);
580
- var _parseUrl = parseUrl(input, options),
581
- url = _parseUrl.url,
582
- query = _parseUrl.query,
583
- fragmentIdentifier = _parseUrl.fragmentIdentifier;
584
- return stringifyUrl({
585
- url: url,
586
- query: includeKeys(query, filter),
587
- fragmentIdentifier: fragmentIdentifier
588
- }, options);
589
- }
590
- function exclude(input, filter, options) {
591
- var exclusionFilter = Array.isArray(filter) ? function (key) {
592
- return !filter.includes(key);
593
- } : function (key, value) {
594
- return !filter(key, value);
595
- };
596
- return pick(input, exclusionFilter, options);
597
- }
598
-
599
- var queryString = /*#__PURE__*/Object.freeze({
600
- __proto__: null,
601
- exclude: exclude,
602
- extract: extract,
603
- parse: parse,
604
- parseUrl: parseUrl,
605
- pick: pick,
606
- stringify: stringify,
607
- stringifyUrl: stringifyUrl
608
- });
609
-
610
- var Base = /*#__PURE__*/function () {
611
- function Base() {
612
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
613
- _classCallCheck(this, Base);
614
- this.options = _objectSpread(_objectSpread({
615
- routes: {}
616
- }, opts), {}, {
617
- baseUrl: opts.baseUrl || 'https://micromag.ca/api'
618
- });
619
- }
620
- return _createClass(Base, [{
621
- key: "requestGet",
622
- value: function requestGet(path) {
623
- var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
624
- var finalQueryString = query !== null ? queryString.stringify(query, {
625
- arrayFormat: 'bracket'
626
- }) : null;
627
- return fetch.getJSON("".concat(this.getFullUrl(path)).concat(finalQueryString !== null && finalQueryString.length > 0 ? "?".concat(finalQueryString) : ''), {
628
- credentials: 'include',
629
- headers: fetch.getCSRFHeaders()
630
- });
631
- }
632
- }, {
633
- key: "requestPost",
634
- value: function requestPost(path, data) {
635
- return fetch.postJSON(this.getFullUrl(path), data, {
636
- credentials: 'include',
637
- headers: fetch.getCSRFHeaders()
638
- });
639
- }
640
- }, {
641
- key: "requestPut",
642
- value: function requestPut(path, data) {
643
- return fetch.postJSON(this.getFullUrl(path), _objectSpread({
644
- _method: 'PUT'
645
- }, data), {
646
- credentials: 'include',
647
- headers: fetch.getCSRFHeaders()
648
- });
649
- }
650
- }, {
651
- key: "requestDelete",
652
- value: function requestDelete(path) {
653
- return this.requestPost(path, {
654
- _method: 'DELETE'
655
- });
656
- }
657
- }, {
658
- key: "route",
659
- value: function route(_route, params) {
660
- var routes = this.options.routes;
661
- return generatePath(routes[_route] || _route, params);
662
- }
663
- }, {
664
- key: "getFullUrl",
665
- value: function getFullUrl(path) {
666
- var baseUrl = this.options.baseUrl;
667
- return "".concat(baseUrl.replace(/\/$/, ''), "/").concat(path.replace(/^\//, ''));
668
- }
669
- }]);
670
- }();
671
- var Base$1 = Base;
672
-
673
- var ContributionsApi = /*#__PURE__*/function (_Base) {
674
- function ContributionsApi() {
675
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
676
- _classCallCheck(this, ContributionsApi);
677
- return _callSuper(this, ContributionsApi, [_objectSpread(_objectSpread({}, opts), {}, {
678
- routes: _objectSpread({
679
- index: '/contributions/:screen',
680
- store: '/contributions',
681
- update: '/contributions/:contribution',
682
- "delete": '/contributions/:contribution'
683
- }, opts.routes || null)
684
- })]);
685
- }
686
- _inherits(ContributionsApi, _Base);
687
- return _createClass(ContributionsApi, [{
688
- key: "get",
689
- value: function get(id) {
690
- var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
691
- var page = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
692
- var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
693
- var finalQuery = _objectSpread({}, query);
694
- if (page !== null) {
695
- finalQuery.page = page;
696
- }
697
- if (count !== null) {
698
- finalQuery.count = count;
699
- }
700
- return this.requestGet(this.route('index', {
701
- screen: id
702
- }), finalQuery);
703
- }
704
- }, {
705
- key: "create",
706
- value: function create(data) {
707
- return this.requestPost(this.route('store'), data);
708
- }
709
- }]);
710
- }(Base$1);
711
-
712
- var MediasApi = /*#__PURE__*/function (_Base) {
713
- function MediasApi() {
714
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
715
- _classCallCheck(this, MediasApi);
716
- return _callSuper(this, MediasApi, [_objectSpread(_objectSpread({}, opts), {}, {
717
- routes: _objectSpread({
718
- index: 'medias',
719
- tags: 'medias/tags',
720
- authors: 'medias/authors',
721
- requestDelete: 'medias/requestDelete/:media',
722
- show: 'medias/:media',
723
- store: 'medias',
724
- update: 'medias/:media',
725
- "delete": 'medias/:media'
726
- }, opts.routes || null)
727
- })]);
728
- }
729
- _inherits(MediasApi, _Base);
730
- return _createClass(MediasApi, [{
731
- key: "find",
732
- value: function find(id) {
733
- return this.requestGet(this.route('show', {
734
- media: id
735
- }));
736
- }
737
- }, {
738
- key: "get",
739
- value: function get() {
740
- var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
741
- var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
742
- var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
743
- var finalQuery = _objectSpread({}, query);
744
- if (page !== null) {
745
- finalQuery.page = page;
746
- }
747
- if (count !== null) {
748
- finalQuery.count = count;
749
- }
750
- return this.requestGet(this.route('index'), finalQuery);
751
- }
752
- }, {
753
- key: "getTags",
754
- value: function getTags() {
755
- var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
756
- var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
757
- var finalQuery = _objectSpread({}, query);
758
- if (count !== null) {
759
- finalQuery.count = count;
760
- }
761
- return this.requestGet(this.route('tags'), finalQuery);
762
- }
763
- }, {
764
- key: "getAuthors",
765
- value: function getAuthors() {
766
- var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
767
- var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
768
- var finalQuery = _objectSpread({}, query);
769
- if (count !== null) {
770
- finalQuery.count = count;
771
- }
772
- return this.requestGet(this.route('authors'), finalQuery);
773
- }
774
- }, {
775
- key: "create",
776
- value: function create(data) {
777
- return this.requestPost(this.route('store'), data);
778
- }
779
- }, {
780
- key: "update",
781
- value: function update(id, data) {
782
- return this.requestPut(this.route('update', {
783
- media: id
784
- }), data);
785
- }
786
- }, {
787
- key: "requestDeleteMedia",
788
- value: function requestDeleteMedia(id) {
789
- return this.requestPost(this.route('requestDelete', {
790
- media: id
791
- }));
792
- }
793
- }, {
794
- key: "delete",
795
- value: function _delete(id) {
796
- return this.requestDelete(this.route('delete', {
797
- media: id
798
- }));
799
- }
800
- }]);
801
- }(Base$1);
802
-
803
- var QuizApi = /*#__PURE__*/function (_Base) {
804
- function QuizApi() {
805
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
806
- _classCallCheck(this, QuizApi);
807
- return _callSuper(this, QuizApi, [_objectSpread(_objectSpread({}, opts), {}, {
808
- routes: _objectSpread({
809
- results: '/quiz/:screen',
810
- store: '/quiz',
811
- update: '/quiz/:quiz',
812
- "delete": '/quiz/:quiz'
813
- }, opts.routes || null)
814
- })]);
815
- }
816
- _inherits(QuizApi, _Base);
817
- return _createClass(QuizApi, [{
818
- key: "results",
819
- value: function results(screenId) {
820
- return this.requestGet(this.route('results', {
821
- screen: screenId
822
- }));
823
- }
824
- }, {
825
- key: "create",
826
- value: function create(data) {
827
- return this.requestPost(this.route('store'), data);
828
- }
829
- }]);
830
- }(Base$1);
831
-
832
- var Api = /*#__PURE__*/function (_Base) {
833
- function Api() {
834
- var _this;
835
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
836
- _classCallCheck(this, Api);
837
- _this = _callSuper(this, Api, [opts]);
838
- _this.medias = new MediasApi(opts);
839
- _this.contributions = new ContributionsApi(opts);
840
- _this.quiz = new QuizApi(opts);
841
- return _this;
842
- }
843
- _inherits(Api, _Base);
844
- return _createClass(Api);
845
- }(Base$1);
846
- var Api$1 = Api;
847
-
848
- /* eslint-disable react/jsx-props-no-spreading */
849
- var ApiContext = /*#__PURE__*/React.createContext(null);
850
- var useApi = function useApi() {
851
- return React.useContext(ApiContext);
852
- };
853
- var propTypes$1 = {
854
- api: PropTypes.instanceOf(Api$1),
855
- baseUrl: PropTypes.string,
856
- children: PropTypes.node.isRequired
857
- };
858
- var defaultProps$1 = {
859
- api: null,
860
- baseUrl: undefined
861
- };
862
- var ApiProvider = function ApiProvider(_ref) {
863
- var initialApi = _ref.api,
864
- baseUrl = _ref.baseUrl,
865
- children = _ref.children;
866
- var previousApi = useApi();
867
- var api = React.useMemo(function () {
868
- return initialApi || previousApi || new Api$1({
869
- baseUrl: baseUrl
870
- // baseUrl: 'https://micromag.studio.test/api',
871
- });
872
- }, [previousApi, initialApi, baseUrl]);
873
- return /*#__PURE__*/React.createElement(ApiContext.Provider, {
874
- value: api
875
- }, children);
876
- };
877
- ApiProvider.propTypes = propTypes$1;
878
- ApiProvider.defaultProps = defaultProps$1;
879
-
880
- var useContributionCreate = function useContributionCreate() {
881
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
882
- screenId = _ref.screenId,
883
- _ref$onSuccess = _ref.onSuccess,
884
- onSuccess = _ref$onSuccess === void 0 ? null : _ref$onSuccess;
885
- var api = useApi();
886
- var _useState = React.useState(false),
887
- _useState2 = _slicedToArray(_useState, 2),
888
- creating = _useState2[0],
889
- setCreating = _useState2[1];
890
- var create = React.useCallback(function (data) {
891
- if (api === null) {
892
- return null;
893
- }
894
- setCreating(true);
895
- return api.contributions.create(_objectSpread({
896
- screen_id: screenId
897
- }, data)).then(function (response) {
898
- setCreating(false);
899
- if (onSuccess !== null) {
900
- onSuccess(response);
901
- }
902
- return response;
903
- });
904
- }, [api, setCreating, onSuccess, screenId]);
905
- return {
906
- create: create,
907
- creating: creating
908
- };
909
- };
910
- var useContributionCreate$1 = useContributionCreate;
911
-
912
- var useData = function useData(loadData) {
913
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
914
- _ref$initialData = _ref.initialData,
915
- initialData = _ref$initialData === void 0 ? null : _ref$initialData,
916
- _ref$autoload = _ref.autoload,
917
- autoload = _ref$autoload === void 0 ? true : _ref$autoload;
918
- var _useState = React.useState(false),
919
- _useState2 = _slicedToArray(_useState, 2),
920
- loading = _useState2[0],
921
- setLoading = _useState2[1];
922
- var _useState3 = React.useState(false),
923
- _useState4 = _slicedToArray(_useState3, 2),
924
- error = _useState4[0],
925
- setError = _useState4[1];
926
- var _useState5 = React.useState(initialData),
927
- _useState6 = _slicedToArray(_useState5, 2),
928
- data = _useState6[0],
929
- setData = _useState6[1];
930
- var load = React.useCallback(function () {
931
- var canceled = false;
932
- setLoading(true);
933
- var promise = loadData.apply(void 0, arguments).then(function (newData) {
934
- if (!canceled) {
935
- setData(newData);
936
- setLoading(false);
937
- }
938
- return newData;
939
- })["catch"](function (newError) {
940
- setError(newError);
941
- setLoading(false);
942
- });
943
- promise.cancel = function () {
944
- canceled = true;
945
- setLoading(false);
946
- };
947
- return promise;
948
- }, [loadData, setLoading, setData]);
949
- React.useEffect(function () {
950
- var loader = null;
951
- if (autoload) {
952
- loader = load();
953
- }
954
- return function () {
955
- if (loader !== null) {
956
- loader.cancel();
957
- }
958
- };
959
- }, [autoload, load]);
960
- return {
961
- data: data,
962
- load: load,
963
- loading: loading,
964
- error: error
965
- };
966
- };
967
- var useData$1 = useData;
968
-
969
- var _excluded$3 = ["data"];
970
- var useContributions = function useContributions() {
971
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
972
- screenId = _ref.screenId,
973
- _ref$opts = _ref.opts,
974
- opts = _ref$opts === void 0 ? {} : _ref$opts;
975
- var api = useApi();
976
- var _useState = React.useState(_toConsumableArray(new Array(10)).map(function (el, i) {
977
- return {
978
- name: "Nom ".concat(i + 1),
979
- message: "Message ".concat(i + 1)
980
- };
981
- })),
982
- _useState2 = _slicedToArray(_useState, 1),
983
- defaultContributions = _useState2[0];
984
- var loader = React.useCallback(function () {
985
- return api !== null ? api.contributions.get(screenId) : null;
986
- }, [api, screenId]);
987
- var _ref2 = api !== null ? useData$1(loader, opts) : {
988
- data: null
989
- },
990
- data = _ref2.data,
991
- request = _objectWithoutProperties(_ref2, _excluded$3);
992
- return _objectSpread({
993
- contributions: data || defaultContributions
994
- }, request);
995
- };
996
- var useContributions$1 = useContributions;
997
-
998
- var useItems$1 = function useItems(_ref) {
999
- var _ref$getPage = _ref.getPage,
1000
- getPage = _ref$getPage === void 0 ? null : _ref$getPage,
1001
- _ref$getItems = _ref.getItems,
1002
- getItems = _ref$getItems === void 0 ? null : _ref$getItems,
1003
- _ref$page = _ref.page,
1004
- page = _ref$page === void 0 ? null : _ref$page,
1005
- _ref$count = _ref.count,
1006
- count = _ref$count === void 0 ? 10 : _ref$count,
1007
- _ref$items = _ref.items,
1008
- providedItems = _ref$items === void 0 ? null : _ref$items,
1009
- _ref$pages = _ref.pages,
1010
- initialPages = _ref$pages === void 0 ? null : _ref$pages,
1011
- _ref$getPageFromRespo = _ref.getPageFromResponse,
1012
- getPageFromResponse = _ref$getPageFromRespo === void 0 ? function (_ref2) {
1013
- var _ref2$meta = _ref2.meta,
1014
- currentPage = _ref2$meta.current_page,
1015
- lastPage = _ref2$meta.last_page,
1016
- total = _ref2$meta.total,
1017
- items = _ref2.data;
1018
- return {
1019
- page: parseInt(currentPage, 10),
1020
- lastPage: parseInt(lastPage, 10),
1021
- total: parseInt(total, 10),
1022
- items: items
1023
- };
1024
- } : _ref$getPageFromRespo,
1025
- _ref$getItemsFromResp = _ref.getItemsFromResponse,
1026
- getItemsFromResponse = _ref$getItemsFromResp === void 0 ? function (data) {
1027
- return data;
1028
- } : _ref$getItemsFromResp,
1029
- _ref$onItemsLoaded = _ref.onItemsLoaded,
1030
- onItemsLoaded = _ref$onItemsLoaded === void 0 ? null : _ref$onItemsLoaded,
1031
- _ref$onPageLoaded = _ref.onPageLoaded,
1032
- onPageLoaded = _ref$onPageLoaded === void 0 ? null : _ref$onPageLoaded,
1033
- _ref$onLoaded = _ref.onLoaded,
1034
- onLoaded = _ref$onLoaded === void 0 ? null : _ref$onLoaded,
1035
- _ref$onError = _ref.onError,
1036
- onError = _ref$onError === void 0 ? null : _ref$onError;
1037
- var isPaginated = getPage !== null || initialPages !== null;
1038
- var lastState = React.useRef(null);
1039
- var initialState = React.useMemo(function () {
1040
- var finalInitialPages = initialPages !== null ? initialPages.map(function (it) {
1041
- return getPageFromResponse(it);
1042
- }) : null;
1043
- return {
1044
- lastPage: finalInitialPages !== null ? finalInitialPages.reduce(function (currentLastPage, _ref3) {
1045
- var initialLastPage = _ref3.lastPage;
1046
- return initialLastPage > currentLastPage ? initialLastPage : currentLastPage;
1047
- }, -1) : -1,
1048
- total: finalInitialPages !== null ? finalInitialPages[0].total : (providedItems || []).length,
1049
- loaded: providedItems !== null,
1050
- loading: false,
1051
- pages: finalInitialPages !== null ? finalInitialPages : null,
1052
- items: null
1053
- };
1054
- }, [initialPages, providedItems]);
1055
- var _useState = React.useState(initialState),
1056
- _useState2 = _slicedToArray(_useState, 2),
1057
- state = _useState2[0],
1058
- setState = _useState2[1];
1059
- var lastPage = state.lastPage,
1060
- loaded = state.loaded,
1061
- loading = state.loading,
1062
- stateItems = state.items,
1063
- pages = state.pages,
1064
- total = state.total;
1065
- var items = providedItems || (isPaginated && pages !== null ? pages.reduce(function (pagesItems, _ref4) {
1066
- var pageItems = _ref4.items;
1067
- return pagesItems.concat(pageItems);
1068
- }, []) : stateItems) || null;
1069
- var updateState = function updateState(update) {
1070
- return setState(_objectSpread(_objectSpread({}, state), update));
1071
- };
1072
- var updateFromResponse = function updateFromResponse(response) {
1073
- var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1074
- var reset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1075
- if (error !== null) {
1076
- updateState({
1077
- loaded: false,
1078
- loading: false
1079
- });
1080
- throw error;
1081
- }
1082
- if (isPaginated) {
1083
- var newPage = getPageFromResponse(response);
1084
- var newPages = (reset ? [newPage] : [].concat(_toConsumableArray((pages || []).filter(function (it) {
1085
- return it.page !== newPage.page;
1086
- })), [newPage])).sort(function (a, b) {
1087
- if (a === b) {
1088
- return 0;
1089
- }
1090
- return a > b ? 1 : -1;
1091
- });
1092
- updateState({
1093
- loaded: true,
1094
- loading: false,
1095
- lastPage: newPage.lastPage,
1096
- total: newPage.total,
1097
- pages: newPages
1098
- });
1099
- return newPage;
1100
- }
1101
- var newItems = _toConsumableArray(getItemsFromResponse(response));
1102
- updateState({
1103
- loaded: true,
1104
- loading: false,
1105
- items: newItems,
1106
- total: newItems.length
1107
- });
1108
- return newItems;
1109
- };
1110
- var getNextPage = function getNextPage() {
1111
- var allPages = lastPage !== -1 ? Array.call.apply(Array, [null].concat(_toConsumableArray(Array(lastPage)))).map(function (it, index) {
1112
- return index + 1;
1113
- }) : [];
1114
- var remainingPages = allPages.filter(function (pageNumber) {
1115
- return pages.findIndex(function (it) {
1116
- return it.page === pageNumber;
1117
- }) === -1;
1118
- });
1119
- var firstItem = remainingPages.length > 0 ? remainingPages.shift() : null;
1120
- return firstItem !== null ? firstItem : null;
1121
- };
1122
- var loadItems = function loadItems(requestPage) {
1123
- updateState({
1124
- loading: true
1125
- });
1126
- var canceled = false;
1127
- var request = isPaginated ? getPage(requestPage, count) : getItems();
1128
- var promise = request.then(function (response) {
1129
- return !canceled ? updateFromResponse(response) : Promise.reject();
1130
- })["catch"](function (error) {
1131
- return !canceled ? updateFromResponse(null, error) : Promise.reject();
1132
- }).then(function (response) {
1133
- if (isPaginated && onPageLoaded !== null) {
1134
- onPageLoaded(response);
1135
- } else if (!isPaginated && onItemsLoaded !== null) {
1136
- onItemsLoaded(response);
1137
- }
1138
- if (onLoaded !== null) {
1139
- onLoaded(response);
1140
- }
1141
- return response;
1142
- })["catch"](function (error) {
1143
- if (!canceled && onError !== null) {
1144
- onError(error);
1145
- }
1146
- });
1147
- promise.cancel = function () {
1148
- canceled = true;
1149
- };
1150
- return promise;
1151
- };
1152
- var loadPage = function loadPage(pageToLoad) {
1153
- if (loading) {
1154
- return Promise.reject();
1155
- }
1156
- if (pages.find(function (it) {
1157
- return it.page === pageToLoad;
1158
- }) !== -1) {
1159
- return Promise.reject();
1160
- }
1161
- return loadItems(pageToLoad);
1162
- };
1163
- var loadNextPage = function loadNextPage() {
1164
- if (loading) {
1165
- return Promise.reject();
1166
- }
1167
- var nextPage = getNextPage();
1168
- return nextPage !== null ? loadItems(nextPage) : Promise.resolve();
1169
- };
1170
- React.useEffect(function () {
1171
- var hadState = lastState.current !== null;
1172
- lastState.current = initialState;
1173
- if (hadState) {
1174
- setState(initialState);
1175
- }
1176
- }, [initialState]);
1177
- React.useEffect(function () {
1178
- if (getPage === null && getItems === null || providedItems !== null) {
1179
- return function () {};
1180
- }
1181
- var loadPromise = null;
1182
- var pageToLoad = isPaginated && initialPages === null && page === null ? 1 : page;
1183
- if (!isPaginated || pageToLoad !== null) {
1184
- loadPromise = loadItems(pageToLoad);
1185
- }
1186
- return function () {
1187
- if (loadPromise !== null) {
1188
- loadPromise.cancel();
1189
- }
1190
- };
1191
- }, [getPage, getItems, page]);
1192
- var currentPage = isPaginated && pages !== null ? pages.find(function (_ref5) {
1193
- var pageNumber = _ref5.page;
1194
- return parseInt(pageNumber, 10) === parseInt(page, 10);
1195
- }) || null : null;
1196
- return {
1197
- items: items,
1198
- pages: pages,
1199
- pageItems: currentPage !== null ? currentPage.items : null,
1200
- total: total,
1201
- lastPage: lastPage,
1202
- loaded: loaded,
1203
- allLoaded: !isPaginated && loaded || lastPage !== -1 && isPaginated && pages.length === lastPage,
1204
- loading: loading,
1205
- loadNextPage: loadNextPage,
1206
- loadPage: loadPage
1207
- };
1208
- };
1209
- var useItems$2 = useItems$1;
1210
-
1211
- var _excluded$2 = ["data"];
1212
- var useMedia = function useMedia(id, opts) {
1213
- var api = useApi();
1214
- var loader = React.useCallback(function () {
1215
- return api.medias.find(id);
1216
- }, [api, id]);
1217
- var _useData = useData$1(loader, opts),
1218
- data = _useData.data,
1219
- request = _objectWithoutProperties(_useData, _excluded$2);
1220
- return _objectSpread({
1221
- story: data
1222
- }, request);
1223
- };
1224
- var useMedia$1 = useMedia;
1225
-
1226
- // import { useCallback } from 'react';
1227
-
1228
- // import useItems from './useItems';
1229
-
1230
- // eslint-disable-next-line
1231
- var useMediaAuthors = function useMediaAuthors() {
1232
- useApi(); // eslint-disable-line
1233
- // console.log('api', api); // eslint-disable-line
1234
- // const getItems = useCallback(() => api.medias.getAuthors(query, count), [api, query, count]);
1235
- // const { items, pageItems, ...request } = useItems({
1236
- // getItems,
1237
- // ...opts,
1238
- // });
1239
- return {
1240
- authors: []
1241
- // ...request,
1242
- };
1243
- };
1244
- var useMediaAuthors$1 = useMediaAuthors;
1245
-
1246
- var useMediaCreate = function useMediaCreate() {
1247
- var _useState = React.useState(false),
1248
- _useState2 = _slicedToArray(_useState, 2),
1249
- creating = _useState2[0],
1250
- setCreating = _useState2[1];
1251
- var api = useApi();
1252
- var create = React.useCallback(function (data) {
1253
- setCreating(true);
1254
- return api.medias.create(data).then(function (response) {
1255
- setCreating(false);
1256
- return response;
1257
- });
1258
- }, [api, setCreating]);
1259
- return {
1260
- create: create,
1261
- creating: creating
1262
- };
1263
- };
1264
- var useMediaCreate$1 = useMediaCreate;
1265
-
1266
- var useItems = function useItems(_ref) {
1267
- var _ref$getPage = _ref.getPage,
1268
- getPage = _ref$getPage === void 0 ? null : _ref$getPage,
1269
- _ref$page = _ref.page,
1270
- page = _ref$page === void 0 ? 1 : _ref$page,
1271
- _ref$count = _ref.count,
1272
- count = _ref$count === void 0 ? 10 : _ref$count,
1273
- _ref$query = _ref.query,
1274
- pageQuery = _ref$query === void 0 ? null : _ref$query,
1275
- _ref$pages = _ref.pages,
1276
- startingPages = _ref$pages === void 0 ? null : _ref$pages,
1277
- _ref$getPageFromRespo = _ref.getPageFromResponse,
1278
- getPageFromResponse = _ref$getPageFromRespo === void 0 ? function (newPage) {
1279
- return newPage;
1280
- } : _ref$getPageFromRespo,
1281
- _ref$getPagination = _ref.getPagination,
1282
- getPagination = _ref$getPagination === void 0 ? function () {
1283
- var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1284
- cp = _ref2.current_page,
1285
- pp = _ref2.per_page,
1286
- lp = _ref2.last_page,
1287
- total = _ref2.total;
1288
- return {
1289
- pageNumber: cp,
1290
- pageCount: pp,
1291
- lastPage: lp,
1292
- total: total
1293
- };
1294
- } : _ref$getPagination,
1295
- _ref$onLoaded = _ref.onLoaded,
1296
- onLoaded = _ref$onLoaded === void 0 ? null : _ref$onLoaded,
1297
- _ref$onError = _ref.onError,
1298
- onError = _ref$onError === void 0 ? null : _ref$onError;
1299
- // Pagination
1300
- var _useState = React.useState(page !== null),
1301
- _useState2 = _slicedToArray(_useState, 2),
1302
- paginated = _useState2[0],
1303
- setPaginated = _useState2[1];
1304
- var _useState3 = React.useState(null),
1305
- _useState4 = _slicedToArray(_useState3, 2),
1306
- pagination = _useState4[0],
1307
- setPagination = _useState4[1];
1308
- var _getPagination = getPagination(pagination || {}),
1309
- _getPagination$pageNu = _getPagination.pageNumber,
1310
- pageNumber = _getPagination$pageNu === void 0 ? page : _getPagination$pageNu,
1311
- _getPagination$pageCo = _getPagination.pageCount,
1312
- pageCount = _getPagination$pageCo === void 0 ? count : _getPagination$pageCo,
1313
- _getPagination$lastPa = _getPagination.lastPage,
1314
- lastPage = _getPagination$lastPa === void 0 ? null : _getPagination$lastPa,
1315
- _getPagination$total = _getPagination.total,
1316
- total = _getPagination$total === void 0 ? null : _getPagination$total;
1317
- var _useMemo = React.useMemo(function () {
1318
- return (startingPages || []).reduce(function (paginatedData, it) {
1319
- var _ref3 = it || {},
1320
- items = _ref3.data,
1321
- currentPagination = _ref3.pagination;
1322
- // eslint-disable-next-line no-param-reassign
1323
- paginatedData.data = paginatedData.data.concat(items);
1324
- // eslint-disable-next-line no-param-reassign
1325
- paginatedData.pagination = currentPagination;
1326
- return paginatedData;
1327
- }, {
1328
- data: [],
1329
- pagination: {}
1330
- });
1331
- }, [startingPages]),
1332
- initialPages = _useMemo.data,
1333
- initialPagination = _useMemo.pagination;
1334
- var _useState5 = React.useState(startingPages === null),
1335
- _useState6 = _slicedToArray(_useState5, 2),
1336
- canLoad = _useState6[0],
1337
- setCanLoad = _useState6[1];
1338
- var _useState7 = React.useState(false),
1339
- _useState8 = _slicedToArray(_useState7, 2),
1340
- loading = _useState8[0],
1341
- setLoading = _useState8[1];
1342
-
1343
- // Query
1344
- var query = React.useMemo(function () {
1345
- return _objectSpread({}, isString(pageQuery) ? queryString.parse(pageQuery || null, {
1346
- arrayFormat: 'bracket'
1347
- }) : pageQuery);
1348
- }, [pageQuery]);
1349
-
1350
- // Items
1351
- var _useState9 = React.useState(null),
1352
- _useState10 = _slicedToArray(_useState9, 2),
1353
- items = _useState10[0],
1354
- setItems = _useState10[1];
1355
- var getPages = React.useCallback(function (newQuery, newPageNumber, newPageCount) {
1356
- return getPage(newQuery, newPageNumber, newPageCount);
1357
- }, [getPage]);
1358
-
1359
- // Api has changed, reset to beginning
1360
- React.useEffect(function () {
1361
- setItems(initialPages);
1362
- setPagination(initialPagination);
1363
- }, [getPages, setItems, setPagination]);
1364
- React.useEffect(function () {
1365
- // eslint-disable-next-line
1366
- // console.log('try to load');
1367
- if (!canLoad || loading || lastPage !== null && pageNumber > lastPage) {
1368
- // console.log('skips loading');
1369
- return;
1370
- }
1371
- // eslint-disable-next-line
1372
- // console.log('actually load', canLoad, loading, lastPage, pageNumber);
1373
- setLoading(true);
1374
- setCanLoad(false);
1375
- // TODO: make this a cancellable promise
1376
- getPages(query, pageNumber, pageCount).then(function (response) {
1377
- return getPageFromResponse(response);
1378
- }).then(function (response) {
1379
- var _ref4 = response || {},
1380
- _ref4$data = _ref4.data,
1381
- data = _ref4$data === void 0 ? null : _ref4$data,
1382
- _ref4$meta = _ref4.meta,
1383
- meta = _ref4$meta === void 0 ? null : _ref4$meta;
1384
- // console.log('response --- ', response);
1385
- // This is not a paginated list so we dont care anymore
1386
- if (data === null && meta === null) {
1387
- setItems(response);
1388
- setPaginated(false);
1389
- } else {
1390
- setItems(function (old) {
1391
- return [].concat(_toConsumableArray(old || null), _toConsumableArray(data));
1392
- });
1393
- setPagination(meta);
1394
- setPaginated(true);
1395
- }
1396
- return response;
1397
- }).then(function (response) {
1398
- setLoading(false);
1399
- if (onLoaded !== null) {
1400
- onLoaded(response);
1401
- }
1402
- })["catch"](function (e) {
1403
- // Error is real
1404
- setLoading(false);
1405
- if (onError !== null) {
1406
- onError(e);
1407
- }
1408
- });
1409
- }, [query, pageNumber, canLoad, getPages, setLoading, setItems, setPagination, onLoaded, onError]);
1410
- var reset = React.useCallback(function () {
1411
- setItems([]);
1412
- setPagination(null);
1413
- setCanLoad(true);
1414
- }, [setItems, setPagination, setCanLoad]);
1415
-
1416
- // Resets the game, "natural" refresh
1417
- var onQueryChange = React.useEffect(function () {
1418
- reset();
1419
- }, [query, page, count, reset]);
1420
-
1421
- // Handle to Load next
1422
- var loadNextPage = React.useCallback(function () {
1423
- if (!loading && pageNumber < lastPage) {
1424
- var params = _objectSpread(_objectSpread({}, pagination), {}, {
1425
- current_page: pageNumber + 1,
1426
- per_page: pageCount
1427
- });
1428
- setPagination(params);
1429
- setCanLoad(true);
1430
- }
1431
- }, [query, pagination, pageNumber, pageCount, loading, lastPage, onQueryChange, setCanLoad]);
1432
- var disabled = (items || []).length === 0 || loading || pageNumber >= lastPage || lastPage === null || lastPage === 1;
1433
- var regularLoaded = !paginated && items !== null;
1434
- var paginatedLoaded = !loading && items !== null && (items.length === total || pageNumber >= lastPage);
1435
- return {
1436
- items: items,
1437
- total: total,
1438
- page: pageNumber,
1439
- count: pageCount,
1440
- lastPage: lastPage,
1441
- loading: loading,
1442
- loaded: !loading,
1443
- allLoaded: regularLoaded || paginatedLoaded,
1444
- disabled: disabled,
1445
- loadNextPage: loadNextPage,
1446
- reset: reset
1447
- };
1448
- };
1449
-
1450
- var useMedias = function useMedias() {
1451
- var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1452
- var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
1453
- var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
1454
- var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
1455
- var api = useApi();
1456
- var getPage = React.useCallback(function (newQuery) {
1457
- var requestedPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1458
- var requestedCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1459
- return api.medias.get(newQuery, requestedPage, requestedCount);
1460
- }, [api]);
1461
- return useItems(_objectSpread({
1462
- getPage: getPage,
1463
- query: query,
1464
- page: page,
1465
- count: count
1466
- }, opts));
1467
- };
1468
- var useMedias$1 = useMedias;
1469
-
1470
- var useMediasRecent = function useMediasRecent(opts) {
1471
- var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'media-gallery-recent-searches';
1472
- var createSearch = React.useCallback(function (value) {
1473
- if (window !== undefined && value) {
1474
- var recent = window.localStorage.getItem(key) || null;
1475
- var current = recent !== null ? JSON.parse(recent || '[]') : [];
1476
- var encoded = JSON.stringify([value].concat(_toConsumableArray(current)));
1477
- window.localStorage.setItem(key, encoded);
1478
- return true;
1479
- }
1480
- return false;
1481
- }, [key]);
1482
- var getSearches = React.useCallback(function () {
1483
- var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;
1484
- if (window !== undefined) {
1485
- var recent = window.localStorage.getItem(key) || null;
1486
- var current = recent !== null ? JSON.parse(recent || '[]') : [];
1487
- return current.slice(0, count);
1488
- }
1489
- return [];
1490
- }, [key]);
1491
- return {
1492
- createSearch: createSearch,
1493
- getSearches: getSearches
1494
- };
1495
- };
1496
- var useMediasRecent$1 = useMediasRecent;
1497
-
1498
- var _excluded$1 = ["items", "pageItems"];
1499
- var useMediaTags = function useMediaTags() {
1500
- var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1501
- var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;
1502
- var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1503
- var api = useApi();
1504
- var getItems = React.useCallback(function () {
1505
- return api.medias.getTags(query, count);
1506
- }, [api, query, count]);
1507
- var _useItems = useItems$2(_objectSpread({
1508
- getItems: getItems
1509
- }, opts)),
1510
- items = _useItems.items;
1511
- _useItems.pageItems;
1512
- var request = _objectWithoutProperties(_useItems, _excluded$1);
1513
- return _objectSpread({
1514
- tags: items
1515
- }, request);
1516
- };
1517
- var useMediaTags$1 = useMediaTags;
1518
-
1519
- var useMediaUpdate = function useMediaUpdate() {
1520
- var _useState = React.useState(false),
1521
- _useState2 = _slicedToArray(_useState, 2),
1522
- updating = _useState2[0],
1523
- setUpdating = _useState2[1];
1524
- var api = useApi();
1525
- var update = React.useCallback(function (id, data) {
1526
- setUpdating(true);
1527
- return api.medias.update(id, data).then(function (response) {
1528
- setUpdating(false);
1529
- return response;
1530
- });
1531
- }, [api, setUpdating]);
1532
- return {
1533
- update: update,
1534
- updating: updating
1535
- };
1536
- };
1537
- var useMediaUpdate$1 = useMediaUpdate;
1538
-
1539
- var useMediaRequestDelete = function useMediaRequestDelete() {
1540
- var _useState = React.useState(false),
1541
- _useState2 = _slicedToArray(_useState, 2),
1542
- requesting = _useState2[0],
1543
- setRequesting = _useState2[1];
1544
- var api = useApi();
1545
- var requestDeleteMedia = React.useCallback(function (id) {
1546
- setRequesting(true);
1547
- return api.medias.requestDeleteMedia(id).then(function (response) {
1548
- setRequesting(false);
1549
- return response;
1550
- });
1551
- }, [api, setRequesting]);
1552
- return {
1553
- requestDeleteMedia: requestDeleteMedia,
1554
- requesting: requesting
1555
- };
1556
- };
1557
- var useMediaRequestDelete$1 = useMediaRequestDelete;
1558
-
1559
- var useMediaDelete = function useMediaDelete() {
1560
- var _useState = React.useState(false),
1561
- _useState2 = _slicedToArray(_useState, 2),
1562
- deleting = _useState2[0],
1563
- setDeleting = _useState2[1];
1564
- var api = useApi();
1565
- var deleteMedia = React.useCallback(function (id) {
1566
- setDeleting(true);
1567
- return api.medias["delete"](id).then(function (response) {
1568
- setDeleting(false);
1569
- return response;
1570
- });
1571
- }, [api, setDeleting]);
1572
- return {
1573
- deleteMedia: deleteMedia,
1574
- deleting: deleting
1575
- };
1576
- };
1577
- var useMediaDelete$1 = useMediaDelete;
1578
-
1579
- var _excluded = ["data"];
1580
- var useQuiz = function useQuiz() {
1581
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1582
- screenId = _ref.screenId,
1583
- _ref$opts = _ref.opts,
1584
- opts = _ref$opts === void 0 ? {} : _ref$opts;
1585
- var api = useApi();
1586
- var loader = React.useCallback(function () {
1587
- return api !== null ? api.quiz.results(screenId) : null;
1588
- }, [api, screenId]);
1589
- var _ref2 = api !== null ? useData$1(loader, opts) : {
1590
- data: null
1591
- },
1592
- data = _ref2.data,
1593
- request = _objectWithoutProperties(_ref2, _excluded);
1594
- return _objectSpread({
1595
- quiz: data || []
1596
- }, request);
1597
- };
1598
- var useQuiz$1 = useQuiz;
1599
-
1600
- var useQuizCreate = function useQuizCreate() {
1601
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1602
- screenId = _ref.screenId,
1603
- _ref$visitorId = _ref.visitorId,
1604
- providedVisitorId = _ref$visitorId === void 0 ? null : _ref$visitorId,
1605
- _ref$storyId = _ref.storyId,
1606
- providedStoryId = _ref$storyId === void 0 ? null : _ref$storyId,
1607
- _ref$onSuccess = _ref.onSuccess,
1608
- onSuccess = _ref$onSuccess === void 0 ? null : _ref$onSuccess;
1609
- var api = useApi();
1610
- var _useState = React.useState(false),
1611
- _useState2 = _slicedToArray(_useState, 2),
1612
- creating = _useState2[0],
1613
- setCreating = _useState2[1];
1614
- var _ref2 = contexts.useVisitor() || {},
1615
- visitorId = _ref2.id;
1616
- var _ref3 = contexts.useStory() || {},
1617
- storyId = _ref3.id;
1618
- var create = React.useCallback(function (data) {
1619
- if (api === null) {
1620
- return null;
1621
- }
1622
- setCreating(true);
1623
- return api.quiz.create(_objectSpread({
1624
- screen_id: screenId,
1625
- visitor_id: providedVisitorId || visitorId,
1626
- story_id: providedStoryId || storyId
1627
- }, data)).then(function (response) {
1628
- setCreating(false);
1629
- if (onSuccess !== null) {
1630
- onSuccess(response);
1631
- }
1632
- return response;
1633
- });
1634
- }, [api, setCreating, onSuccess, screenId, visitorId, storyId, providedVisitorId, providedStoryId]);
1635
- return {
1636
- create: create,
1637
- creating: creating
1638
- };
1639
- };
1640
- var useQuizCreate$1 = useQuizCreate;
1641
-
1642
- /* eslint-disable react/jsx-props-no-spreading */
1643
- var propTypes = {
1644
- api: PropTypes.instanceOf(Api$1),
1645
- apiBaseUrl: PropTypes.string,
1646
- children: PropTypes.node
1647
- };
1648
- var defaultProps = {
1649
- api: null,
1650
- apiBaseUrl: undefined,
1651
- children: null
1652
- };
1653
- var DataProvider = function DataProvider(_ref) {
1654
- var api = _ref.api,
1655
- apiBaseUrl = _ref.apiBaseUrl,
1656
- children = _ref.children;
1657
- return /*#__PURE__*/React.createElement(ApiProvider, {
1658
- api: api,
1659
- baseUrl: apiBaseUrl
1660
- }, children);
1661
- };
1662
- DataProvider.propTypes = propTypes;
1663
- DataProvider.defaultProps = defaultProps;
1664
- var DataProvider$1 = DataProvider;
1665
-
1666
- exports.Api = Api$1;
1667
- exports.ApiProvider = ApiProvider;
1668
- exports.BaseApi = Base$1;
1669
- exports.DataProvider = DataProvider$1;
1670
- exports.useApi = useApi;
1671
- exports.useContributionCreate = useContributionCreate$1;
1672
- exports.useContributions = useContributions$1;
1673
- exports.useData = useData$1;
1674
- exports.useItems = useItems$2;
1675
- exports.useMedia = useMedia$1;
1676
- exports.useMediaAuthors = useMediaAuthors$1;
1677
- exports.useMediaCreate = useMediaCreate$1;
1678
- exports.useMediaDelete = useMediaDelete$1;
1679
- exports.useMediaRequestDelete = useMediaRequestDelete$1;
1680
- exports.useMediaTags = useMediaTags$1;
1681
- exports.useMediaUpdate = useMediaUpdate$1;
1682
- exports.useMedias = useMedias$1;
1683
- exports.useMediasRecentSearches = useMediasRecent$1;
1684
- exports.useQuiz = useQuiz$1;
1685
- exports.useQuizCreate = useQuizCreate$1;