@atlaskit/emoji 64.3.0 → 64.5.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 (73) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/components/common/CachingEmoji.js +8 -6
  3. package/dist/cjs/components/common/RecordSelectionDefault.js +8 -2
  4. package/dist/cjs/components/common/ResourcedEmojiComponent.js +12 -17
  5. package/dist/cjs/components/common/UploadEmoji.js +8 -0
  6. package/dist/cjs/components/picker/EmojiPicker.js +13 -2
  7. package/dist/cjs/components/picker/EmojiPickerComponent.js +38 -18
  8. package/dist/cjs/components/picker/EmojiPickerList.js +0 -20
  9. package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +28 -16
  10. package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +4 -2
  11. package/dist/cjs/components/uploader/EmojiUploadComponent.js +13 -0
  12. package/dist/cjs/context/EmojiContext.js +11 -0
  13. package/dist/cjs/context/EmojiContextProvider.js +29 -0
  14. package/dist/cjs/context/LegacyEmojiContextProvider.js +76 -0
  15. package/dist/cjs/index.js +18 -0
  16. package/dist/cjs/types.js +23 -2
  17. package/dist/cjs/util/analytics/analytics.js +11 -41
  18. package/dist/cjs/util/analytics/index.js +16 -14
  19. package/dist/cjs/util/analytics/ufoExperiences.js +48 -0
  20. package/dist/cjs/version.json +1 -1
  21. package/dist/es2019/components/common/CachingEmoji.js +7 -5
  22. package/dist/es2019/components/common/RecordSelectionDefault.js +9 -2
  23. package/dist/es2019/components/common/ResourcedEmojiComponent.js +11 -16
  24. package/dist/es2019/components/common/UploadEmoji.js +4 -0
  25. package/dist/es2019/components/picker/EmojiPicker.js +9 -2
  26. package/dist/es2019/components/picker/EmojiPickerComponent.js +32 -18
  27. package/dist/es2019/components/picker/EmojiPickerList.js +0 -19
  28. package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +23 -16
  29. package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +3 -2
  30. package/dist/es2019/components/uploader/EmojiUploadComponent.js +9 -0
  31. package/dist/es2019/context/EmojiContext.js +2 -0
  32. package/dist/es2019/context/EmojiContextProvider.js +11 -0
  33. package/dist/es2019/context/LegacyEmojiContextProvider.js +32 -0
  34. package/dist/es2019/index.js +3 -3
  35. package/dist/es2019/types.js +20 -1
  36. package/dist/es2019/util/analytics/analytics.js +16 -37
  37. package/dist/es2019/util/analytics/index.js +2 -1
  38. package/dist/es2019/util/analytics/ufoExperiences.js +35 -0
  39. package/dist/es2019/version.json +1 -1
  40. package/dist/esm/components/common/CachingEmoji.js +7 -5
  41. package/dist/esm/components/common/RecordSelectionDefault.js +6 -3
  42. package/dist/esm/components/common/ResourcedEmojiComponent.js +10 -16
  43. package/dist/esm/components/common/UploadEmoji.js +4 -0
  44. package/dist/esm/components/picker/EmojiPicker.js +8 -2
  45. package/dist/esm/components/picker/EmojiPickerComponent.js +33 -19
  46. package/dist/esm/components/picker/EmojiPickerList.js +0 -21
  47. package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +23 -17
  48. package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +3 -2
  49. package/dist/esm/components/uploader/EmojiUploadComponent.js +10 -0
  50. package/dist/esm/context/EmojiContext.js +2 -0
  51. package/dist/esm/context/EmojiContextProvider.js +12 -0
  52. package/dist/esm/context/LegacyEmojiContextProvider.js +57 -0
  53. package/dist/esm/index.js +3 -3
  54. package/dist/esm/types.js +20 -1
  55. package/dist/esm/util/analytics/analytics.js +8 -33
  56. package/dist/esm/util/analytics/index.js +2 -1
  57. package/dist/esm/util/analytics/ufoExperiences.js +35 -0
  58. package/dist/esm/version.json +1 -1
  59. package/dist/types/components/common/CachingEmoji.d.ts +6 -8
  60. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +0 -6
  61. package/dist/types/components/picker/EmojiPickerComponent.d.ts +0 -6
  62. package/dist/types/components/picker/EmojiPickerList.d.ts +0 -10
  63. package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +0 -6
  64. package/dist/types/components/uploader/EmojiUploadComponent.d.ts +1 -0
  65. package/dist/types/context/EmojiContext.d.ts +4 -0
  66. package/dist/types/context/EmojiContextProvider.d.ts +7 -0
  67. package/dist/types/context/LegacyEmojiContextProvider.d.ts +22 -0
  68. package/dist/types/index.d.ts +3 -3
  69. package/dist/types/types.d.ts +13 -0
  70. package/dist/types/util/analytics/analytics.d.ts +3 -7
  71. package/dist/types/util/analytics/index.d.ts +3 -2
  72. package/dist/types/util/analytics/ufoExperiences.d.ts +11 -0
  73. package/package.json +4 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @atlaskit/emoji
