@atlaskit/emoji 64.7.1 → 65.0.0

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 (68) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/api/EmojiResource.js +250 -91
  3. package/dist/cjs/api/media/SiteEmojiResource.js +4 -2
  4. package/dist/cjs/api/media/TokenManager.js +13 -12
  5. package/dist/cjs/components/common/EmojiImage.js +99 -0
  6. package/dist/cjs/components/common/EmojiPlaceholder.js +7 -5
  7. package/dist/cjs/components/common/ResourcedEmoji.js +1 -1
  8. package/dist/cjs/components/common/ResourcedEmojiComponent.js +159 -165
  9. package/dist/cjs/components/common/UploadEmoji.js +3 -14
  10. package/dist/cjs/components/common/styles.js +26 -9
  11. package/dist/cjs/components/picker/EmojiPickerComponent.js +3 -3
  12. package/dist/cjs/components/uploader/EmojiUploadComponent.js +1 -1
  13. package/dist/cjs/context/EmojiContextProvider.js +33 -0
  14. package/dist/cjs/index.js +20 -0
  15. package/dist/cjs/types.js +1 -0
  16. package/dist/cjs/util/analytics/samplingUfo.js +13 -3
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/api/EmojiResource.js +116 -40
  19. package/dist/es2019/api/media/SiteEmojiResource.js +2 -2
  20. package/dist/es2019/api/media/TokenManager.js +12 -12
  21. package/dist/es2019/components/common/EmojiImage.js +74 -0
  22. package/dist/es2019/components/common/EmojiPlaceholder.js +7 -5
  23. package/dist/es2019/components/common/ResourcedEmoji.js +1 -1
  24. package/dist/es2019/components/common/ResourcedEmojiComponent.js +117 -104
  25. package/dist/es2019/components/common/UploadEmoji.js +3 -7
  26. package/dist/es2019/components/common/styles.js +30 -9
  27. package/dist/es2019/components/picker/EmojiPickerComponent.js +2 -2
  28. package/dist/es2019/components/uploader/EmojiUploadComponent.js +1 -1
  29. package/dist/es2019/context/EmojiContextProvider.js +9 -1
  30. package/dist/es2019/index.js +5 -4
  31. package/dist/es2019/types.js +1 -0
  32. package/dist/es2019/util/analytics/samplingUfo.js +11 -1
  33. package/dist/es2019/version.json +1 -1
  34. package/dist/esm/api/EmojiResource.js +257 -93
  35. package/dist/esm/api/media/SiteEmojiResource.js +5 -3
  36. package/dist/esm/api/media/TokenManager.js +13 -12
  37. package/dist/esm/components/common/EmojiImage.js +84 -0
  38. package/dist/esm/components/common/EmojiPlaceholder.js +8 -5
  39. package/dist/esm/components/common/ResourcedEmoji.js +1 -1
  40. package/dist/esm/components/common/ResourcedEmojiComponent.js +155 -165
  41. package/dist/esm/components/common/UploadEmoji.js +3 -12
  42. package/dist/esm/components/common/styles.js +25 -10
  43. package/dist/esm/components/picker/EmojiPickerComponent.js +2 -2
  44. package/dist/esm/components/uploader/EmojiUploadComponent.js +1 -1
  45. package/dist/esm/context/EmojiContextProvider.js +30 -1
  46. package/dist/esm/index.js +5 -4
  47. package/dist/esm/types.js +1 -0
  48. package/dist/esm/util/analytics/samplingUfo.js +13 -2
  49. package/dist/esm/version.json +1 -1
  50. package/dist/types/api/EmojiResource.d.ts +20 -2
  51. package/dist/types/api/EmojiUtils.d.ts +7 -1
  52. package/dist/types/api/media/SiteEmojiResource.d.ts +1 -1
  53. package/dist/types/api/media/TokenManager.d.ts +1 -0
  54. package/dist/types/components/common/EmojiImage.d.ts +13 -0
  55. package/dist/types/components/common/EmojiPlaceholder.d.ts +1 -0
  56. package/dist/types/components/common/LoadingEmojiComponent.d.ts +4 -4
  57. package/dist/types/components/common/ResourcedEmoji.d.ts +3 -3
  58. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +21 -12
  59. package/dist/types/components/common/UploadEmoji.d.ts +1 -1
  60. package/dist/types/components/common/styles.d.ts +1 -0
  61. package/dist/types/index.d.ts +5 -4
  62. package/dist/types/types.d.ts +12 -2
  63. package/dist/types/util/analytics/index.d.ts +1 -1
  64. package/dist/types/util/analytics/samplingUfo.d.ts +1 -8
  65. package/dist/types/util/analytics/ufoExperiences.d.ts +2 -2
  66. package/local-config-example.ts +22 -1
  67. package/package.json +4 -4
  68. package/report.api.md +1287 -0
