@atlaskit/emoji 64.2.0 → 64.4.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 (184) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/cjs/api/EmojiResource.js +36 -1
  3. package/dist/cjs/api/media/SiteEmojiResource.js +10 -2
  4. package/dist/cjs/components/common/CachingEmoji.js +38 -12
  5. package/dist/cjs/components/common/DeleteButton.js +9 -13
  6. package/dist/cjs/components/common/Emoji.js +25 -36
  7. package/dist/cjs/components/common/EmojiActions.js +26 -31
  8. package/dist/cjs/components/common/EmojiButton.js +7 -7
  9. package/dist/cjs/components/common/EmojiDeletePreview.js +20 -26
  10. package/dist/cjs/components/common/EmojiErrorMessage.js +10 -14
  11. package/dist/cjs/components/common/EmojiPlaceholder.js +5 -12
  12. package/dist/cjs/components/common/EmojiPreview.js +20 -40
  13. package/dist/cjs/components/common/EmojiPreviewComponent.js +34 -0
  14. package/dist/cjs/components/common/EmojiUploadPicker.js +26 -24
  15. package/dist/cjs/components/common/EmojiUploadPreview.js +22 -28
  16. package/dist/cjs/components/common/RecordSelectionDefault.js +8 -2
  17. package/dist/cjs/components/common/ResourcedEmoji.js +25 -9
  18. package/dist/cjs/components/common/ResourcedEmojiComponent.js +33 -11
  19. package/dist/cjs/components/common/RetryableButton.js +12 -18
  20. package/dist/cjs/components/common/Scrollable.js +5 -10
  21. package/dist/cjs/components/common/UfoErrorBoundary.js +52 -0
  22. package/dist/cjs/components/common/UploadEmoji.js +8 -0
  23. package/dist/cjs/components/common/styles.js +210 -266
  24. package/dist/cjs/components/picker/CategorySelector.js +13 -12
  25. package/dist/cjs/components/picker/EmojiPicker.js +17 -6
  26. package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +8 -14
  27. package/dist/cjs/components/picker/EmojiPickerComponent.js +51 -30
  28. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +8 -12
  29. package/dist/cjs/components/picker/EmojiPickerFooter.js +8 -14
  30. package/dist/cjs/components/picker/EmojiPickerList.js +28 -9
  31. package/dist/cjs/components/picker/EmojiPickerListSearch.js +10 -8
  32. package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +9 -15
  33. package/dist/cjs/components/picker/styles.js +113 -161
  34. package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +40 -24
  35. package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +10 -13
  36. package/dist/cjs/components/typeahead/EmojiTypeAheadList.js +17 -22
  37. package/dist/cjs/components/typeahead/styles.js +17 -19
  38. package/dist/cjs/components/uploader/EmojiUploadComponent.js +22 -15
  39. package/dist/cjs/components/uploader/styles.js +4 -4
  40. package/dist/cjs/index.js +9 -3
  41. package/dist/cjs/types.js +12 -2
  42. package/dist/cjs/util/{analytics.js → analytics/analytics.js} +12 -10
  43. package/dist/cjs/util/analytics/index.js +205 -0
  44. package/dist/cjs/util/analytics/samplingUfo.js +278 -0
  45. package/dist/cjs/util/analytics/ufoExperiences.js +46 -0
  46. package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +49 -0
  47. package/dist/cjs/util/constants.js +10 -3
  48. package/dist/cjs/version.json +1 -1
  49. package/dist/es2019/api/EmojiResource.js +28 -1
  50. package/dist/es2019/api/media/SiteEmojiResource.js +10 -2
  51. package/dist/es2019/components/common/CachingEmoji.js +34 -12
  52. package/dist/es2019/components/common/DeleteButton.js +8 -6
  53. package/dist/es2019/components/common/Emoji.js +27 -36
  54. package/dist/es2019/components/common/EmojiActions.js +26 -24
  55. package/dist/es2019/components/common/EmojiButton.js +6 -6
  56. package/dist/es2019/components/common/EmojiDeletePreview.js +20 -20
  57. package/dist/es2019/components/common/EmojiErrorMessage.js +9 -8
  58. package/dist/es2019/components/common/EmojiPlaceholder.js +5 -8
  59. package/dist/es2019/components/common/EmojiPreview.js +19 -35
  60. package/dist/es2019/components/common/EmojiPreviewComponent.js +21 -0
  61. package/dist/es2019/components/common/EmojiUploadPicker.js +25 -22
  62. package/dist/es2019/components/common/EmojiUploadPreview.js +22 -22
  63. package/dist/es2019/components/common/RecordSelectionDefault.js +9 -2
  64. package/dist/es2019/components/common/ResourcedEmoji.js +22 -5
  65. package/dist/es2019/components/common/ResourcedEmojiComponent.js +32 -11
  66. package/dist/es2019/components/common/RetryableButton.js +10 -11
  67. package/dist/es2019/components/common/Scrollable.js +6 -10
  68. package/dist/es2019/components/common/UfoErrorBoundary.js +11 -0
  69. package/dist/es2019/components/common/UploadEmoji.js +4 -0
  70. package/dist/es2019/components/common/styles.js +195 -262
  71. package/dist/es2019/components/picker/CategorySelector.js +15 -12
  72. package/dist/es2019/components/picker/EmojiPicker.js +15 -6
  73. package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +8 -8
  74. package/dist/es2019/components/picker/EmojiPickerComponent.js +46 -22
  75. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +8 -7
  76. package/dist/es2019/components/picker/EmojiPickerFooter.js +8 -8
  77. package/dist/es2019/components/picker/EmojiPickerList.js +28 -8
  78. package/dist/es2019/components/picker/EmojiPickerListSearch.js +11 -8
  79. package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +10 -8
  80. package/dist/es2019/components/picker/styles.js +112 -160
  81. package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +35 -17
  82. package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +12 -13
  83. package/dist/es2019/components/typeahead/EmojiTypeAheadList.js +18 -19
  84. package/dist/es2019/components/typeahead/styles.js +14 -15
  85. package/dist/es2019/components/uploader/EmojiUploadComponent.js +19 -9
  86. package/dist/es2019/components/uploader/styles.js +4 -4
  87. package/dist/es2019/index.js +4 -3
  88. package/dist/es2019/types.js +10 -1
  89. package/dist/es2019/util/{analytics.js → analytics/analytics.js} +17 -11
  90. package/dist/es2019/util/analytics/index.js +4 -0
  91. package/dist/es2019/util/analytics/samplingUfo.js +147 -0
  92. package/dist/es2019/util/analytics/ufoExperiences.js +34 -0
  93. package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +39 -0
  94. package/dist/es2019/util/constants.js +5 -1
  95. package/dist/es2019/version.json +1 -1
  96. package/dist/esm/api/EmojiResource.js +32 -1
  97. package/dist/esm/api/media/SiteEmojiResource.js +10 -2
  98. package/dist/esm/components/common/CachingEmoji.js +36 -12
  99. package/dist/esm/components/common/DeleteButton.js +8 -6
  100. package/dist/esm/components/common/Emoji.js +26 -29
  101. package/dist/esm/components/common/EmojiActions.js +26 -25
  102. package/dist/esm/components/common/EmojiButton.js +6 -6
  103. package/dist/esm/components/common/EmojiDeletePreview.js +19 -20
  104. package/dist/esm/components/common/EmojiErrorMessage.js +9 -8
  105. package/dist/esm/components/common/EmojiPlaceholder.js +5 -8
  106. package/dist/esm/components/common/EmojiPreview.js +19 -33
  107. package/dist/esm/components/common/EmojiPreviewComponent.js +20 -0
  108. package/dist/esm/components/common/EmojiUploadPicker.js +27 -25
  109. package/dist/esm/components/common/EmojiUploadPreview.js +21 -22
  110. package/dist/esm/components/common/RecordSelectionDefault.js +6 -3
  111. package/dist/esm/components/common/ResourcedEmoji.js +22 -9
  112. package/dist/esm/components/common/ResourcedEmojiComponent.js +32 -10
  113. package/dist/esm/components/common/RetryableButton.js +11 -12
  114. package/dist/esm/components/common/Scrollable.js +6 -10
  115. package/dist/esm/components/common/UfoErrorBoundary.js +38 -0
  116. package/dist/esm/components/common/UploadEmoji.js +4 -0
  117. package/dist/esm/components/common/styles.js +192 -242
  118. package/dist/esm/components/picker/CategorySelector.js +14 -12
  119. package/dist/esm/components/picker/EmojiPicker.js +13 -6
  120. package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +8 -8
  121. package/dist/esm/components/picker/EmojiPickerComponent.js +47 -22
  122. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +8 -7
  123. package/dist/esm/components/picker/EmojiPickerFooter.js +8 -8
  124. package/dist/esm/components/picker/EmojiPickerList.js +29 -8
  125. package/dist/esm/components/picker/EmojiPickerListSearch.js +10 -8
  126. package/dist/esm/components/picker/EmojiPickerVirtualItems.js +9 -8
  127. package/dist/esm/components/picker/styles.js +108 -149
  128. package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +35 -17
  129. package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +11 -13
  130. package/dist/esm/components/typeahead/EmojiTypeAheadList.js +17 -19
  131. package/dist/esm/components/typeahead/styles.js +14 -14
  132. package/dist/esm/components/uploader/EmojiUploadComponent.js +19 -9
  133. package/dist/esm/components/uploader/styles.js +4 -4
  134. package/dist/esm/index.js +4 -3
  135. package/dist/esm/types.js +10 -1
  136. package/dist/esm/util/{analytics.js → analytics/analytics.js} +9 -7
  137. package/dist/esm/util/analytics/index.js +4 -0
  138. package/dist/esm/util/analytics/samplingUfo.js +259 -0
  139. package/dist/esm/util/analytics/ufoExperiences.js +34 -0
  140. package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +39 -0
  141. package/dist/esm/util/constants.js +5 -1
  142. package/dist/esm/version.json +1 -1
  143. package/dist/types/api/EmojiResource.d.ts +1 -0
  144. package/dist/types/components/common/CachingEmoji.d.ts +8 -6
  145. package/dist/types/components/common/EmojiActions.d.ts +2 -3
  146. package/dist/types/components/common/EmojiDeletePreview.d.ts +3 -3
  147. package/dist/types/components/common/EmojiErrorMessage.d.ts +2 -1
  148. package/dist/types/components/common/EmojiPreview.d.ts +2 -3
  149. package/dist/types/components/common/EmojiPreviewComponent.d.ts +7 -0
  150. package/dist/types/components/common/EmojiUploadPreview.d.ts +3 -3
  151. package/dist/types/components/common/ResourcedEmoji.d.ts +2 -0
  152. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +6 -0
  153. package/dist/types/components/common/RetryableButton.d.ts +0 -2
  154. package/dist/types/components/common/UfoErrorBoundary.d.ts +8 -0
  155. package/dist/types/components/common/styles.d.ts +44 -44
  156. package/dist/types/components/picker/EmojiPicker.d.ts +2 -3
  157. package/dist/types/components/picker/EmojiPickerComponent.d.ts +6 -0
  158. package/dist/types/components/picker/EmojiPickerList.d.ts +10 -0
  159. package/dist/types/components/picker/styles.d.ts +17 -18
  160. package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +6 -0
  161. package/dist/types/components/typeahead/styles.d.ts +8 -7
  162. package/dist/types/components/uploader/EmojiUploadComponent.d.ts +1 -0
  163. package/dist/types/components/uploader/styles.d.ts +2 -2
  164. package/dist/types/index.d.ts +3 -3
  165. package/dist/types/types.d.ts +6 -0
  166. package/dist/types/util/{analytics.d.ts → analytics/analytics.d.ts} +7 -7
  167. package/dist/types/util/analytics/index.d.ts +6 -0
  168. package/dist/types/util/analytics/samplingUfo.d.ts +31 -0
  169. package/dist/types/util/analytics/ufoExperiences.d.ts +12 -0
  170. package/dist/types/util/analytics/useSampledUFOComponentExperience.d.ts +8 -0
  171. package/dist/types/util/constants.d.ts +2 -0
  172. package/package.json +10 -9
  173. package/dist/cjs/components/picker/EmojiPickerPreview.js +0 -87
  174. package/dist/cjs/context/EmojiContext.js +0 -11
  175. package/dist/cjs/context/EmojiContextProvider.js +0 -22
  176. package/dist/es2019/components/picker/EmojiPickerPreview.js +0 -43
  177. package/dist/es2019/context/EmojiContext.js +0 -2
  178. package/dist/es2019/context/EmojiContextProvider.js +0 -10
  179. package/dist/esm/components/picker/EmojiPickerPreview.js +0 -67
  180. package/dist/esm/context/EmojiContext.js +0 -2
  181. package/dist/esm/context/EmojiContextProvider.js +0 -9
  182. package/dist/types/components/picker/EmojiPickerPreview.d.ts +0 -9
  183. package/dist/types/context/EmojiContext.d.ts +0 -4
  184. package/dist/types/context/EmojiContextProvider.d.ts +0 -7
