@atlaskit/emoji 64.7.0 → 64.7.1
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.
- package/CHANGELOG.md +9 -0
- package/dist/cjs/api/EmojiResource.js +5 -1
- package/dist/cjs/components/common/CachingEmoji.js +21 -3
- package/dist/cjs/components/common/Emoji.js +57 -36
- package/dist/cjs/components/common/RecordSelectionDefault.js +13 -1
- package/dist/cjs/components/common/ResourcedEmoji.js +13 -3
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +21 -3
- package/dist/cjs/components/common/UfoErrorBoundary.js +30 -4
- package/dist/cjs/components/common/UploadEmoji.js +17 -1
- package/dist/cjs/components/picker/EmojiPickerComponent.js +12 -2
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +6 -1
- package/dist/cjs/types.js +2 -0
- package/dist/cjs/util/analytics/ufoExperiences.js +22 -4
- package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/cjs/util/browser-support.js +1 -1
- package/dist/cjs/util/constants.js +4 -5
- package/dist/cjs/util/useInView.js +23 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +5 -1
- package/dist/es2019/components/common/CachingEmoji.js +20 -3
- package/dist/es2019/components/common/Emoji.js +53 -34
- package/dist/es2019/components/common/RecordSelectionDefault.js +13 -1
- package/dist/es2019/components/common/ResourcedEmoji.js +14 -4
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +20 -3
- package/dist/es2019/components/common/UfoErrorBoundary.js +14 -2
- package/dist/es2019/components/common/UploadEmoji.js +10 -1
- package/dist/es2019/components/picker/EmojiPickerComponent.js +12 -2
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +6 -1
- package/dist/es2019/types.js +2 -0
- package/dist/es2019/util/analytics/ufoExperiences.js +12 -2
- package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/es2019/util/browser-support.js +1 -1
- package/dist/es2019/util/constants.js +2 -2
- package/dist/es2019/util/useInView.js +12 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +5 -1
- package/dist/esm/components/common/CachingEmoji.js +20 -3
- package/dist/esm/components/common/Emoji.js +59 -38
- package/dist/esm/components/common/RecordSelectionDefault.js +13 -1
- package/dist/esm/components/common/ResourcedEmoji.js +14 -4
- package/dist/esm/components/common/ResourcedEmojiComponent.js +20 -3
- package/dist/esm/components/common/UfoErrorBoundary.js +30 -4
- package/dist/esm/components/common/UploadEmoji.js +15 -1
- package/dist/esm/components/picker/EmojiPickerComponent.js +12 -2
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/esm/components/uploader/EmojiUploadComponent.js +6 -1
- package/dist/esm/types.js +2 -0
- package/dist/esm/util/analytics/ufoExperiences.js +14 -2
- package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/esm/util/browser-support.js +1 -1
- package/dist/esm/util/constants.js +2 -2
- package/dist/esm/util/useInView.js +12 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/common/UfoErrorBoundary.d.ts +2 -2
- package/dist/types/types.d.ts +2 -0
- package/dist/types/util/analytics/samplingUfo.d.ts +7 -0
- package/dist/types/util/analytics/ufoExperiences.d.ts +4 -1
- package/dist/types/util/constants.d.ts +1 -1
- package/dist/types/util/useInView.d.ts +4 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# @atlaskit/emoji
|
|
2
2
|
|
|
3
|
+
## 64.7.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`6e01776f0b7`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6e01776f0b7) - remove placeholder when lazy load emoji
|
|
8
|
+
- [`6e01776f0b7`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6e01776f0b7) - fix placeholder issue in lazy loaded emoji by removing it and re-write the anlytics tracking around it
|
|
9
|
+
- [`c3f9e9bce1c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c3f9e9bce1c) - Add custom information to failure and abort events for UFO experiences
|
|
10
|
+
- Updated dependencies
|
|
11
|
+
|
|
3
12
|
## 64.7.0
|
|
4
13
|
|
|
5
14
|
### Minor Changes
|
|
@@ -123,7 +123,11 @@ var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
|
|
|
123
123
|
|
|
124
124
|
_analytics.ufoExperiences['emoji-resource-fetched'].getInstance(providerType).failure({
|
|
125
125
|
metadata: {
|
|
126
|
-
reason: reason
|
|
126
|
+
reason: reason,
|
|
127
|
+
source: 'EmojiProvider',
|
|
128
|
+
data: {
|
|
129
|
+
providerUrl: provider.url
|
|
130
|
+
}
|
|
127
131
|
}
|
|
128
132
|
});
|
|
129
133
|
});
|
|
@@ -47,6 +47,8 @@ var _constants = require("../../util/constants");
|
|
|
47
47
|
|
|
48
48
|
var _EmojiContext = require("../../context/EmojiContext");
|
|
49
49
|
|
|
50
|
+
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
51
|
+
|
|
50
52
|
var _excluded = ["placeholderSize"],
|
|
51
53
|
_excluded2 = ["children"];
|
|
52
54
|
|
|
@@ -72,7 +74,10 @@ var CachingEmoji = function CachingEmoji(props) {
|
|
|
72
74
|
emoji: emojiProps.emoji.shortName
|
|
73
75
|
});
|
|
74
76
|
(0, _react.useEffect)(function () {
|
|
75
|
-
(0, _analytics.sampledUfoRenderedEmoji)(emojiProps.emoji)
|
|
77
|
+
if (!(0, _ufoExperiences.hasUfoMarked)((0, _analytics.sampledUfoRenderedEmoji)(emojiProps.emoji), 'fmp')) {
|
|
78
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emojiProps.emoji).markFMP();
|
|
79
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
+
|
|
76
81
|
}, []);
|
|
77
82
|
|
|
78
83
|
var emojiNode = function emojiNode() {
|
|
@@ -108,7 +113,12 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
108
113
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleLoadError", function (_emojiId) {
|
|
109
114
|
(0, _analytics.sampledUfoRenderedEmoji)(_emojiId).failure({
|
|
110
115
|
metadata: {
|
|
111
|
-
reason: 'load error'
|
|
116
|
+
reason: 'load error',
|
|
117
|
+
source: 'CachingMediaEmoji',
|
|
118
|
+
emoji: {
|
|
119
|
+
id: _emojiId.id,
|
|
120
|
+
shortName: _emojiId.shortName
|
|
121
|
+
}
|
|
112
122
|
}
|
|
113
123
|
});
|
|
114
124
|
|
|
@@ -170,7 +180,15 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
170
180
|
|
|
171
181
|
(0, _analytics.sampledUfoRenderedEmoji)(emoji).failure({
|
|
172
182
|
metadata: {
|
|
173
|
-
reason: 'failed to load media emoji'
|
|
183
|
+
reason: 'failed to load media emoji',
|
|
184
|
+
source: 'CachingMediaEmoji',
|
|
185
|
+
data: {
|
|
186
|
+
emoji: {
|
|
187
|
+
id: emoji.id,
|
|
188
|
+
shortName: emoji.shortName,
|
|
189
|
+
name: emoji.name
|
|
190
|
+
}
|
|
191
|
+
}
|
|
174
192
|
}
|
|
175
193
|
});
|
|
176
194
|
});
|
|
@@ -35,11 +35,11 @@ var _styles = require("./styles");
|
|
|
35
35
|
|
|
36
36
|
var _analytics = require("../../util/analytics");
|
|
37
37
|
|
|
38
|
-
var
|
|
38
|
+
var _browserSupport = require("../../util/browser-support");
|
|
39
39
|
|
|
40
|
-
var
|
|
40
|
+
var _useInView3 = require("../../util/useInView");
|
|
41
41
|
|
|
42
|
-
var
|
|
42
|
+
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
43
43
|
|
|
44
44
|
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); }
|
|
45
45
|
|
|
@@ -111,6 +111,7 @@ var handleImageError = function handleImageError(props, event) {
|
|
|
111
111
|
}
|
|
112
112
|
}; // Pure functional components are used in favour of class based components, due to the performance!
|
|
113
113
|
// When rendering 1500+ emoji using class based components had a significant impact.
|
|
114
|
+
// TODO: add UFO tracking for sprite emoji
|
|
114
115
|
|
|
115
116
|
|
|
116
117
|
var SpriteEmoji = function SpriteEmoji(props) {
|
|
@@ -180,6 +181,15 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
180
181
|
showTooltip = props.showTooltip,
|
|
181
182
|
showDelete = props.showDelete,
|
|
182
183
|
shouldBeInteractive = props.shouldBeInteractive;
|
|
184
|
+
|
|
185
|
+
var _useInView = (0, _useInView3.useInView)({
|
|
186
|
+
triggerOnce: true
|
|
187
|
+
}),
|
|
188
|
+
_useInView2 = (0, _slicedToArray2.default)(_useInView, 2),
|
|
189
|
+
ref = _useInView2[0],
|
|
190
|
+
inView = _useInView2[1];
|
|
191
|
+
|
|
192
|
+
var ufoExp = (0, _analytics.sampledUfoRenderedEmoji)(emoji);
|
|
183
193
|
var classes = "".concat(_styles.emojiMainStyle, " ").concat(_styles.emojiNodeStyles, " ").concat(selected ? _styles.commonSelectedStyles : '', " ").concat(selectOnHover ? _styles.selectOnHoverStyles : '', " ").concat(_styles.emojiImage, " ").concat(className ? className : '');
|
|
184
194
|
var width;
|
|
185
195
|
var height;
|
|
@@ -220,21 +230,35 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
220
230
|
handleImageError(props, event);
|
|
221
231
|
};
|
|
222
232
|
|
|
233
|
+
var markStartLoadFromMountedTime = (0, _react.useCallback)(function () {
|
|
234
|
+
var mountedMark = ufoExp.metrics.marks.find(function (mark) {
|
|
235
|
+
return mark.name === _types.UfoEmojiTimings.MOUNTED_END;
|
|
236
|
+
});
|
|
237
|
+
ufoExp.mark(_types.UfoEmojiTimings.ONLOAD_START, mountedMark === null || mountedMark === void 0 ? void 0 : mountedMark.time);
|
|
238
|
+
}, [ufoExp]);
|
|
239
|
+
|
|
223
240
|
var onLoad = function onLoad() {
|
|
224
|
-
|
|
225
|
-
(0,
|
|
241
|
+
// onload could trigger before onBeforeLoad when emojis in viewport at start, so we need to mark onload start manually.
|
|
242
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.ONLOAD_START)) {
|
|
243
|
+
markStartLoadFromMountedTime();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.ONLOAD_END)) {
|
|
247
|
+
ufoExp.mark(_types.UfoEmojiTimings.ONLOAD_END);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
ufoExp.success({
|
|
251
|
+
metadata: {
|
|
252
|
+
IBSupported: _browserSupport.isIntersectionObserverSupported
|
|
253
|
+
}
|
|
254
|
+
});
|
|
226
255
|
};
|
|
227
256
|
|
|
228
257
|
var onBeforeLoad = (0, _react.useCallback)(function () {
|
|
229
|
-
(0,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
triggerOnce: true
|
|
234
|
-
}),
|
|
235
|
-
_useInView2 = (0, _slicedToArray2.default)(_useInView, 2),
|
|
236
|
-
ref = _useInView2[0],
|
|
237
|
-
inView = _useInView2[1];
|
|
258
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.ONLOAD_START)) {
|
|
259
|
+
ufoExp.mark(_types.UfoEmojiTimings.ONLOAD_START);
|
|
260
|
+
}
|
|
261
|
+
}, [ufoExp]); // because of the lack of browser support of on before load natively, used IntersectionObserver helper hook to mimic the before load time mark for UFO.
|
|
238
262
|
|
|
239
263
|
(0, _react.useEffect)(function () {
|
|
240
264
|
if (inView) {
|
|
@@ -257,26 +281,6 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
257
281
|
onError: onError,
|
|
258
282
|
onLoad: onLoad
|
|
259
283
|
}, sizing));
|
|
260
|
-
var placeholder = (0, _core.jsx)(_.EmojiPlaceholder, {
|
|
261
|
-
shortName: emoji.shortName,
|
|
262
|
-
size: fitToHeight,
|
|
263
|
-
showTooltip: showTooltip,
|
|
264
|
-
representation: emoji.representation
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
var renderLazyLoadedEmoji = function renderLazyLoadedEmoji() {
|
|
268
|
-
// if browser not supported, render emoji node directly
|
|
269
|
-
if (!_browserSupport.isIntersectionObserverSupported) {
|
|
270
|
-
return emojiNode;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
if (inView) {
|
|
274
|
-
return emojiNode;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
return placeholder;
|
|
278
|
-
};
|
|
279
|
-
|
|
280
284
|
return (0, _core.jsx)("span", {
|
|
281
285
|
"data-testid": "image-emoji-".concat(emoji.shortName),
|
|
282
286
|
"data-emoji-type": "image",
|
|
@@ -296,13 +300,30 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
296
300
|
"aria-label": emoji.shortName,
|
|
297
301
|
title: showTooltip ? emoji.shortName : '',
|
|
298
302
|
ref: ref
|
|
299
|
-
}, deleteButton,
|
|
303
|
+
}, deleteButton, emojiNode);
|
|
300
304
|
};
|
|
301
305
|
|
|
302
306
|
exports.ImageEmoji = ImageEmoji;
|
|
303
307
|
|
|
304
308
|
var Emoji = function Emoji(props) {
|
|
305
|
-
var emoji = props.emoji; //
|
|
309
|
+
var emoji = props.emoji; // start emoji rendered experience, it may have already started earlier in ResourcedEmoji or CachingEmoji
|
|
310
|
+
|
|
311
|
+
(0, _analytics.useSampledUFOComponentExperience)(_analytics.ufoExperiences['emoji-rendered'].getInstance(emoji.id || emoji.shortName), _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP, {
|
|
312
|
+
source: 'emoji',
|
|
313
|
+
emoji: emoji.shortName
|
|
314
|
+
});
|
|
315
|
+
(0, _react.useEffect)(function () {
|
|
316
|
+
var ufoExp = (0, _analytics.sampledUfoRenderedEmoji)(emoji);
|
|
317
|
+
|
|
318
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, 'fmp')) {
|
|
319
|
+
ufoExp.markFMP();
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.MOUNTED_END)) {
|
|
323
|
+
ufoExp.mark(_types.UfoEmojiTimings.MOUNTED_END);
|
|
324
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
325
|
+
|
|
326
|
+
}, []); // TODO: We always prefer render as image as having accessibility issues with sprite representation
|
|
306
327
|
|
|
307
328
|
if ((0, _typeHelpers.isSpriteRepresentation)(emoji.representation)) {
|
|
308
329
|
return (0, _core.jsx)(SpriteEmoji, props);
|
|
@@ -28,7 +28,19 @@ var createRecordSelectionDefault = function createRecordSelectionDefault(provide
|
|
|
28
28
|
}).catch(function () {
|
|
29
29
|
fireAnalytics && fireAnalytics(_analytics.recordFailed);
|
|
30
30
|
|
|
31
|
-
_analytics.ufoExperiences['emoji-selection-recorded'].failure(
|
|
31
|
+
_analytics.ufoExperiences['emoji-selection-recorded'].failure({
|
|
32
|
+
metadata: {
|
|
33
|
+
reason: 'recordSelection error',
|
|
34
|
+
source: 'RecordSelectionDefault',
|
|
35
|
+
data: {
|
|
36
|
+
emoji: {
|
|
37
|
+
id: emoji.id,
|
|
38
|
+
name: emoji.name,
|
|
39
|
+
shortName: emoji.shortName
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
32
44
|
});
|
|
33
45
|
}
|
|
34
46
|
} finally {
|
|
@@ -77,11 +77,12 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
|
|
|
77
77
|
asyncLoadedComponent: ResourcedEmoji.AsyncLoadedComponent
|
|
78
78
|
});
|
|
79
79
|
(0, _analytics.sampledUfoRenderedEmoji)(props.emojiId).start({
|
|
80
|
-
samplingRate: _constants.
|
|
80
|
+
samplingRate: _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
_analytics.ufoExperiences['emoji-rendered'].getInstance(props.emojiId.id || props.emojiId.shortName).addMetadata({
|
|
84
|
-
source: 'resourced-emoji'
|
|
84
|
+
source: 'resourced-emoji',
|
|
85
|
+
emoji: props.emojiId.shortName
|
|
85
86
|
});
|
|
86
87
|
|
|
87
88
|
return _this;
|
|
@@ -90,7 +91,16 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
|
|
|
90
91
|
(0, _createClass2.default)(ResourcedEmoji, [{
|
|
91
92
|
key: "componentWillUnmount",
|
|
92
93
|
value: function componentWillUnmount() {
|
|
93
|
-
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId).abort(
|
|
94
|
+
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId).abort({
|
|
95
|
+
metadata: {
|
|
96
|
+
source: 'ResourcedEmoji',
|
|
97
|
+
reason: 'unmount',
|
|
98
|
+
data: {
|
|
99
|
+
emojiId: this.props.emojiId.id,
|
|
100
|
+
shortName: this.props.emojiId.shortName
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
94
104
|
}
|
|
95
105
|
}, {
|
|
96
106
|
key: "asyncLoadComponent",
|
|
@@ -39,6 +39,8 @@ var _analytics = require("../../util/analytics");
|
|
|
39
39
|
|
|
40
40
|
var _LegacyEmojiContextProvider = _interopRequireDefault(require("../../context/LegacyEmojiContextProvider"));
|
|
41
41
|
|
|
42
|
+
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
43
|
+
|
|
42
44
|
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); }
|
|
43
45
|
|
|
44
46
|
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; }
|
|
@@ -91,7 +93,14 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
91
93
|
// emoji is undefined
|
|
92
94
|
(0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
|
|
93
95
|
metadata: {
|
|
94
|
-
reason: 'failed to find'
|
|
96
|
+
reason: 'failed to find',
|
|
97
|
+
source: 'ResourcedEmojiComponent',
|
|
98
|
+
data: {
|
|
99
|
+
emoji: {
|
|
100
|
+
id: emojiId.id,
|
|
101
|
+
shortName: emojiId.shortName
|
|
102
|
+
}
|
|
103
|
+
}
|
|
95
104
|
}
|
|
96
105
|
});
|
|
97
106
|
}
|
|
@@ -99,7 +108,14 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
99
108
|
}).catch(function () {
|
|
100
109
|
(0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
|
|
101
110
|
metadata: {
|
|
102
|
-
reason: 'failed to load'
|
|
111
|
+
reason: 'failed to load',
|
|
112
|
+
source: 'ResourcedEmojiComponent',
|
|
113
|
+
data: {
|
|
114
|
+
emoji: {
|
|
115
|
+
id: emojiId.id,
|
|
116
|
+
shortName: emojiId.shortName
|
|
117
|
+
}
|
|
118
|
+
}
|
|
103
119
|
}
|
|
104
120
|
});
|
|
105
121
|
});
|
|
@@ -131,7 +147,9 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
131
147
|
}, {
|
|
132
148
|
key: "componentDidMount",
|
|
133
149
|
value: function componentDidMount() {
|
|
134
|
-
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId)
|
|
150
|
+
if (!(0, _ufoExperiences.hasUfoMarked)((0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId), _types.UfoEmojiTimings.FMP_END)) {
|
|
151
|
+
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId).markFMP();
|
|
152
|
+
}
|
|
135
153
|
}
|
|
136
154
|
}, {
|
|
137
155
|
key: "UNSAFE_componentWillReceiveProps",
|
|
@@ -19,6 +19,12 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
|
|
|
19
19
|
|
|
20
20
|
var _react = _interopRequireDefault(require("react"));
|
|
21
21
|
|
|
22
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
23
|
+
|
|
24
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
25
|
+
|
|
26
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
|
+
|
|
22
28
|
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); }; }
|
|
23
29
|
|
|
24
30
|
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; } }
|
|
@@ -35,10 +41,30 @@ var UfoErrorBoundary = /*#__PURE__*/function (_React$Component) {
|
|
|
35
41
|
|
|
36
42
|
(0, _createClass2.default)(UfoErrorBoundary, [{
|
|
37
43
|
key: "componentDidCatch",
|
|
38
|
-
value: function componentDidCatch() {
|
|
39
|
-
this.props.experiences
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
value: function componentDidCatch(error, errorInfo) {
|
|
45
|
+
var _iterator = _createForOfIteratorHelper(this.props.experiences),
|
|
46
|
+
_step;
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
50
|
+
var exp = _step.value;
|
|
51
|
+
exp.failure({
|
|
52
|
+
metadata: {
|
|
53
|
+
source: 'UfoErrorBoundary',
|
|
54
|
+
reason: 'error',
|
|
55
|
+
error: {
|
|
56
|
+
name: error.name,
|
|
57
|
+
message: error.message,
|
|
58
|
+
infoStack: errorInfo.componentStack
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
} catch (err) {
|
|
64
|
+
_iterator.e(err);
|
|
65
|
+
} finally {
|
|
66
|
+
_iterator.f();
|
|
67
|
+
}
|
|
42
68
|
}
|
|
43
69
|
}, {
|
|
44
70
|
key: "render",
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.uploadEmoji = void 0;
|
|
7
9
|
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
8
12
|
var _EmojiResource = require("../../api/EmojiResource");
|
|
9
13
|
|
|
10
14
|
var _analytics = require("../../util/analytics");
|
|
@@ -13,6 +17,10 @@ var _i18n = require("../i18n");
|
|
|
13
17
|
|
|
14
18
|
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
15
19
|
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
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; }
|
|
23
|
+
|
|
16
24
|
var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) {
|
|
17
25
|
var startTime = Date.now();
|
|
18
26
|
errorSetter(undefined);
|
|
@@ -36,7 +44,15 @@ var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuc
|
|
|
36
44
|
reason: _i18n.messages.emojiUploadFailed.defaultMessage
|
|
37
45
|
}));
|
|
38
46
|
|
|
39
|
-
_ufoExperiences.ufoExperiences['emoji-uploaded'].failure(
|
|
47
|
+
_ufoExperiences.ufoExperiences['emoji-uploaded'].failure({
|
|
48
|
+
metadata: {
|
|
49
|
+
source: 'UploadEmoji',
|
|
50
|
+
error: err,
|
|
51
|
+
data: {
|
|
52
|
+
upload: _objectSpread({}, upload)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
40
56
|
});
|
|
41
57
|
}
|
|
42
58
|
};
|
|
@@ -434,9 +434,19 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
434
434
|
duration: this.calculateElapsedTime()
|
|
435
435
|
}));
|
|
436
436
|
|
|
437
|
-
_analytics.ufoExperiences['emoji-picker-opened'].abort(
|
|
437
|
+
_analytics.ufoExperiences['emoji-picker-opened'].abort({
|
|
438
|
+
metadata: {
|
|
439
|
+
source: 'EmojiPickerComponent',
|
|
440
|
+
reason: 'unmount'
|
|
441
|
+
}
|
|
442
|
+
});
|
|
438
443
|
|
|
439
|
-
_analytics.ufoExperiences['emoji-searched'].abort(
|
|
444
|
+
_analytics.ufoExperiences['emoji-searched'].abort({
|
|
445
|
+
metadata: {
|
|
446
|
+
source: 'EmojiPickerComponent',
|
|
447
|
+
reason: 'unmount'
|
|
448
|
+
}
|
|
449
|
+
});
|
|
440
450
|
}
|
|
441
451
|
}, {
|
|
442
452
|
key: "UNSAFE_componentWillReceiveProps",
|
|
@@ -224,9 +224,25 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
224
224
|
this.fireAnalyticsEvent((0, _analytics.typeaheadCancelledEvent)(Date.now() - this.openTime, query, emojis));
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
_analytics.ufoExperiences['emoji-searched'].abort(
|
|
227
|
+
_analytics.ufoExperiences['emoji-searched'].abort({
|
|
228
|
+
metadata: {
|
|
229
|
+
source: 'EmojiTypeAheadComponent',
|
|
230
|
+
reason: 'unmount',
|
|
231
|
+
data: {
|
|
232
|
+
query: query
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
});
|
|
228
236
|
|
|
229
|
-
_analytics.ufoExperiences['emoji-selection-recorded'].abort(
|
|
237
|
+
_analytics.ufoExperiences['emoji-selection-recorded'].abort({
|
|
238
|
+
metadata: {
|
|
239
|
+
source: 'EmojiTypeAheadComponent',
|
|
240
|
+
reason: 'unmount',
|
|
241
|
+
data: {
|
|
242
|
+
query: query
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
});
|
|
230
246
|
|
|
231
247
|
this.sessionId = (0, _uuid.default)();
|
|
232
248
|
this.selected = false;
|
|
@@ -119,7 +119,12 @@ var EmojiUploadComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
119
119
|
(0, _createClass2.default)(EmojiUploadComponent, [{
|
|
120
120
|
key: "componentWillUnmount",
|
|
121
121
|
value: function componentWillUnmount() {
|
|
122
|
-
_ufoExperiences.ufoExperiences['emoji-uploaded'].abort(
|
|
122
|
+
_ufoExperiences.ufoExperiences['emoji-uploaded'].abort({
|
|
123
|
+
metadata: {
|
|
124
|
+
source: 'EmojiUploadComponent',
|
|
125
|
+
reason: 'unmount'
|
|
126
|
+
}
|
|
127
|
+
});
|
|
123
128
|
}
|
|
124
129
|
}, {
|
|
125
130
|
key: "render",
|
package/dist/cjs/types.js
CHANGED
|
@@ -78,6 +78,7 @@ var UfoEmojiTimingsKeys;
|
|
|
78
78
|
exports.UfoEmojiTimingsKeys = UfoEmojiTimingsKeys;
|
|
79
79
|
|
|
80
80
|
(function (UfoEmojiTimingsKeys) {
|
|
81
|
+
UfoEmojiTimingsKeys["FMP"] = "fmp";
|
|
81
82
|
UfoEmojiTimingsKeys["MOUNTED"] = "emoji-mount";
|
|
82
83
|
UfoEmojiTimingsKeys["METADATA"] = "emoji-metadata";
|
|
83
84
|
UfoEmojiTimingsKeys["MEDIADATA"] = "emoji-media";
|
|
@@ -88,6 +89,7 @@ var UfoEmojiTimings;
|
|
|
88
89
|
exports.UfoEmojiTimings = UfoEmojiTimings;
|
|
89
90
|
|
|
90
91
|
(function (UfoEmojiTimings) {
|
|
92
|
+
UfoEmojiTimings["FMP_END"] = "fmp";
|
|
91
93
|
UfoEmojiTimings["MOUNTED_END"] = "emoji-mount_end";
|
|
92
94
|
UfoEmojiTimings["METADATA_START"] = "emoji-metadata_start";
|
|
93
95
|
UfoEmojiTimings["METADATA_END"] = "emoji-metadata_end";
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.ufoExperiences = exports.sampledUfoRenderedEmoji = void 0;
|
|
6
|
+
exports.ufoExperiences = exports.sampledUfoRenderedEmoji = exports.sampledUfoEmojiResourceFetched = exports.hasUfoMarked = void 0;
|
|
7
7
|
|
|
8
8
|
var _types = require("../../types");
|
|
9
9
|
|
|
@@ -32,8 +32,8 @@ var createInlineExperience = function createInlineExperience(componentName) {
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
var customEmojiTimings = [{
|
|
35
|
-
key: _types.UfoEmojiTimingsKeys.
|
|
36
|
-
endMark: _types.UfoEmojiTimings.
|
|
35
|
+
key: _types.UfoEmojiTimingsKeys.FMP,
|
|
36
|
+
endMark: _types.UfoEmojiTimings.FMP_END
|
|
37
37
|
}, {
|
|
38
38
|
key: _types.UfoEmojiTimingsKeys.METADATA,
|
|
39
39
|
component: 'resourced-emoji',
|
|
@@ -44,6 +44,10 @@ var customEmojiTimings = [{
|
|
|
44
44
|
component: 'caching-emoji',
|
|
45
45
|
startMark: _types.UfoEmojiTimings.MEDIA_START,
|
|
46
46
|
endMark: _types.UfoEmojiTimings.MEDIA_END
|
|
47
|
+
}, {
|
|
48
|
+
key: _types.UfoEmojiTimingsKeys.MOUNTED,
|
|
49
|
+
component: 'emoji',
|
|
50
|
+
endMark: _types.UfoEmojiTimings.MOUNTED_END
|
|
47
51
|
}, {
|
|
48
52
|
key: _types.UfoEmojiTimingsKeys.ONLOAD,
|
|
49
53
|
startMark: _types.UfoEmojiTimings.ONLOAD_START,
|
|
@@ -70,4 +74,18 @@ var sampledUfoRenderedEmoji = function sampledUfoRenderedEmoji(emojiId) {
|
|
|
70
74
|
return (0, _samplingUfo.withSampling)(ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName));
|
|
71
75
|
};
|
|
72
76
|
|
|
73
|
-
exports.sampledUfoRenderedEmoji = sampledUfoRenderedEmoji;
|
|
77
|
+
exports.sampledUfoRenderedEmoji = sampledUfoRenderedEmoji;
|
|
78
|
+
|
|
79
|
+
var hasUfoMarked = function hasUfoMarked(ufoExperience, name) {
|
|
80
|
+
return ufoExperience.metrics.marks.some(function (mask) {
|
|
81
|
+
return mask.name === name;
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
exports.hasUfoMarked = hasUfoMarked;
|
|
86
|
+
|
|
87
|
+
var sampledUfoEmojiResourceFetched = function sampledUfoEmojiResourceFetched(providerType) {
|
|
88
|
+
return (0, _samplingUfo.withSampling)(ufoExperiences['emoji-resource-fetched'].getInstance(providerType));
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
exports.sampledUfoEmojiResourceFetched = sampledUfoEmojiResourceFetched;
|
|
@@ -38,8 +38,9 @@ var useSampledUFOComponentExperience = function useSampledUFOComponentExperience
|
|
|
38
38
|
(0, _samplingUfo.withSampling)(experience).start({
|
|
39
39
|
samplingRate: samplingRate
|
|
40
40
|
});
|
|
41
|
+
var isMetadataEmpty = Object.keys(experience.metadata).length === 0;
|
|
41
42
|
|
|
42
|
-
if (metadata) {
|
|
43
|
+
if (metadata && isMetadataEmpty) {
|
|
43
44
|
experience.addMetadata(metadata);
|
|
44
45
|
}
|
|
45
46
|
});
|
|
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.isIntersectionObserverSupported = void 0;
|
|
7
|
-
var isIntersectionObserverSupported = typeof window
|
|
7
|
+
var isIntersectionObserverSupported = typeof window !== 'undefined' && 'IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype;
|
|
8
8
|
exports.isIntersectionObserverSupported = isIntersectionObserverSupported;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.userCustomTitle = exports.selectedToneStorageKey = exports.migrationUserId = exports.localStoragePrefix = exports.frequentCategory = exports.emojiPickerWidth = exports.emojiPickerHeight = exports.deleteEmojiLabel = exports.defaultListLimit = exports.defaultEmojiHeight = exports.defaultCategories = exports.dataURLPrefix = exports.customType = exports.customTitle = exports.customCategory = exports.analyticsEmojiPrefix = exports.
|
|
6
|
+
exports.userCustomTitle = exports.selectedToneStorageKey = exports.migrationUserId = exports.localStoragePrefix = exports.frequentCategory = exports.emojiPickerWidth = exports.emojiPickerHeight = exports.deleteEmojiLabel = exports.defaultListLimit = exports.defaultEmojiHeight = exports.defaultCategories = exports.dataURLPrefix = exports.customType = exports.customTitle = exports.customCategory = exports.analyticsEmojiPrefix = exports.SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP = exports.SAMPLING_RATE_EMOJI_RENDERED_EXP = exports.MAX_ORDINAL = void 0;
|
|
7
7
|
var customCategory = 'CUSTOM';
|
|
8
8
|
exports.customCategory = customCategory;
|
|
9
9
|
var frequentCategory = 'FREQUENT';
|
|
@@ -44,9 +44,8 @@ exports.migrationUserId = migrationUserId;
|
|
|
44
44
|
var analyticsEmojiPrefix = 'atlassian.fabric.emoji.picker'; // This is the base sampling rate in Emoji
|
|
45
45
|
|
|
46
46
|
exports.analyticsEmojiPrefix = analyticsEmojiPrefix;
|
|
47
|
-
var SAMPLING_RATE_EMOJI_RENDERED_EXP = 0.05; // This rate is used in
|
|
47
|
+
var SAMPLING_RATE_EMOJI_RENDERED_EXP = 0.05; // This rate is used in fetching emoji resource
|
|
48
48
|
|
|
49
49
|
exports.SAMPLING_RATE_EMOJI_RENDERED_EXP = SAMPLING_RATE_EMOJI_RENDERED_EXP;
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
exports.SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI = SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI;
|
|
50
|
+
var SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP = 0.01;
|
|
51
|
+
exports.SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP = SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useInView = void 0;
|
|
7
|
+
|
|
8
|
+
var _reactIntersectionObserver = require("react-intersection-observer");
|
|
9
|
+
|
|
10
|
+
var _browserSupport = require("./browser-support");
|
|
11
|
+
|
|
12
|
+
var useInView = function useInView(options) {
|
|
13
|
+
var hookResult = (0, _reactIntersectionObserver.useInView)(options);
|
|
14
|
+
|
|
15
|
+
if (!_browserSupport.isIntersectionObserverSupported) {
|
|
16
|
+
// Unsupported, return no `ref` and default `inView` true value
|
|
17
|
+
return [undefined, true];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return hookResult;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.useInView = useInView;
|
package/dist/cjs/version.json
CHANGED
|
@@ -60,7 +60,11 @@ export class EmojiResource extends AbstractResource {
|
|
|
60
60
|
this.notifyError(reason);
|
|
61
61
|
ufoExperiences['emoji-resource-fetched'].getInstance(providerType).failure({
|
|
62
62
|
metadata: {
|
|
63
|
-
reason
|
|
63
|
+
reason,
|
|
64
|
+
source: 'EmojiProvider',
|
|
65
|
+
data: {
|
|
66
|
+
providerUrl: provider.url
|
|
67
|
+
}
|
|
64
68
|
}
|
|
65
69
|
});
|
|
66
70
|
});
|