@@ -1,4 +1,3 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
3
  import _createClass from "@babel/runtime/helpers/createClass";
@@ -13,12 +12,14 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
13
12
 
14
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
14
 
15
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
16
+
16
17
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
17
18
 
18
19
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
19
20
 
20
21
  import { AbstractResource, utils as serviceUtils } from '@atlaskit/util-service-support';
21
- import { selectedToneStorageKey } from '../util/constants';
22
+ import { SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP, selectedToneStorageKey } from '../util/constants';
22
23
  import { isMediaEmoji, isMediaRepresentation, isPromise, toEmojiId } from '../util/type-helpers';
23
24
  import storageAvailable from '../util/storage-available';
24
25
  import { ProviderTypes } from '../types';
@@ -26,7 +27,7 @@ import debug from '../util/logger';
26
27
  import EmojiLoader from './EmojiLoader';
27
28
  import EmojiRepository from './EmojiRepository';
28
29
  import SiteEmojiResource from './media/SiteEmojiResource';
29
- import { ufoExperiences } from '../util/analytics';
30
+ import { sampledUfoEmojiResourceFetched } from '../util/analytics/ufoExperiences';
30
31
 
31
32
  /**
32
33
  * Checks if the emojiProvider can support uploading at a feature level.
@@ -55,69 +56,231 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
55
56
 
56
57
  _defineProperty(_assertThisInitialized(_this), "retries", new Map());
57
58
 
59
+ _defineProperty(_assertThisInitialized(_this), "isInitialised", false);
60
+
61
+ _defineProperty(_assertThisInitialized(_this), "getOptimisticImageURL", function (emojiId) {
62
+ if (_this.emojiProviderConfig.optimisticImageApi) {
63
+ return _this.emojiProviderConfig.optimisticImageApi.getUrl(emojiId);
64
+ }
65
+
66
+ return;
67
+ });
68
+
58
69
  _defineProperty(_assertThisInitialized(_this), "isLoaded", function () {
59
70
  return _this.activeLoaders === 0 && _this.emojiRepository;
60
71
  });
61
72
 
73
+ _this.emojiProviderConfig = config;
62
74
  _this.recordConfig = config.recordConfig;
63
- _this.currentUser = config.currentUser; // Ensure order is retained by tracking until all done.
75
+ _this.currentUser = config.currentUser;
64
76
 
65
- var emojiResponses = [];
66
- _this.activeLoaders = config.providers.length;
67
- config.providers.forEach(function (provider, index) {
68
- var providerType = _this.getProviderType(provider);
77
+ if (storageAvailable('localStorage')) {
78
+ _this.selectedTone = _this.loadStoredTone();
79
+ }
69
80
 
70
- ufoExperiences['emoji-resource-fetched'].getInstance(providerType).start();
71
- ufoExperiences['emoji-resource-fetched'].getInstance(providerType).addMetadata({
72
- type: providerType
73
- });
74
- var loader = new EmojiLoader(provider);
75
- var emojis = loader.loadEmoji();
76
- emojis.then(function (emojiResponse) {
77
- emojiResponses[index] = emojiResponse;
81
+ if (config.providers.length === 0) {
82
+ throw new Error('No providers specified');
83
+ }
78
84
 
79
- _this.initEmojiRepository(emojiResponses);
85
+ return _this;
86
+ }
80
87
 
81
- _this.initSiteEmojiResource(emojiResponse, provider).then(function () {
82
- _this.activeLoaders--;
88
+ _createClass(EmojiResource, [{
89
+ key: "fetchEmojiProvider",
90
+ value: function fetchEmojiProvider(force) {
91
+ var _this2 = this;
83
92
 
84
- _this.performRetries();
93
+ // unless (re-)fetch is being forced, fetching will only
94
+ // happen if no emojiRepository exists
95
+ // in case this method is called and emojiRepository has already been populated
96
+ // the method will just return the existing emojiRepository
97
+ if (force || !this.emojiRepository && !this.isInitialised) {
98
+ this.isInitialised = true; // Ensure order is retained by tracking until all done.
99
+
100
+ var emojiResponses = [];
101
+ this.activeLoaders = this.emojiProviderConfig.providers.length;
102
+ this.emojiProviderConfig.providers.forEach( /*#__PURE__*/function () {
103
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(provider, index) {
104
+ var providerType, loader, emojis;
105
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
106
+ while (1) {
107
+ switch (_context.prev = _context.next) {
108
+ case 0:
109
+ providerType = _this2.getProviderType(provider);
110
+ sampledUfoEmojiResourceFetched(providerType).start({
111
+ samplingRate: SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP
112
+ });
113
+ sampledUfoEmojiResourceFetched(providerType).addMetadata({
114
+ type: providerType
115
+ });
116
+ loader = new EmojiLoader(provider);
117
+ emojis = loader.loadEmoji();
118
+ _context.next = 7;
119
+ return emojis.then(function (emojiResponse) {
120
+ emojiResponses[index] = emojiResponse;
121
+
122
+ _this2.initEmojiRepository(emojiResponses);
123
+
124
+ _this2.initSiteEmojiResource(emojiResponse, provider).then(function () {
125
+ _this2.activeLoaders--;
126
+
127
+ _this2.performRetries();
128
+
129
+ _this2.refreshLastFilter(); // if not site emoji it would still resolve
130
+ // TODO: improve the logic in future
131
+
132
+
133
+ sampledUfoEmojiResourceFetched(providerType).success();
134
+ });
135
+ }).catch(function (reason) {
136
+ _this2.activeLoaders--;
137
+
138
+ _this2.notifyError(reason);
139
+
140
+ sampledUfoEmojiResourceFetched(providerType).failure({
141
+ metadata: {
142
+ reason: reason,
143
+ source: 'EmojiProvider',
144
+ data: {
145
+ providerUrl: provider.url
146
+ }
147
+ }
148
+ });
149
+ });
150
+
151
+ case 7:
152
+ case "end":
153
+ return _context.stop();
154
+ }
155
+ }
156
+ }, _callee);
157
+ }));
158
+
159
+ return function (_x, _x2) {
160
+ return _ref.apply(this, arguments);
161
+ };
162
+ }());
163
+ }
85
164
 