@@ -1,6 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+
3
+ /** @jsx jsx */
4
+ import { jsx } from '@emotion/core';
2
5
  import AkButton from '@atlaskit/button/custom-theme-button';
3
- import React from 'react';
4
6
  import { PureComponent } from 'react';
5
7
  import { FormattedMessage, injectIntl } from 'react-intl-next';
6
8
  import { customCategory } from '../../util/constants';
@@ -9,7 +11,7 @@ import Emoji from './Emoji';
9
11
  import EmojiErrorMessage from './EmojiErrorMessage';
10
12
  import { UploadStatus } from './internal-types';
11
13
  import RetryableButton from './RetryableButton';
12
- import * as styles from './styles';
14
+ import { bigEmojiPreview, cancelButton, emojiPreviewErrorMessage, uploadAddRow, uploadPreview, uploadPreviewFooter, uploadPreviewText } from './styles';
13
15
 
14
16
  class EmojiUploadPreview extends PureComponent {
15
17
  render() {
@@ -39,44 +41,42 @@ class EmojiUploadPreview extends PureComponent {
39
41
  },
40
42
  searchable: true
41
43
  };
42
- emojiComponent = /*#__PURE__*/React.createElement(Emoji, {
44
+ emojiComponent = jsx(Emoji, {
43
45
  emoji: emoji
44
46
  });
45
47
  }
46
48
 
47
49
  const uploading = uploadStatus === UploadStatus.Uploading;
48
- return /*#__PURE__*/React.createElement("div", {
49
- className: styles.uploadPreviewFooter
50
- }, /*#__PURE__*/React.createElement("div", {
51
- className: styles.uploadPreview
52
- }, /*#__PURE__*/React.createElement("div", {
53
- className: styles.uploadPreviewText
54
- }, /*#__PURE__*/React.createElement("h5", null, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiPreviewTitle)), /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, messages.emojiPreview, {
50
+ return jsx("div", {
51
+ css: uploadPreviewFooter
52
+ }, jsx("div", {
53
+ css: uploadPreview
54
+ }, jsx("div", {
55
+ css: uploadPreviewText
56
+ }, jsx("h5", null, jsx(FormattedMessage, messages.emojiPreviewTitle)), jsx(FormattedMessage, _extends({}, messages.emojiPreview, {
55
57
  values: {
56
58
  emoji: emojiComponent
57
59
  }
58
- }))), /*#__PURE__*/React.createElement("div", {
59
- className: styles.bigEmojiPreview
60
- }, emojiComponent)), /*#__PURE__*/React.createElement("div", {
61
- className: styles.uploadAddRow
62
- }, !uploading && errorMessage ? /*#__PURE__*/React.createElement(EmojiErrorMessage, {
63
- className: styles.emojiPreviewErrorMessage,
60
+ }))), jsx("div", {
61
+ css: bigEmojiPreview
62
+ }, emojiComponent)), jsx("div", {
63
+ css: uploadAddRow
64
+ }, !uploading && errorMessage ? jsx(EmojiErrorMessage, {
65
+ messageStyles: emojiPreviewErrorMessage,
64
66
  message: errorMessage,
65
67
  tooltip: true
66
- }) : null, /*#__PURE__*/React.createElement(RetryableButton, {
67
- className: styles.uploadEmojiButton,
68
- retryClassName: styles.uploadRetryButton,
68
+ }) : null, jsx(RetryableButton, {
69
69
  label: formatMessage(messages.addEmojiLabel),
70
70
  onSubmit: onAddEmoji,
71
71
  appearance: "primary",
72
72
  loading: uploading,
73
73
  error: !!errorMessage
74
- }), /*#__PURE__*/React.createElement(AkButton, {
74
+ }), jsx(AkButton, {
75
75
  onClick: onUploadCancelled,
76
76
  appearance: "subtle",
77
77
  isDisabled: uploading,
78
- className: styles.cancelButton
79
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.cancelLabel))));
78
+ css: cancelButton
79
+ }, jsx(FormattedMessage, messages.cancelLabel))));
80
80
  }
