@atlaskit/emoji 64.6.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 +21 -0
- package/dist/cjs/api/EmojiRepository.js +4 -0
- package/dist/cjs/api/EmojiResource.js +13 -1
- package/dist/cjs/api/EmojiUtils.js +4 -0
- package/dist/cjs/api/internal/UsageFrequencyTracker.js +4 -1
- package/dist/cjs/components/common/CachingEmoji.js +33 -12
- package/dist/cjs/components/common/DeleteButton.js +2 -1
- package/dist/cjs/components/common/Emoji.js +98 -21
- package/dist/cjs/components/common/EmojiPlaceholder.js +1 -0
- package/dist/cjs/components/common/Popup.js +21 -1
- 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 +32 -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 +16 -4
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +5 -0
- package/dist/cjs/components/picker/styles.js +2 -0
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +6 -1
- package/dist/cjs/types.js +27 -2
- package/dist/cjs/util/analytics/ufoExperiences.js +46 -3
- package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/cjs/util/browser-support.js +8 -0
- package/dist/cjs/util/constants.js +4 -5
- package/dist/cjs/util/storage-available.js +4 -0
- package/dist/cjs/util/useInView.js +23 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiRepository.js +4 -0
- package/dist/es2019/api/EmojiResource.js +13 -1
- package/dist/es2019/api/EmojiUtils.js +4 -0
- package/dist/es2019/api/internal/UsageFrequencyTracker.js +4 -1
- package/dist/es2019/components/common/CachingEmoji.js +28 -9
- package/dist/es2019/components/common/DeleteButton.js +2 -1
- package/dist/es2019/components/common/Emoji.js +76 -24
- package/dist/es2019/components/common/EmojiPlaceholder.js +1 -0
- package/dist/es2019/components/common/Popup.js +21 -1
- 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 +28 -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 +16 -3
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +5 -0
- package/dist/es2019/components/picker/styles.js +3 -0
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +6 -1
- package/dist/es2019/types.js +24 -1
- package/dist/es2019/util/analytics/ufoExperiences.js +37 -2
- package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/es2019/util/browser-support.js +1 -0
- package/dist/es2019/util/constants.js +2 -2
- package/dist/es2019/util/storage-available.js +4 -0
- package/dist/es2019/util/useInView.js +12 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiRepository.js +4 -0
- package/dist/esm/api/EmojiResource.js +13 -1
- package/dist/esm/api/EmojiUtils.js +4 -0
- package/dist/esm/api/internal/UsageFrequencyTracker.js +4 -1
- package/dist/esm/components/common/CachingEmoji.js +32 -13
- package/dist/esm/components/common/DeleteButton.js +2 -1
- package/dist/esm/components/common/Emoji.js +84 -24
- package/dist/esm/components/common/EmojiPlaceholder.js +1 -0
- package/dist/esm/components/common/Popup.js +21 -1
- 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 +30 -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 +16 -3
- package/dist/esm/components/picker/EmojiPickerListSearch.js +5 -0
- package/dist/esm/components/picker/styles.js +2 -0
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/esm/components/uploader/EmojiUploadComponent.js +6 -1
- package/dist/esm/types.js +24 -1
- package/dist/esm/util/analytics/ufoExperiences.js +39 -2
- package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/esm/util/browser-support.js +1 -0
- package/dist/esm/util/constants.js +2 -2
- package/dist/esm/util/storage-available.js +4 -0
- package/dist/esm/util/useInView.js +12 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/common/CachingEmoji.d.ts +0 -1
- package/dist/types/components/common/Emoji.d.ts +2 -0
- package/dist/types/components/common/ResourcedEmojiComponent.d.ts +1 -0
- package/dist/types/components/common/UfoErrorBoundary.d.ts +2 -2
- package/dist/types/types.d.ts +17 -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/browser-support.d.ts +1 -0
- package/dist/types/util/constants.d.ts +1 -1
- package/dist/types/util/useInView.d.ts +4 -0
- package/package.json +7 -6
|
@@ -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
|
};
|
|
@@ -329,6 +329,10 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
329
329
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "scrollToEndOfList", function () {
|
|
330
330
|
var emojiPickerList = _this.refs.emojiPickerList;
|
|
331
331
|
|
|
332
|
+
if (typeof window === 'undefined') {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
|
|
332
336
|
if (emojiPickerList) {
|
|
333
337
|
// Wait a tick to ensure repaint and updated height for picker list
|
|
334
338
|
window.setTimeout(function () {
|
|
@@ -430,11 +434,19 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
430
434
|
duration: this.calculateElapsedTime()
|
|
431
435
|
}));
|
|
432
436
|
|
|
433
|
-
_analytics.ufoExperiences['emoji-picker-opened'].abort(
|
|
434
|
-
|
|
435
|
-
|
|
437
|
+
_analytics.ufoExperiences['emoji-picker-opened'].abort({
|
|
438
|
+
metadata: {
|
|
439
|
+
source: 'EmojiPickerComponent',
|
|
440
|
+
reason: 'unmount'
|
|
441
|
+
}
|
|
442
|
+
});
|
|
436
443
|
|
|
437
|
-
_analytics.ufoExperiences['emoji-
|
|
444
|
+
_analytics.ufoExperiences['emoji-searched'].abort({
|
|
445
|
+
metadata: {
|
|
446
|
+
source: 'EmojiPickerComponent',
|
|
447
|
+
reason: 'unmount'
|
|
448
|
+
}
|
|
449
|
+
});
|
|
438
450
|
}
|
|
439
451
|
}, {
|
|
440
452
|
key: "UNSAFE_componentWillReceiveProps",
|
|
@@ -84,6 +84,11 @@ var EmojiPickerListSearch = /*#__PURE__*/function (_PureComponent) {
|
|
|
84
84
|
// setting the focus to search input.
|
|
85
85
|
// see FS-2056
|
|
86
86
|
_this.inputRef = input;
|
|
87
|
+
|
|
88
|
+
if (typeof window === 'undefined') {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
87
92
|
window.setTimeout(_this.focusInput);
|
|
88
93
|
}
|
|
89
94
|
});
|
|
@@ -181,6 +181,8 @@ var emojiItem = (0, _core.css)((_css6 = {
|
|
|
181
181
|
margin: '7px',
|
|
182
182
|
minWidth: '24px',
|
|
183
183
|
maxWidth: '24px'
|
|
184
|
+
}), (0, _defineProperty2.default)(_css6, "& .".concat(_styles.emojiNodeStyles, " .").concat(_styles.placeholder), {
|
|
185
|
+
margin: '0'
|
|
184
186
|
}), (0, _defineProperty2.default)(_css6, "& .".concat(_styles.emojiNodeStyles, " > img"), {
|
|
185
187
|
position: 'relative',
|
|
186
188
|
left: '50%',
|
|
@@ -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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.UfoExperienceName = exports.UfoComponentName = exports.SearchSort = exports.ProviderTypes = void 0;
|
|
6
|
+
exports.UfoExperienceName = exports.UfoEmojiTimingsKeys = exports.UfoEmojiTimings = exports.UfoComponentName = exports.SearchSort = exports.ProviderTypes = void 0;
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Minimum information to defined an emoji is the shortName.
|
|
@@ -72,4 +72,29 @@ exports.UfoComponentName = UfoComponentName;
|
|
|
72
72
|
UfoComponentName["EMOJI"] = "emoji";
|
|
73
73
|
UfoComponentName["EMOJI_PICKER"] = "emoji-picker";
|
|
74
74
|
UfoComponentName["EMOJI_PROVIDER"] = "emoji-provider";
|
|
75
|
-
})(UfoComponentName || (exports.UfoComponentName = UfoComponentName = {}));
|
|
75
|
+
})(UfoComponentName || (exports.UfoComponentName = UfoComponentName = {}));
|
|
76
|
+
|
|
77
|
+
var UfoEmojiTimingsKeys;
|
|
78
|
+
exports.UfoEmojiTimingsKeys = UfoEmojiTimingsKeys;
|
|
79
|
+
|
|
80
|
+
(function (UfoEmojiTimingsKeys) {
|
|
81
|
+
UfoEmojiTimingsKeys["FMP"] = "fmp";
|
|
82
|
+
UfoEmojiTimingsKeys["MOUNTED"] = "emoji-mount";
|
|
83
|
+
UfoEmojiTimingsKeys["METADATA"] = "emoji-metadata";
|
|
84
|
+
UfoEmojiTimingsKeys["MEDIADATA"] = "emoji-media";
|
|
85
|
+
UfoEmojiTimingsKeys["ONLOAD"] = "emoji-onload";
|
|
86
|
+
})(UfoEmojiTimingsKeys || (exports.UfoEmojiTimingsKeys = UfoEmojiTimingsKeys = {}));
|
|
87
|
+
|
|
88
|
+
var UfoEmojiTimings;
|
|
89
|
+
exports.UfoEmojiTimings = UfoEmojiTimings;
|
|
90
|
+
|
|
91
|
+
(function (UfoEmojiTimings) {
|
|
92
|
+
UfoEmojiTimings["FMP_END"] = "fmp";
|
|
93
|
+
UfoEmojiTimings["MOUNTED_END"] = "emoji-mount_end";
|
|
94
|
+
UfoEmojiTimings["METADATA_START"] = "emoji-metadata_start";
|
|
95
|
+
UfoEmojiTimings["METADATA_END"] = "emoji-metadata_end";
|
|
96
|
+
UfoEmojiTimings["MEDIA_START"] = "emoji-media_start";
|
|
97
|
+
UfoEmojiTimings["MEDIA_END"] = "emoji-media_end";
|
|
98
|
+
UfoEmojiTimings["ONLOAD_START"] = "emoji-onload_start";
|
|
99
|
+
UfoEmojiTimings["ONLOAD_END"] = "emoji-onload_end";
|
|
100
|
+
})(UfoEmojiTimings || (exports.UfoEmojiTimings = UfoEmojiTimings = {}));
|
|
@@ -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
|
|
|
@@ -31,8 +31,37 @@ var createInlineExperience = function createInlineExperience(componentName) {
|
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
var customEmojiTimings = [{
|
|
35
|
+
key: _types.UfoEmojiTimingsKeys.FMP,
|
|
36
|
+
endMark: _types.UfoEmojiTimings.FMP_END
|
|
37
|
+
}, {
|
|
38
|
+
key: _types.UfoEmojiTimingsKeys.METADATA,
|
|
39
|
+
component: 'resourced-emoji',
|
|
40
|
+
startMark: _types.UfoEmojiTimings.METADATA_START,
|
|
41
|
+
endMark: _types.UfoEmojiTimings.METADATA_END
|
|
42
|
+
}, {
|
|
43
|
+
key: _types.UfoEmojiTimingsKeys.MEDIADATA,
|
|
44
|
+
component: 'caching-emoji',
|
|
45
|
+
startMark: _types.UfoEmojiTimings.MEDIA_START,
|
|
46
|
+
endMark: _types.UfoEmojiTimings.MEDIA_END
|
|
47
|
+
}, {
|
|
48
|
+
key: _types.UfoEmojiTimingsKeys.MOUNTED,
|
|
49
|
+
component: 'emoji',
|
|
50
|
+
endMark: _types.UfoEmojiTimings.MOUNTED_END
|
|
51
|
+
}, {
|
|
52
|
+
key: _types.UfoEmojiTimingsKeys.ONLOAD,
|
|
53
|
+
startMark: _types.UfoEmojiTimings.ONLOAD_START,
|
|
54
|
+
endMark: _types.UfoEmojiTimings.ONLOAD_END
|
|
55
|
+
}];
|
|
34
56
|
var ufoExperiences = {
|
|
35
|
-
'emoji-rendered': new _ufo.ConcurrentExperience(_types.UfoExperienceName.EMOJI_RENDERED,
|
|
57
|
+
'emoji-rendered': new _ufo.ConcurrentExperience(_types.UfoExperienceName.EMOJI_RENDERED, {
|
|
58
|
+
platform: {
|
|
59
|
+
component: _types.UfoComponentName.EMOJI
|
|
60
|
+
},
|
|
61
|
+
type: _ufo.ExperienceTypes.Operation,
|
|
62
|
+
performanceType: _ufo.ExperiencePerformanceTypes.Custom,
|
|
63
|
+
timings: customEmojiTimings
|
|
64
|
+
}),
|
|
36
65
|
'emoji-resource-fetched': new _ufo.ConcurrentExperience(_types.UfoExperienceName.EMOJI_RESOURCE_FETCHED, createRenderExperience(_types.UfoComponentName.EMOJI_PROVIDER)),
|
|
37
66
|
'emoji-picker-opened': new _ufo.UFOExperience(_types.UfoExperienceName.EMOJI_PICKER_OPENED, createRenderExperience(_types.UfoComponentName.EMOJI_PICKER)),
|
|
38
67
|
'emoji-selection-recorded': new _ufo.UFOExperience(_types.UfoExperienceName.EMOJI_SELECTION_RECORDED, createInlineExperience(_types.UfoComponentName.EMOJI_PROVIDER)),
|
|
@@ -45,4 +74,18 @@ var sampledUfoRenderedEmoji = function sampledUfoRenderedEmoji(emojiId) {
|
|
|
45
74
|
return (0, _samplingUfo.withSampling)(ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName));
|
|
46
75
|
};
|
|
47
76
|
|
|
48
|
-
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
|
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isIntersectionObserverSupported = void 0;
|
|
7
|
+
var isIntersectionObserverSupported = typeof window !== 'undefined' && 'IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype;
|
|
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;
|
|
@@ -8,6 +8,10 @@ exports.default = storageAvailable;
|
|
|
8
8
|
// Copied from https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage
|
|
9
9
|
// a brief history of local storage - https://gist.github.com/paulirish/5558557
|
|
10
10
|
function storageAvailable(type) {
|
|
11
|
+
if (typeof window === 'undefined') {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
var storage;
|
|
12
16
|
|
|
13
17
|
try {
|
|
@@ -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
|
@@ -246,6 +246,10 @@ export default class EmojiRepository {
|
|
|
246
246
|
// frequent category being shown in the picker).
|
|
247
247
|
|
|
248
248
|
if (this.dynamicCategoryList.indexOf(frequentCategory) === -1) {
|
|
249
|
+
if (typeof window === 'undefined') {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
|
|
249
253
|
window.setTimeout(() => {
|
|
250
254
|
this.dynamicCategoryList.push(frequentCategory);
|
|
251
255
|
});
|
|
@@ -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
|
});
|
|
@@ -143,6 +147,10 @@ export class EmojiResource extends AbstractResource {
|
|
|
143
147
|
}
|
|
144
148
|
|
|
145
149
|
loadStoredTone() {
|
|
150
|
+
if (typeof window === 'undefined') {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
|
|
146
154
|
const storedToneString = window.localStorage.getItem(selectedToneStorageKey);
|
|
147
155
|
|
|
148
156
|
if (storedToneString) {
|
|
@@ -384,6 +392,10 @@ export class EmojiResource extends AbstractResource {
|
|
|
384
392
|
setSelectedTone(tone) {
|
|
385
393
|
this.selectedTone = tone;
|
|
386
394
|
|
|
395
|
+
if (typeof window === 'undefined') {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
|
|
387
399
|
if (storageAvailable('localStorage')) {
|
|
388
400
|
try {
|
|
389
401
|
window.localStorage.setItem(selectedToneStorageKey, tone ? tone.toString() : '');
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
-
import React from 'react';
|
|
3
|
+
import React, { useEffect } from 'react';
|
|
4
4
|
import { PureComponent } from 'react';
|
|
5
5
|
import { isMediaEmoji } from '../../util/type-helpers';
|
|
6
|
+
import { UfoEmojiTimings } from '../../types';
|
|
6
7
|
import debug from '../../util/logger';
|
|
7
8
|
import Emoji from './Emoji';
|
|
8
9
|
import EmojiPlaceholder from './EmojiPlaceholder';
|
|
@@ -10,6 +11,7 @@ import { UfoErrorBoundary } from './UfoErrorBoundary';
|
|
|
10
11
|
import { sampledUfoRenderedEmoji, ufoExperiences, useSampledUFOComponentExperience } from '../../util/analytics';
|
|
11
12
|
import { SAMPLING_RATE_EMOJI_RENDERED_EXP } from '../../util/constants';
|
|
12
13
|
import { EmojiContext } from '../../context/EmojiContext';
|
|
14
|
+
import { hasUfoMarked } from '../../util/analytics/ufoExperiences';
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
17
|
* Renders an emoji from a cached image, if required.
|
|
@@ -23,8 +25,15 @@ export const CachingEmoji = props => {
|
|
|
23
25
|
} = props; // start emoji rendered experience, it may have already started earlier in ResourcedEmoji
|
|
24
26
|
|
|
25
27
|
useSampledUFOComponentExperience(ufoExperiences['emoji-rendered'].getInstance(emojiProps.emoji.id || emojiProps.emoji.shortName), SAMPLING_RATE_EMOJI_RENDERED_EXP, {
|
|
26
|
-
source: 'caching-emoji'
|
|
28
|
+
source: 'caching-emoji',
|
|
29
|
+
emoji: emojiProps.emoji.shortName
|
|
27
30
|
});
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!hasUfoMarked(sampledUfoRenderedEmoji(emojiProps.emoji), 'fmp')) {
|
|
33
|
+
sampledUfoRenderedEmoji(emojiProps.emoji).markFMP();
|
|
34
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
+
|
|
36
|
+
}, []);
|
|
28
37
|
|
|
29
38
|
const emojiNode = () => {
|
|
30
39
|
if (isMediaEmoji(props.emoji)) {
|
|
@@ -50,7 +59,12 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
50
59
|
_defineProperty(this, "handleLoadError", _emojiId => {
|
|
51
60
|
sampledUfoRenderedEmoji(_emojiId).failure({
|
|
52
61
|
metadata: {
|
|
53
|
-
reason: 'load error'
|
|
62
|
+
reason: 'load error',
|
|
63
|
+
source: 'CachingMediaEmoji',
|
|
64
|
+
emoji: {
|
|
65
|
+
id: _emojiId.id,
|
|
66
|
+
shortName: _emojiId.shortName
|
|
67
|
+
}
|
|
54
68
|
}
|
|
55
69
|
});
|
|
56
70
|
this.setState({
|
|
@@ -64,10 +78,6 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
64
78
|
this.loadEmoji(props.emoji, context);
|
|
65
79
|
}
|
|
66
80
|
|
|
67
|
-
componentDidMount() {
|
|
68
|
-
sampledUfoRenderedEmoji(this.props.emoji).markFMP();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
81
|
componentDidUpdate() {
|
|
72
82
|
var _this$state$cachedEmo;
|
|
73
83
|
|
|
@@ -94,11 +104,13 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
94
104
|
}
|
|
95
105
|
|
|
96
106
|
debug('Loading image via media cache', emoji.shortName);
|
|
107
|
+
sampledUfoRenderedEmoji(emoji).mark(UfoEmojiTimings.MEDIA_START);
|
|
97
108
|
emojiProvider.getMediaEmojiDescriptionURLWithInlineToken(emoji).then(cachedEmoji => {
|
|
98
109
|
this.setState({
|
|
99
110
|
cachedEmoji,
|
|
100
111
|
invalidImage: false
|
|
101
112
|
});
|
|
113
|
+
sampledUfoRenderedEmoji(emoji).mark(UfoEmojiTimings.MEDIA_END);
|
|
102
114
|
}).catch(() => {
|
|
103
115
|
this.setState({
|
|
104
116
|
cachedEmoji: undefined,
|
|
@@ -106,7 +118,15 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
106
118
|
});
|
|
107
119
|
sampledUfoRenderedEmoji(emoji).failure({
|
|
108
120
|
metadata: {
|
|
109
|
-
reason: 'failed to load media emoji'
|
|
121
|
+
reason: 'failed to load media emoji',
|
|
122
|
+
source: 'CachingMediaEmoji',
|
|
123
|
+
data: {
|
|
124
|
+
emoji: {
|
|
125
|
+
id: emoji.id,
|
|
126
|
+
shortName: emoji.shortName,
|
|
127
|
+
name: emoji.name
|
|
128
|
+
}
|
|
129
|
+
}
|
|
110
130
|
}
|
|
111
131
|
});
|
|
112
132
|
});
|
|
@@ -119,7 +139,6 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
119
139
|
} = this.state;
|
|
120
140
|
const {
|
|
121
141
|
children,
|
|
122
|
-
placeholderSize,
|
|
123
142
|
...otherProps
|
|
124
143
|
} = this.props;
|
|
125
144
|
let emojiComponent;
|
|
@@ -9,7 +9,8 @@ import { emojiDeleteButton, deleteButton } from './styles';
|
|
|
9
9
|
|
|
10
10
|
const DeleteButton = props => jsx("span", {
|
|
11
11
|
css: deleteButton,
|
|
12
|
-
className: emojiDeleteButton
|
|
12
|
+
className: emojiDeleteButton,
|
|
13
|
+
"data-testid": "emoji-delete-button"
|
|
13
14
|
}, jsx(Button, {
|
|
14
15
|
iconBefore: jsx(CrossCircleIcon, {
|
|
15
16
|
label: deleteEmojiLabel,
|