86
- _this.refreshLastFilter(); // if not site emoji it would still resolve
87
- // TODO: improve the logic in future
165
+ return Promise.resolve(this.emojiRepository);
166
+ }
167
+ }, {
168
+ key: "fetchByEmojiId",
169
+ value: function () {
170
+ var _fetchByEmojiId = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(emojiId, optimistic) {
171
+ var _emoji, provider, loader, loadEmoji, _emoji2, emoji;
88
172
 
173
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
174
+ while (1) {
175
+ switch (_context2.prev = _context2.next) {
176
+ case 0:
177
+ if (!(this.emojiRepository && this.isLoaded())) {
178
+ _context2.next = 6;
179
+ break;
180
+ }
89
181
 
90
- ufoExperiences['emoji-resource-fetched'].getInstance(providerType).success();
91
- });
92
- }).catch(function (reason) {
93
- _this.activeLoaders--;
182
+ _context2.next = 3;
183
+ return this.findByEmojiId(emojiId);
94
184
 
95
- _this.notifyError(reason);
185
+ case 3:
186
+ _emoji = _context2.sent;
96
187
 
97
- ufoExperiences['emoji-resource-fetched'].getInstance(providerType).failure({
98
- metadata: {
99
- reason: reason,
100
- source: 'EmojiProvider',
101
- data: {
102
- providerUrl: provider.url
103
- }
104
- }
105
- });
106
- });
107
- });
188
+ if (!_emoji) {
189
+ _context2.next = 6;
190
+ break;
191
+ }
108
192
 
109
- if (storageAvailable('localStorage')) {
110
- _this.selectedTone = _this.loadStoredTone();
111
- }
193
+ return _context2.abrupt("return", Promise.resolve(this.getMediaEmojiDescriptionURLWithInlineToken(_emoji)));
112
194
 