81
81
 
82
82
  }
@@ -1,4 +1,4 @@
1
- import { insertionFailed, insertionSucceeded } from '../../util/analytics';
1
+ import { recordFailed, recordSucceeded, ufoExperiences } from '../../util/analytics';
2
2
 
3
3
  /**
4
4
  * A function that will wrap any configured Emoji 'onSelection' function to ensure recordSelection is always
@@ -12,7 +12,14 @@ export const createRecordSelectionDefault = (provider, onSelect, fireAnalytics)
12
12
  return (emojiId, emoji, event) => {
13
13
  try {
14
14
  if (provider.recordSelection && emoji) {
15
- provider.recordSelection(emoji).then(() => fireAnalytics && fireAnalytics(insertionSucceeded)).catch(() => fireAnalytics && fireAnalytics(insertionFailed));
15
+ ufoExperiences['emoji-selection-recorded'].start();
16
+ provider.recordSelection(emoji).then(() => {
17
+ fireAnalytics && fireAnalytics(recordSucceeded);
18
+ ufoExperiences['emoji-selection-recorded'].success();
19
+ }).catch(() => {
20
+ fireAnalytics && fireAnalytics(recordFailed);
21
+ ufoExperiences['emoji-selection-recorded'].failure();
22
+ });
16
23
  }
17
24
  } finally {
18
25
  if (onSelect) {
@@ -1,9 +1,11 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import React from 'react';
4
- import { defaultEmojiHeight } from '../../util/constants';
4
+ import { defaultEmojiHeight, SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI } from '../../util/constants';
5
5
  import EmojiPlaceholder from './EmojiPlaceholder';
6
6
  import LoadingEmojiComponent from './LoadingEmojiComponent';
7
+ import { sampledUfoRenderedEmoji, ufoExperiences } from '../../util/analytics';
8
+ import { UfoErrorBoundary } from './UfoErrorBoundary';
7
9
 
8
10
  const resourcedEmojiModuleLoader = () => import(
9
11
  /* webpackChunkName:"@atlaskit-internal_resourcedEmojiComponent" */