2
2
 
3
+ ## 64.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`fcb3b3f77e2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/fcb3b3f77e2) - Context Provider to convert legacy providers to non legacy providers
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+
13
+ ## 64.4.1
14
+
15
+ ### Patch Changes
16
+
17
+ - [`15f783a5684`](https://bitbucket.org/atlassian/atlassian-frontend/commits/15f783a5684) - export ufo experience name and ufo component name, update component name for emoji recorded experience
18
+
19
+ ## 64.4.0
20
+
21
+ ### Minor Changes
22
+
23
+ - [`39031597fa1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/39031597fa1) - added more UFO experiences support
24
+
3
25
  ## 64.3.0
4
26
 
5
27
  ### Minor Changes
@@ -27,8 +27,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
27
27
 
28
28
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
29
29
 
30
- var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
30
  var _react = _interopRequireWildcard(require("react"));
33
31
 
34
32
  var _EmojiUtils = require("../../api/EmojiUtils");
@@ -47,6 +45,8 @@ var _analytics = require("../../util/analytics");
47
45
 
48
46
  var _constants = require("../../util/constants");
49
47
 
48
+ var _EmojiContext = require("../../context/EmojiContext");
49
+
50
50
  var _excluded = ["placeholderSize"],
51
51
  _excluded2 = ["children", "placeholderSize"];
52
52
 
@@ -100,7 +100,7 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
100
100
  var _this;
101
101
 
102
102
  (0, _classCallCheck2.default)(this, CachingMediaEmoji);
103
- _this = _super.call(this, props, context);
103
+ _this = _super.call(this, props);
104
104
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mounted", false);
105
105
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleLoadError", function (_emojiId, emoji) {
106
106
  var invalidImage = _this.state.invalidImage;
@@ -152,6 +152,10 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
152
152
  value: function loadEmoji(emoji, context, forceLoad) {
153
153
  var _this2 = this;
154
154
 
155
+ if (!context) {
156
+ return;
157
+ }
158
+
155
159
  if (!context.emoji) {
156
160
  return undefined;
157
161
  }
@@ -243,8 +247,6 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
243
247
  }(_react.PureComponent);
244
248
 
245
249
  exports.CachingMediaEmoji = CachingMediaEmoji;
246
- (0, _defineProperty2.default)(CachingMediaEmoji, "contextTypes", {
247
- emoji: _propTypes.default.object
248
- });
250
+ (0, _defineProperty2.default)(CachingMediaEmoji, "contextType", _EmojiContext.EmojiContext);
249
251
  var _default = CachingEmoji;
250
252
  exports.default = _default;
@@ -19,10 +19,16 @@ var createRecordSelectionDefault = function createRecordSelectionDefault(provide
19
19
  return function (emojiId, emoji, event) {
20
20
  try {
21
21
  if (provider.recordSelection && emoji) {
22
+ _analytics.ufoExperiences['emoji-selection-recorded'].start();
23
+
22
24
  provider.recordSelection(emoji).then(function () {
23
- return fireAnalytics && fireAnalytics(_analytics.insertionSucceeded);
25
+ fireAnalytics && fireAnalytics(_analytics.recordSucceeded);
26
+
27
+ _analytics.ufoExperiences['emoji-selection-recorded'].success();
24
28
  }).catch(function () {
25
- return fireAnalytics && fireAnalytics(_analytics.insertionFailed);
29
+ fireAnalytics && fireAnalytics(_analytics.recordFailed);
30
+
31
+ _analytics.ufoExperiences['emoji-selection-recorded'].failure();
26
32
  });
27
33
  }
28
34
  } finally {
@@ -23,8 +23,6 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
23
23
 
24
24
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
25
 
26
- var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
26
  var _react = _interopRequireWildcard(require("react"));
29
27
 
30
28
  var _constants = require("../../util/constants");
@@ -37,6 +35,8 @@ var _EmojiPlaceholder = _interopRequireDefault(require("./EmojiPlaceholder"));
37
35
 
38
36
  var _analytics = require("../../util/analytics");
39
37
 
38
+ var _LegacyEmojiContextProvider = _interopRequireDefault(require("../../context/LegacyEmojiContextProvider"));
39
+
40
40
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
41
 
42
42
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -64,15 +64,6 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
64
64
  }
65
65
 
66
66
  (0, _createClass2.default)(ResourcedEmojiComponent, [{
67
- key: "getChildContext",
68
- value: function getChildContext() {
69
- return {
70
- emoji: {
71
- emojiProvider: this.props.emojiProvider
72
- }
73
- };
74
- }
75
- }, {
76
67
  key: "refreshEmoji",
77
68
  value: function refreshEmoji(emojiProvider, emojiId) {
78
69
  var _this2 = this;
@@ -176,17 +167,21 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
176
167
  shortName = _this$props$emojiId.shortName,
177
168
  id = _this$props$emojiId.id,
178
169
  fallback = _this$props$emojiId.fallback;
179
- return /*#__PURE__*/_react.default.createElement("span", {
170
+ var emojiContextValue = {
171
+ emoji: {
172
+ emojiProvider: this.props.emojiProvider
173
+ }
174
+ };
175
+ return /*#__PURE__*/_react.default.createElement(_LegacyEmojiContextProvider.default, {
176
+ emojiContextValue: emojiContextValue
177
+ }, /*#__PURE__*/_react.default.createElement("span", {
180
178
  "data-emoji-id": id,
181
179
  "data-emoji-short-name": shortName,
182
180
  "data-emoji-text": fallback || shortName
183
- }, element);
181
+ }, element));
184
182
  }
185
183
  }]);
186
184
  return ResourcedEmojiComponent;
187
185
  }(_react.Component);
188
186
 
189
- exports.default = ResourcedEmojiComponent;
190
- (0, _defineProperty2.default)(ResourcedEmojiComponent, "childContextTypes", {
191
- emoji: _propTypes.default.object
192
- });
187
+ exports.default = ResourcedEmojiComponent;
@@ -11,16 +11,22 @@ var _analytics = require("../../util/analytics");
11
11
 
12
12
  var _i18n = require("../i18n");
13
13
 
14
+ var _ufoExperiences = require("../../util/analytics/ufoExperiences");
15
+
14
16
  var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) {
15
17
  var startTime = Date.now();
16
18
  errorSetter(undefined);
17
19
 
18
20
  if ((0, _EmojiResource.supportsUploadFeature)(emojiProvider)) {
21
+ _ufoExperiences.ufoExperiences['emoji-uploaded'].start();
22
+
19
23
  emojiProvider.uploadCustomEmoji(upload).then(function (emojiDescription) {
20
24
  fireAnalytics((0, _analytics.uploadSucceededEvent)({
21
25
  duration: Date.now() - startTime
22
26
  }));
23
27
  onSuccess(emojiDescription);
28
+
29
+ _ufoExperiences.ufoExperiences['emoji-uploaded'].success();
24
30
  }).catch(function (err) {
25
31
  errorSetter(_i18n.messages.emojiUploadFailed); // eslint-disable-next-line no-console
26
32
 
@@ -29,6 +35,8 @@ var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuc
29
35
  duration: Date.now() - startTime,
30
36
  reason: _i18n.messages.emojiUploadFailed.defaultMessage
31
37
  }));
38
+
39
+ _ufoExperiences.ufoExperiences['emoji-uploaded'].failure();
32
40
  });
33
41
  }
34
42
  };
@@ -31,12 +31,16 @@ var _core = require("@emotion/core");
31
31
 
32
32
  var _analyticsNext = require("@atlaskit/analytics-next");
33
33
 
34
+ var _analytics = require("../../util/analytics");
35
+
34
36
  var _LoadingEmojiComponent = _interopRequireDefault(require("../common/LoadingEmojiComponent"));
35
37
 
36
38
  var _EmojiPickerVirtualItems = require("./EmojiPickerVirtualItems");
37
39
 
38
40
  var _styles = require("./styles");
39
41
 
42
+ var _UfoErrorBoundary = require("../common/UfoErrorBoundary");
43
+
40
44
  var _excluded = ["emojiProvider"];
41
45
 
42
46
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
@@ -74,6 +78,9 @@ var EmojiPickerInternal = /*#__PURE__*/function (_LoadingEmojiComponen) {
74
78
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
75
79
  asyncLoadedComponent: EmojiPickerInternal.AsyncLoadedComponent
76
80
  });
81
+
82
+ _analytics.ufoExperiences['emoji-picker-opened'].start();
83
+
77
84
  return _this;
78
85
  }
79
86
 
@@ -101,6 +108,8 @@ var EmojiPickerInternal = /*#__PURE__*/function (_LoadingEmojiComponen) {
101
108
  }
102
109
  };
103
110
 
111
+ _analytics.ufoExperiences['emoji-picker-opened'].markFMP();
112
+
104
113
  return (0, _core.jsx)("div", {
105
114
  css: _styles.emojiPicker,
106
115
  ref: handlePickerRef
@@ -112,9 +121,11 @@ var EmojiPickerInternal = /*#__PURE__*/function (_LoadingEmojiComponen) {
112
121
  var _this$props = this.props,
113
122
  emojiProvider = _this$props.emojiProvider,
114
123
  otherProps = (0, _objectWithoutProperties2.default)(_this$props, _excluded);
115
- return (0, _core.jsx)(EmojiPickerComponent, (0, _extends2.default)({
124
+ return (0, _core.jsx)(_UfoErrorBoundary.UfoErrorBoundary, {
125
+ experiences: [_analytics.ufoExperiences['emoji-picker-opened']]
126
+ }, (0, _core.jsx)(EmojiPickerComponent, (0, _extends2.default)({
116
127
  emojiProvider: loadedEmojiProvider
117
- }, otherProps));
128
+ }, otherProps)));
118
129
  }
119
130
  }]);
120
131
  return EmojiPickerInternal;
@@ -25,8 +25,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
25
25
 
26
26
  var _core = require("@emotion/core");
27
27
 
28
- var _propTypes = _interopRequireDefault(require("prop-types"));
29
-
30
28
  var _react = require("react");
31
29
 
32
30
  var _reactIntlNext = require("react-intl-next");
@@ -57,6 +55,8 @@ var _analytics = require("../../util/analytics");
57
55
 
58
56
  var _styles = require("./styles");
59
57
 
58
+ var _LegacyEmojiContextProvider = _interopRequireDefault(require("../../context/LegacyEmojiContextProvider"));
59
+
60
60
  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; }
61
61
 
62
62
  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) { (0, _defineProperty2.default)(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; }
@@ -146,9 +146,20 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
146
146
  });
147
147
  });
148
148
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSearch", function (query) {
149
- _this.updateEmojis(query, {
149
+ var options = {
150
150
  skinTone: _this.state.selectedTone
151
- });
151
+ };
152
+
153
+ if (query !== _this.state.query) {
154
+ _analytics.ufoExperiences['emoji-searched'].start();
155
+
156
+ _analytics.ufoExperiences['emoji-searched'].addMetadata({
157
+ queryLength: query.length,
158
+ source: 'picker'
159
+ });
160
+ }
161
+
162
+ _this.updateEmojis(query, options);
152
163
  });
153
164
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSearchResult", function (searchResults) {
154
165
  var frequentlyUsedEmoji = _this.state.frequentlyUsedEmojis || [];
@@ -161,6 +172,12 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
161
172
  queryLength: searchQuery.length,
162
173
  numMatches: emojiToRender.length
163
174
  }));
175
+
176
+ _analytics.ufoExperiences['emoji-searched'].success({
177
+ metadata: {
178
+ emojisLength: emojiToRender.length
179
+ }
180
+ });
164
181
  }
165
182
 
166
183
  _this.setStateAfterEmojiChange(searchQuery, emojiToRender, searchResults.emojis, frequentlyUsedEmoji);
@@ -366,15 +383,6 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
366
383
  }
367
384
 
368
385
  (0, _createClass2.default)(EmojiPickerComponent, [{
369
- key: "getChildContext",
370
- value: function getChildContext() {
371
- return {
372
- emoji: {
373
- emojiProvider: this.props.emojiProvider
374
- }
375
- };
376
- }
377
- }, {
378
386
  key: "UNSAFE_componentWillMount",
379
387
  value: function UNSAFE_componentWillMount() {
380
388
  this.openTime = Date.now();
@@ -385,6 +393,8 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
385
393
  value: function componentDidMount() {
386
394
  var _this2 = this;
387
395
 
396
+ _analytics.ufoExperiences['emoji-picker-opened'].success();
397
+
388
398
  var _this$props = this.props,
389
399
  emojiProvider = _this$props.emojiProvider,
390
400
  hideToneSelector = _this$props.hideToneSelector;
@@ -419,6 +429,12 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
419
429
  this.fireAnalytics((0, _analytics.closedPickerEvent)({
420
430
  duration: this.calculateElapsedTime()
421
431
  }));
432
+
433
+ _analytics.ufoExperiences['emoji-picker-opened'].abort();
434
+
435
+ _analytics.ufoExperiences['emoji-searched'].abort();
436
+
437
+ _analytics.ufoExperiences['emoji-selection-recorded'].abort();
422
438
  }
423
439
  }, {
424
440
  key: "UNSAFE_componentWillReceiveProps",
@@ -545,7 +561,14 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
545
561
  return _this4.fireAnalytics(analytic('picker'));
546
562
  });
547
563
  var formattedErrorMessage = uploadErrorMessage ? (0, _core.jsx)(_reactIntlNext.FormattedMessage, uploadErrorMessage) : null;
548
- var picker = (0, _core.jsx)("div", {
564
+ var emojiContextValue = {
565
+ emoji: {
566
+ emojiProvider: this.props.emojiProvider
567
+ }
568
+ };
569
+ var picker = (0, _core.jsx)(_LegacyEmojiContextProvider.default, {
570
+ emojiContextValue: emojiContextValue
571
+ }, (0, _core.jsx)("div", {
549
572
  css: _styles.emojiPicker,
550
573
  ref: this.handlePickerRef,
551
574
  "data-emoji-picker-container": true
@@ -583,7 +606,7 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
583
606
  }), (0, _core.jsx)(_EmojiPickerFooter.default, {
584
607
  selectedEmoji: selectedEmoji,
585
608
  isUploading: uploading
586
- }));
609
+ })));
587
610
  return picker;
588
611
  }
589
612
  }]);
@@ -591,9 +614,6 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
591
614
  }(_react.PureComponent);
592
615
 
593
616
  exports.default = EmojiPickerComponent;
594
- (0, _defineProperty2.default)(EmojiPickerComponent, "childContextTypes", {
595
- emoji: _propTypes.default.object
596
- });
597
617
  (0, _defineProperty2.default)(EmojiPickerComponent, "defaultProps", {
598
618
  onSelection: function onSelection() {}
599
619
  });
@@ -27,8 +27,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
27
27
 
28
28
  var _core = require("@emotion/core");
29
29
 
30
- var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
30
  var _react = _interopRequireWildcard(require("react"));
33
31
 
34
32
  var _List = require("react-virtualized/dist/commonjs/List");
@@ -51,10 +49,6 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
51
49
 
52
50
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
53
51
 
54
- 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; }
55
-
56
- 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) { (0, _defineProperty2.default)(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; }
57
-
58
52
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
59
53
 
60
54
  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; } }
@@ -250,14 +244,6 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
250
244
  }
251
245
 
252
246
  (0, _createClass2.default)(EmojiPickerVirtualList, [{
253
- key: "getChildContext",
254
- value: function getChildContext() {
255
- var emoji = this.context.emoji;
256
- return {
257
- emoji: _objectSpread({}, emoji)
258
- };
259
- }
260
- }, {
261
247
  key: "UNSAFE_componentWillUpdate",
262
248
  value: function UNSAFE_componentWillUpdate(nextProps, nextState) {
263
249
  if (this.props.emojis !== nextProps.emojis || this.props.selectedTone !== nextProps.selectedTone || this.props.loading !== nextProps.loading || this.props.query !== nextProps.query) {
@@ -345,12 +331,6 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
345
331
  }(_react.PureComponent);
346
332
 
347
333
  exports.default = EmojiPickerVirtualList;
348
- (0, _defineProperty2.default)(EmojiPickerVirtualList, "contextTypes", {
349
- emoji: _propTypes.default.object
350
- });
351
- (0, _defineProperty2.default)(EmojiPickerVirtualList, "childContextTypes", {
352
- emoji: _propTypes.default.object
353
- });
354
334
  (0, _defineProperty2.default)(EmojiPickerVirtualList, "defaultProps", {
355
335
  onEmojiSelected: function onEmojiSelected() {},
356
336
  onEmojiActive: function onEmojiActive() {},
@@ -25,8 +25,6 @@ var _core = require("@emotion/core");
25
25
 
26
26
  var _uuid = _interopRequireDefault(require("uuid"));
27
27
 
28
- var _propTypes = _interopRequireDefault(require("prop-types"));
29
-
30
28
  var _react = require("react");
31
29
 
32
30
  var _constants = require("../../util/constants");
@@ -45,6 +43,8 @@ var _EmojiTypeAheadList = _interopRequireDefault(require("./EmojiTypeAheadList")
45
43
 
46
44
  var _styles = require("./styles");
47
45
 
46
+ var _LegacyEmojiContextProvider = _interopRequireDefault(require("../../context/LegacyEmojiContextProvider"));
47
+
48
48
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
49
49
 
50
50
  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; } }
@@ -139,6 +139,12 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
139
139
 
140
140
  _this.fireAnalyticsEvent((0, _analytics.typeaheadRenderedEvent)(Date.now() - _this.renderStartTime, query, emojis));
141
141
 
142
+ _analytics.ufoExperiences['emoji-searched'].success({
143
+ metadata: {
144
+ emojisLength: emojis.length
145
+ }
146
+ });
147
+
142
148
  (0, _logger.default)('emoji-typeahead.applyPropChanges', emojis.length, wasVisible, visible);
143
149
 
144
150
  _this.setState({
@@ -199,15 +205,6 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
199
205
  }
200
206
 
201
207
  (0, _createClass2.default)(EmojiTypeAheadComponent, [{
202
- key: "getChildContext",
203
- value: function getChildContext() {
204
- return {
205
- emoji: {
206
- emojiProvider: this.props.emojiProvider
207
- }
208
- };
209
- }
210
- }, {
211
208
  key: "componentDidMount",
212
209
  value: function componentDidMount() {
213
210
  var emojiProvider = this.props.emojiProvider;
@@ -227,6 +224,10 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
227
224
  this.fireAnalyticsEvent((0, _analytics.typeaheadCancelledEvent)(Date.now() - this.openTime, query, emojis));
228
225
  }
229
226
 
227
+ _analytics.ufoExperiences['emoji-searched'].abort();
228
+
229
+ _analytics.ufoExperiences['emoji-selection-recorded'].abort();
230
+
230
231
  this.sessionId = (0, _uuid.default)();
231
232
  this.selected = false;
232
233
  }
@@ -272,6 +273,13 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
272
273
  options.sort = _types.SearchSort.UsageFrequency;
273
274
  }
274
275
 
276
+ _analytics.ufoExperiences['emoji-searched'].start();
277
+
278
+ _analytics.ufoExperiences['emoji-searched'].addMetadata({
279
+ queryLength: (query === null || query === void 0 ? void 0 : query.length) || 0,
280
+ source: 'typeahead'
281
+ });
282
+
275
283
  this.renderStartTime = Date.now();
276
284
  emojiProvider.filter(query, options);
277
285
  }
@@ -307,7 +315,14 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
307
315
  var style = {
308
316
  display: visible ? 'block' : 'none'
309
317
  };
310
- return (0, _core.jsx)("div", {
318
+ var emojiContextValue = {
319
+ emoji: {
320
+ emojiProvider: this.props.emojiProvider
321
+ }
322
+ };
323
+ return (0, _core.jsx)(_LegacyEmojiContextProvider.default, {
324
+ emojiContextValue: emojiContextValue
325
+ }, (0, _core.jsx)("div", {
311
326
  style: style,
312
327
  className: 'ak-emoji-typeahead',
313
328
  css: _styles.emojiTypeAhead
@@ -316,16 +331,13 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
316
331
  onEmojiSelected: recordUsageOnSelection,
317
332
  ref: this.onEmojiListRef,
318
333
  loading: loading
319
- }));
334
+ })));
320
335
  }
321
336
  }]);
322
337
  return EmojiTypeAheadComponent;
323
338
  }(_react.PureComponent);
324
339
 
325
340
  exports.default = EmojiTypeAheadComponent;
326
- (0, _defineProperty2.default)(EmojiTypeAheadComponent, "childContextTypes", {
327
- emoji: _propTypes.default.object
328
- });
329
341
  (0, _defineProperty2.default)(EmojiTypeAheadComponent, "defaultProps", {
330
342
  onSelection: function onSelection() {},
331
343
  onOpen: function onOpen() {},
@@ -35,6 +35,8 @@ var _EmojiPreviewComponent = require("../common/EmojiPreviewComponent");
35
35
 
36
36
  var _styles = require("./styles");
37
37
 
38
+ var _LegacyEmojiContextProvider = _interopRequireDefault(require("../../context/LegacyEmojiContextProvider"));
39
+
38
40
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
41
 
40
42
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -87,7 +89,7 @@ var EmojiTypeAheadItem = /*#__PURE__*/function (_PureComponent) {
87
89
  selected = _this$props3.selected,
88
90
  emoji = _this$props3.emoji;
89
91
  var classes = [_styles.typeAheadItem, selected && _styles.selected];
90
- return (0, _core.jsx)("div", {
92
+ return (0, _core.jsx)(_LegacyEmojiContextProvider.default, null, (0, _core.jsx)("div", {
91
93
  className: "ak-emoji-typeahead-item ".concat(selected ? _styles.typeaheadSelected : ''),
92
94
  css: classes,
93
95
  onMouseDown: this.onEmojiSelected,
@@ -97,7 +99,7 @@ var EmojiTypeAheadItem = /*#__PURE__*/function (_PureComponent) {
97
99
  css: _styles.typeAheadItemRow
98
100
  }, emoji && (0, _core.jsx)(_EmojiPreviewComponent.EmojiPreviewComponent, {
99
101
  emoji: emoji
100
- })));
102
+ }))));
101
103
  }
102
104
  }]);
103
105
  return EmojiTypeAheadItem;
@@ -37,6 +37,8 @@ var _analytics = require("../../util/analytics");
37
37
 
38
38
  var _styles = require("./styles");
39
39
 
40
+ var _ufoExperiences = require("../../util/analytics/ufoExperiences");
41
+
40
42
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
41
43
 
42
44
  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; } }
@@ -54,6 +56,12 @@ var EmojiUploadComponent = /*#__PURE__*/function (_PureComponent) {
54
56
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onUploadEmoji", function (upload, retry) {
55
57
  var emojiProvider = _this.props.emojiProvider;
56
58
 
59
+ _ufoExperiences.ufoExperiences['emoji-uploaded'].start();
60
+
61
+ _ufoExperiences.ufoExperiences['emoji-uploaded'].addMetadata({
62
+ retry: retry
63
+ });
64
+
57
65
  _this.fireAnalytics((0, _analytics.uploadConfirmButton)({
58
66
  retry: retry
59
67
  }));
@@ -109,6 +117,11 @@ var EmojiUploadComponent = /*#__PURE__*/function (_PureComponent) {
109
117
  }
110
118
 
111
119
  (0, _createClass2.default)(EmojiUploadComponent, [{
120
+ key: "componentWillUnmount",
121
+ value: function componentWillUnmount() {
122
+ _ufoExperiences.ufoExperiences['emoji-uploaded'].abort();
123
+ }
124
+ }, {
112
125
  key: "render",
113
126
  value: function render() {
114
127
  var uploadErrorMessage = this.state.uploadErrorMessage;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EmojiContext = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var EmojiContext = /*#__PURE__*/(0, _react.createContext)(null);
11
+ exports.EmojiContext = EmojiContext;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.EmojiContextProvider = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _EmojiContext = require("./EmojiContext");
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ var EmojiContextProvider = function EmojiContextProvider(_ref) {
19
+ var children = _ref.children,
20
+ emojiContextValue = _ref.emojiContextValue;
21
+ var memoizedEmojiContextValue = (0, _react.useMemo)(function () {
22
+ return emojiContextValue;
23
+ }, [emojiContextValue]);
24
+ return /*#__PURE__*/_react.default.createElement(_EmojiContext.EmojiContext.Provider, {
25
+ value: memoizedEmojiContextValue
26
+ }, children);
27
+ };
28
+
29
+ exports.EmojiContextProvider = EmojiContextProvider;