113
- if (config.providers.length === 0) {
114
- throw new Error('No providers specified');
115
- }
195
+ case 6:
196
+ if (!(this.emojiProviderConfig.singleEmojiApi && optimistic)) {
197
+ _context2.next = 29;
198
+ break;
199
+ }
116
200
 
117
- return _this;
118
- }
201
+ // if config has singleEmojiApi then fetch single emoji
202
+ provider = {
203
+ url: this.emojiProviderConfig.singleEmojiApi.getUrl(emojiId),
204
+ securityProvider: this.emojiProviderConfig.singleEmojiApi.securityProvider
205
+ };
206
+ loader = new EmojiLoader(provider);
207
+ _context2.prev = 9;
208
+ _context2.next = 12;
209
+ return loader.loadEmoji();
210
+
211
+ case 12:
212
+ loadEmoji = _context2.sent;
213
+
214
+ if (loadEmoji.emojis[0]) {
215
+ _context2.next = 15;
216
+ break;
217
+ }
119
218
 
120
- _createClass(EmojiResource, [{
219
+ return _context2.abrupt("return");
220
+
221
+ case 15:
222
+ if (this.siteEmojiResource) {
223
+ _context2.next = 18;
224
+ break;
225
+ }
226
+
227
+ _context2.next = 18;
228
+ return this.initSiteEmojiResource(loadEmoji, provider);
229
+
230
+ case 18:
231
+ return _context2.abrupt("return", this.getMediaEmojiDescriptionURLWithInlineToken(loadEmoji.emojis[0]));
232
+
233
+ case 21:
234
+ _context2.prev = 21;
235
+ _context2.t0 = _context2["catch"](9);
236
+ _context2.next = 25;
237
+ return this.findByEmojiId(emojiId);
238
+
239
+ case 25:
240
+ _emoji2 = _context2.sent;
241
+
242
+ if (_emoji2) {
243
+ _context2.next = 28;
244
+ break;
245
+ }
246
+
247
+ return _context2.abrupt("return");
248
+
249
+ case 28:
250
+ return _context2.abrupt("return", this.getMediaEmojiDescriptionURLWithInlineToken(_emoji2));
251
+
252
+ case 29:
253
+ _context2.next = 31;
254
+ return this.findByEmojiId(emojiId);
255
+
256
+ case 31:
257
+ emoji = _context2.sent;
258
+
259
+ if (emoji) {
260
+ _context2.next = 34;
261
+ break;
262
+ }
263
+
264
+ return _context2.abrupt("return");
265
+
266
+ case 34:
267
+ return _context2.abrupt("return", this.getMediaEmojiDescriptionURLWithInlineToken(emoji));
268
+
269
+ case 35:
270
+ case "end":
271
+ return _context2.stop();
272
+ }
273
+ }
274
+ }, _callee2, this, [[9, 21]]);
275
+ }));
276
+
277
+ function fetchByEmojiId(_x3, _x4) {
278
+ return _fetchByEmojiId.apply(this, arguments);
279
+ }
280
+
281
+ return fetchByEmojiId;
282
+ }()
283
+ }, {
121
284
  key: "getProviderType",
122
285
  value: function getProviderType(provider) {
123
286
  if (provider.url.includes('/site')) {
@@ -215,11 +378,11 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
215
378
  }, {
216
379
  key: "retryIfLoading",
217
380
  value: function retryIfLoading(retry, defaultResponse) {
218
- var _this2 = this;
381
+ var _this3 = this;
219
382
 
220
383
  if (!this.isLoaded()) {
221
384
  return new Promise(function (resolve, reject) {
222
- _this2.retries.set(retry, {
385
+ _this3.retries.set(retry, {
223
386
  resolve: resolve,
224
387
  reject: reject
225
388
  });
@@ -242,40 +405,40 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
242
405
  }, {
243
406
  key: "getMediaEmojiDescriptionURLWithInlineToken",
244
407
  value: function () {
245
- var _getMediaEmojiDescriptionURLWithInlineToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(emoji) {
408
+ var _getMediaEmojiDescriptionURLWithInlineToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(emoji) {
246
409
  var tokenisedMediaPath;
247
- return _regeneratorRuntime.wrap(function _callee$(_context) {
410
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
248
411
  while (1) {
249
- switch (_context.prev = _context.next) {
412
+ switch (_context3.prev = _context3.next) {
250
413
  case 0:
251
414
  if (!(this.siteEmojiResource && isMediaRepresentation(emoji.representation))) {
252
- _context.next = 5;
415
+ _context3.next = 5;
253
416
  break;
254
417
  }
255
418
 
256
- _context.next = 3;
419
+ _context3.next = 3;
257
420
  return this.siteEmojiResource.generateTokenisedMediaURL(emoji);
258
421
 
259
422
  case 3:
260
- tokenisedMediaPath = _context.sent;
261
- return _context.abrupt("return", _objectSpread(_objectSpread({}, emoji), {}, {
423
+ tokenisedMediaPath = _context3.sent;
424
+ return _context3.abrupt("return", _objectSpread(_objectSpread({}, emoji), {}, {
262
425
  representation: _objectSpread(_objectSpread({}, emoji.representation), {}, {
263
426
  mediaPath: tokenisedMediaPath
264
427
  })
265
428
  }));
266
429
 
267
430
  case 5:
268
- return _context.abrupt("return", emoji);
431
+ return _context3.abrupt("return", emoji);
269
432
 
270
433
  case 6:
271
434
  case "end":
272
- return _context.stop();
435
+ return _context3.stop();
273
436
  }
274
437
  }
275
- }, _callee, this);
438
+ }, _callee3, this);
276
439
  }));
277
440
 
278
- function getMediaEmojiDescriptionURLWithInlineToken(_x) {
441
+ function getMediaEmojiDescriptionURLWithInlineToken(_x5) {
279
442
  return _getMediaEmojiDescriptionURLWithInlineToken.apply(this, arguments);
280
443
  }
281
444
 
@@ -329,7 +492,7 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
329
492
  }, {
330
493
  key: "findByShortName",
331
494
  value: function findByShortName(shortName) {
332
- var _this3 = this;
495
+ var _this4 = this;
333
496
 
334
497
  if (this.isLoaded()) {
335
498
  // Wait for all emoji to load before looking by shortName (to ensure correct priority)
@@ -337,13 +500,13 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
337
500
  }
338
501
 
339
502
  return this.retryIfLoading(function () {
340
- return _this3.findByShortName(shortName);
503
+ return _this4.findByShortName(shortName);
341
504
  }, undefined);
342
505
  }
343
506
  }, {
344
507
  key: "findByEmojiId",
345
508
  value: function findByEmojiId(emojiId) {
346
- var _this4 = this;
509
+ var _this5 = this;
347
510
 
348
511
  var id = emojiId.id,
349
512
  shortName = emojiId.shortName;
@@ -364,10 +527,10 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
364
527
  if (!emoji) {
365
528
  // if not, fallback to searching by shortName to
366
529
  // at least render an alternative
367
- return _this4.findByShortName(shortName);
530
+ return _this5.findByShortName(shortName);
368
531
  }
369
532
 
370
- _this4.addUnknownEmoji(emoji);
533
+ _this5.addUnknownEmoji(emoji);
371
534
 
372
535
  return emoji;
373
536
  });
@@ -384,59 +547,59 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
384
547
  }
385
548
 
386
549
  return this.retryIfLoading(function () {
387
- return _this4.findByEmojiId(emojiId);
550
+ return _this5.findByEmojiId(emojiId);
388
551
  }, undefined);
389
552
  }
390
553
  }, {
391
554
  key: "findById",
392
555
  value: function findById(id) {
393
- var _this5 = this;
556
+ var _this6 = this;
394
557
 
395
558
  if (this.isLoaded()) {
396
559
  return this.emojiRepository.findById(id);
397
560
  }
398
561
 
399
562
  return this.retryIfLoading(function () {
400
- return _this5.findById(id);
563
+ return _this6.findById(id);
401
564
  }, undefined);
402
565
  }
403
566
  }, {
404
567
  key: "findInCategory",
405
568
  value: function findInCategory(categoryId) {
406
- var _this6 = this;
569
+ var _this7 = this;
407
570
 
408
571
  if (this.isLoaded()) {
409
572
  return Promise.resolve(this.emojiRepository.findInCategory(categoryId));
410
573
  }
411
574
 
412
575
  return this.retryIfLoading(function () {
413
- return _this6.findInCategory(categoryId);
576
+ return _this7.findInCategory(categoryId);
414
577
  }, []);
415
578
  }
416
579
  }, {
417
580
  key: "getAsciiMap",
418
581
  value: function getAsciiMap() {
419
- var _this7 = this;
582
+ var _this8 = this;
420
583
 
421
584
  if (this.isLoaded()) {
422
585
  return Promise.resolve(this.emojiRepository.getAsciiMap());
423
586
  }
424
587
 
425
588
  return this.retryIfLoading(function () {
426
- return _this7.getAsciiMap();
589
+ return _this8.getAsciiMap();
427
590
  }, new Map());
428
591
  }
429
592
  }, {
430
593
  key: "getFrequentlyUsed",
431
594
  value: function getFrequentlyUsed(options) {
432
- var _this8 = this;
595
+ var _this9 = this;
433
596
 
434
597
  if (this.isLoaded()) {
435
598
  return Promise.resolve(this.emojiRepository.getFrequentlyUsed(options));
436
599
  }
437
600
 
438
601
  return this.retryIfLoading(function () {
439
- return _this8.getFrequentlyUsed(options);
602
+ return _this9.getFrequentlyUsed(options);
440
603
  }, []);
441
604
  }
442
605
  /**
@@ -474,12 +637,12 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
474
637
  }, {
475
638
  key: "deleteSiteEmoji",
476
639
  value: function deleteSiteEmoji(emoji) {
477
- var _this9 = this;
640
+ var _this10 = this;
478
641
 
479
642
  if (this.siteEmojiResource && emoji.id) {
480
643
  return this.siteEmojiResource.deleteEmoji(emoji).then(function (success) {
481
- if (success && _this9.emojiRepository) {
482
- _this9.emojiRepository.delete(emoji);
644
+ if (success && _this10.emojiRepository) {
645
+ _this10.emojiRepository.delete(emoji);
483
646
 
484
647
  return true;
485
648
  }
@@ -493,7 +656,7 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
493
656
  }
494
657
 
495
658
  return this.retryIfLoading(function () {
496
- return _this9.deleteSiteEmoji(emoji);
659
+ return _this10.deleteSiteEmoji(emoji);
497
660
  }, false);
498
661
  }
499
662
  }, {
@@ -522,14 +685,14 @@ export var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
522
685
  }, {
523
686
  key: "calculateDynamicCategories",
524
687
  value: function calculateDynamicCategories() {
525
- var _this10 = this;
688
+ var _this11 = this;
526
689
 
527
690
  if (this.isLoaded()) {
528
691
  return Promise.resolve(this.emojiRepository.getDynamicCategoryList());
529
692
  }
530
693
 
531
694
  return this.retryIfLoading(function () {
532
- return _this10.calculateDynamicCategories();
695
+ return _this11.calculateDynamicCategories();
533
696
  }, []);
534
697
  }
535
698
  }, {
@@ -555,19 +718,19 @@ var UploadingEmojiResource = /*#__PURE__*/function (_EmojiResource) {
555
718
  var _super2 = _createSuper(UploadingEmojiResource);
556
719
 
557
720
  function UploadingEmojiResource(config) {
558
- var _this11;
721
+ var _this12;
559
722
 
560
723
  _classCallCheck(this, UploadingEmojiResource);
561
724
 
562
- _this11 = _super2.call(this, config);
563
- _this11.allowUpload = !!config.allowUpload;
564
- return _this11;
725
+ _this12 = _super2.call(this, config);
726
+ _this12.allowUpload = !!config.allowUpload;
727
+ return _this12;
565
728
  }
566
729
 
567
730
  _createClass(UploadingEmojiResource, [{
568
731
  key: "isUploadSupported",
569
732
  value: function isUploadSupported() {
570
- var _this12 = this;
733
+ var _this13 = this;
571
734
 
572
735
  if (!this.allowUpload) {
573
736
  return Promise.resolve(false);
@@ -578,23 +741,24 @@ var UploadingEmojiResource = /*#__PURE__*/function (_EmojiResource) {
578
741
  }
579
742
 
580
743
  return this.retryIfLoading(function () {
581
- return _this12.isUploadSupported();
744
+ return _this13.isUploadSupported();
582
745
  }, false);
583
746
  }
584
747
  }, {
585
748
  key: "uploadCustomEmoji",
586
749
  value: function uploadCustomEmoji(upload) {
587
- var _this13 = this;
750
+ var _this14 = this;
588
751
 
752
+ var retry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
589
753
  return this.isUploadSupported().then(function (supported) {
590
- if (!supported || !_this13.siteEmojiResource) {
754
+ if (!supported || !_this14.siteEmojiResource) {
591
755
  return Promise.reject('No media api support is configured');
592
756
  }
593
757
 
594
- return _this13.siteEmojiResource.uploadEmoji(upload).then(function (emoji) {
595
- _this13.addUnknownEmoji(emoji);
758
+ return _this14.siteEmojiResource.uploadEmoji(upload, retry).then(function (emoji) {
759
+ _this14.addUnknownEmoji(emoji);
596
760
 
597
- _this13.refreshLastFilter();
761
+ _this14.refreshLastFilter();
598
762
 
599
763
  return emoji;
600
764
  });
@@ -603,14 +767,14 @@ var UploadingEmojiResource = /*#__PURE__*/function (_EmojiResource) {
603
767
  }, {
604
768
  key: "prepareForUpload",
605
769
  value: function prepareForUpload() {
606
- var _this14 = this;
770
+ var _this15 = this;
607
771
 
608
772
  if (this.siteEmojiResource) {
609
773
  this.siteEmojiResource.prepareForUpload();
610
774
  }
611
775
 
612
776
  return this.retryIfLoading(function () {
613
- return _this14.prepareForUpload();
777
+ return _this15.prepareForUpload();
614
778
  }, undefined);
615
779
  }
616
780
  }]);
@@ -1,10 +1,10 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
3
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
5
4
  import _createClass from "@babel/runtime/helpers/createClass";
6
5
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
6
  var _excluded = ["altRepresentations"];
7
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
8
8
 
9
9
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
10
 
@@ -156,11 +156,13 @@ var SiteEmojiResource = /*#__PURE__*/function () {
156
156
  }
157
157
  }, {
158
158
  key: "uploadEmoji",
159
- value: function uploadEmoji(upload, progressCallback) {
159
+ value: function uploadEmoji(upload) {
160
160
  var _this2 = this;
161
161
 
162
+ var retry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
163
+ var progressCallback = arguments.length > 2 ? arguments[2] : undefined;
162
164
  var startTime = Date.now();
163
- return this.tokenManager.getToken('upload').then(function (uploadToken) {
165
+ return this.tokenManager.getToken('upload', retry).then(function (uploadToken) {
164
166
  var tokenLoadTime = Date.now() - startTime;
165
167
  debug('upload token load time', tokenLoadTime);
166
168
  return new Promise(function (resolve, reject) {
@@ -24,6 +24,13 @@ var TokenManager = /*#__PURE__*/function () {
24
24
 
25
25
  return false;
26
26
  }
27
+ }, {
28
+ key: "fetchNewToken",
29
+ value: function fetchNewToken(type) {
30
+ return serviceUtils.requestService(this.siteServiceConfig, {
31
+ path: "token/".concat(type)
32
+ });
33
+ }
27
34
  }, {
28
35
  key: "addToken",
29
36
  value: function addToken(type, mediaApiToken) {
@@ -52,22 +59,16 @@ var TokenManager = /*#__PURE__*/function () {
52
59
  }
53
60
 
54
61
  if (activeTokenRefresh) {
55
- // refresh already active, return that
62
+ // refresh token promise already active, return that
56
63
  return activeTokenRefresh;
57
- } // clear expired token
58
-
59
-
60
- tokenDetail.mediaApiToken = undefined;
61
- }
64
+ }
65
+ } // request a new token and track the promise for future requests until completed
62
66
 
63
- var path = "token/".concat(type); // request a new token and track the promise for future requests until completed
64
67
 
65
- tokenDetail.activeTokenRefresh = serviceUtils.requestService(this.siteServiceConfig, {
66
- path: path
67
- }).then(function (mediaApiToken) {
68
+ tokenDetail.activeTokenRefresh = this.fetchNewToken(type).then(function (token) {
69
+ tokenDetail.mediaApiToken = token;
68
70
  tokenDetail.activeTokenRefresh = undefined;
69
- tokenDetail.mediaApiToken = mediaApiToken;
70
- return mediaApiToken;
71
+ return token;
71
72
  });
72
73
  return tokenDetail.activeTokenRefresh;
73
74
  }