@@ -12,12 +14,25 @@ const resourcedEmojiModuleLoader = () => import(
12
14
  const resourcedEmojiComponentLoader = () => resourcedEmojiModuleLoader().then(module => module.default);
13
15
 
14
16
  export default class ResourcedEmoji extends LoadingEmojiComponent {
15
- constructor(...args) {
16
- super(...args);
17
+ // state initialised with static component to prevent
18
+ // rerender when the module has already been loaded
19
+ constructor(props) {
20
+ super(props, {});
17
21
 
18
22
  _defineProperty(this, "state", {
19
23
  asyncLoadedComponent: ResourcedEmoji.AsyncLoadedComponent
20
24
  });
25
+
26
+ sampledUfoRenderedEmoji(props.emojiId).start({
27
+ samplingRate: SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI
28
+ });
29
+ ufoExperiences['emoji-rendered'].getInstance(props.emojiId.id || props.emojiId.shortName).addMetadata({
30
+ source: 'resourced-emoji'
31
+ });
32
+ }
33
+
34
+ componentWillUnmount() {
35
+ sampledUfoRenderedEmoji(this.props.emojiId).abort();
21
36
  }
22
37
 
23
38
  asyncLoadComponent() {
@@ -45,9 +60,11 @@ export default class ResourcedEmoji extends LoadingEmojiComponent {
45
60
  emojiProvider,
46
61
  ...otherProps
47
62
  } = this.props;
48
- return /*#__PURE__*/React.createElement(ResourcedEmojiComponent, _extends({}, otherProps, {
63
+ return /*#__PURE__*/React.createElement(UfoErrorBoundary, {
64
+ experiences: [ufoExperiences['emoji-rendered'].getInstance(this.props.emojiId.id || this.props.emojiId.shortName)]
65
+ }, /*#__PURE__*/React.createElement(ResourcedEmojiComponent, _extends({}, otherProps, {
49
66
  emojiProvider: loadedEmojiProvider
50
- }));
67
+ })));
51
68
  }
52
69
 
53
70
  }
@@ -1,11 +1,12 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import PropTypes from 'prop-types';
2
3
  import React from 'react';
3
4
  import { Component } from 'react';
4
5
  import { defaultEmojiHeight } from '../../util/constants';
5
6
  import { isPromise } from '../../util/type-helpers';
6
7
  import CachingEmoji from './CachingEmoji';
7
8
  import EmojiPlaceholder from './EmojiPlaceholder';
8
- import { EmojiContextProvider } from '../../context/EmojiContextProvider';
9
+ import { sampledUfoRenderedEmoji } from '../../util/analytics';
9
10
  export default class ResourcedEmojiComponent extends Component {
10
11
  constructor(props) {
11
12
  super(props);
@@ -18,6 +19,14 @@ export default class ResourcedEmojiComponent extends Component {
18
19
  };
19
20
  }
20
21
 
22
+ getChildContext() {
23
+ return {
24
+ emoji: {
25
+ emojiProvider: this.props.emojiProvider
26
+ }
27
+ };
28
+ }
29
+
21
30
  refreshEmoji(emojiProvider, emojiId) {
22
31
  const foundEmoji = emojiProvider.findByEmojiId(emojiId);
23
32
 
@@ -32,7 +41,22 @@ export default class ResourcedEmojiComponent extends Component {
32
41
  emoji,
33
42
  loaded: true
34
43
  });
44
+
45
+ if (!emoji) {
46
+ // emoji is undefined
47
+ sampledUfoRenderedEmoji(emojiId).failure({
48
+ metadata: {
49
+ reason: 'failed to find'
50
+ }
51
+ });
52
+ }
35
53
  }
54
+ }).catch(() => {
55
+ sampledUfoRenderedEmoji(emojiId).failure({
56
+ metadata: {
57
+ reason: 'failed to load'
58
+ }
59
+ });
36
60
  });
37
61
  } else {
38
62
  // loaded
@@ -102,18 +126,15 @@ export default class ResourcedEmojiComponent extends Component {
102
126
  id,
103
127
  fallback
104
128
  } = this.props.emojiId;
105
- const emojiContextValue = {
106
- emoji: {
107
- emojiProvider: this.props.emojiProvider
108
- }
109
- };
110
- return /*#__PURE__*/React.createElement(EmojiContextProvider, {
111
- emojiContextValue: emojiContextValue
112
- }, /*#__PURE__*/React.createElement("span", {
129
+ return /*#__PURE__*/React.createElement("span", {
113
130
  "data-emoji-id": id,
114
131
  "data-emoji-short-name": shortName,
115
132
  "data-emoji-text": fallback || shortName
116
- }, element));
133
+ }, element);
117
134
  }
118
135
 
119
- }
136
+ }
137
+
138
+ _defineProperty(ResourcedEmojiComponent, "childContextTypes", {
139
+ emoji: PropTypes.object
140
+ });
@@ -1,29 +1,29 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/core';
1
3
  import AkButton from '@atlaskit/button/custom-theme-button';
2
4
  import Spinner from '@atlaskit/spinner';
3
- import React from 'react';
4
5
  import { Component } from 'react';
5
6
  import { FormattedMessage } from 'react-intl-next';
6
7
  import { messages } from '../i18n';
7
- import * as styles from './styles';
8
+ import { buttonSpinner, uploadEmojiButton, uploadRetryButton } from './styles';
8
9
  export default class RetryableButton extends Component {
9
10
  constructor(props) {
10
11
  super(props);
11
12
  }
12
13
 
13
14
  renderLoading() {
14
- return /*#__PURE__*/React.createElement("span", {
15
- className: styles.buttonSpinner
16
- }, /*#__PURE__*/React.createElement(Spinner, null));
15
+ return jsx("span", {
16
+ css: buttonSpinner
17
+ }, jsx(Spinner, null));
17
18
  }
18
19
 
19
20
  renderRetry() {
20
21
  const {
21
22
  loading,
22
- retryClassName,
23
23
  onSubmit
24
24
  } = this.props;
25
- return loading ? this.renderLoading() : /*#__PURE__*/React.createElement(FormattedMessage, messages.retryLabel, retryLabel => /*#__PURE__*/React.createElement(AkButton, {
26
- className: retryClassName,
25
+ return loading ? this.renderLoading() : jsx(FormattedMessage, messages.retryLabel, retryLabel => jsx(AkButton, {
26
+ css: uploadRetryButton,
27
27
  appearance: "warning",
28
28
  onClick: onSubmit
29
29
  }, retryLabel));
@@ -33,13 +33,12 @@ export default class RetryableButton extends Component {
33
33
  const {
34
34
  loading,
35
35
  error,
36
- className,
37
36
  appearance,
38
37
  onSubmit,
39
38
  label
40
39
  } = this.props;
41
- return error ? this.renderRetry() : loading ? this.renderLoading() : /*#__PURE__*/React.createElement(AkButton, {
42
- className: className,
40
+ return error ? this.renderRetry() : loading ? this.renderLoading() : jsx(AkButton, {
41
+ css: uploadEmojiButton,
43
42
  appearance: appearance,
44
43
  onClick: onSubmit
45
44
  }, label);
@@ -1,7 +1,8 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  // FIXME - FAB-1732 looking at making a shared component for this
3
- import classNames from 'classnames';
4
- import React from 'react';
3
+
4
+ /** @jsx jsx */
5
+ import { jsx } from '@emotion/core';
5
6
  import { PureComponent } from 'react';
6
7
  import { findDOMNode } from 'react-dom';
7
8
  import * as styles from './styles';
@@ -59,17 +60,12 @@ export default class Scrollable extends PureComponent {
59
60
  maxHeight,
60
61
  onMouseLeave
61
62
  } = this.props;
62
- const scrollableClasses = ['emoji-scrollable', styles.emojiScrollable];
63
-
64
- if (className) {
65
- scrollableClasses.push(className);
66
- }
67
-
68
63
  const style = maxHeight ? {
69
64
  maxHeight
70
65
  } : {};
71
- return /*#__PURE__*/React.createElement("div", {
72
- className: classNames(scrollableClasses),
66
+ return jsx("div", {
67
+ className: `emoji-scrollable ${className}`,
68
+ css: styles.emojiScrollable,
73
69
  onMouseLeave: onMouseLeave,
74
70
  onScroll: this.handleScroll,
75
71
  ref: this.handleRef,
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export class UfoErrorBoundary extends React.Component {
3
+ componentDidCatch() {
4
+ this.props.experiences.forEach(e => e.failure());
5
+ }
6
+
7
+ render() {
8
+ return this.props.children;
9
+ }
10
+
11
+ }
@@ -1,16 +1,19 @@
1
1
  import { supportsUploadFeature } from '../../api/EmojiResource';
2
2
  import { uploadFailedEvent, uploadSucceededEvent } from '../../util/analytics';
3
3
  import { messages } from '../i18n';
4
+ import { ufoExperiences } from '../../util/analytics/ufoExperiences';
4
5
  export const uploadEmoji = (upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) => {
5
6
  const startTime = Date.now();
6
7
  errorSetter(undefined);
7
8
 
8
9
  if (supportsUploadFeature(emojiProvider)) {
10
+ ufoExperiences['emoji-uploaded'].start();
9
11
  emojiProvider.uploadCustomEmoji(upload).then(emojiDescription => {
10
12
  fireAnalytics(uploadSucceededEvent({
11
13
  duration: Date.now() - startTime
12
14
  }));
13
15
  onSuccess(emojiDescription);
16
+ ufoExperiences['emoji-uploaded'].success();
14
17
  }).catch(err => {
15
18
  errorSetter(messages.emojiUploadFailed); // eslint-disable-next-line no-console
16
19
 
@@ -19,6 +22,7 @@ export const uploadEmoji = (upload, emojiProvider, errorSetter, onSuccess, fireA
19
22
  duration: Date.now() - startTime,
20
23
  reason: messages.emojiUploadFailed.defaultMessage
21
24
  }));
25
+ ufoExperiences['emoji-uploaded'].failure();
22
26
  });
23
27
  }
24
28
  };