@atlaskit/emoji 67.8.5 → 67.8.7
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 +16 -0
- package/dist/cjs/components/common/Emoji.js +3 -1
- package/dist/cjs/components/common/RecordSelectionDefault.js +2 -2
- package/dist/cjs/components/common/ResourcedEmoji.js +7 -18
- package/dist/cjs/components/picker/EmojiPickerComponent.js +1 -1
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +2 -2
- package/dist/cjs/util/analytics/analytics.js +27 -6
- package/dist/cjs/util/analytics/index.js +12 -0
- package/dist/cjs/util/is-ssr.js +20 -0
- package/dist/es2019/components/common/Emoji.js +3 -1
- package/dist/es2019/components/common/RecordSelectionDefault.js +3 -3
- package/dist/es2019/components/common/ResourcedEmoji.js +4 -6
- package/dist/es2019/components/picker/EmojiPickerComponent.js +1 -1
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +3 -3
- package/dist/es2019/util/analytics/analytics.js +22 -5
- package/dist/es2019/util/analytics/index.js +1 -1
- package/dist/es2019/util/is-ssr.js +14 -0
- package/dist/esm/components/common/Emoji.js +3 -1
- package/dist/esm/components/common/RecordSelectionDefault.js +3 -3
- package/dist/esm/components/common/ResourcedEmoji.js +4 -12
- package/dist/esm/components/picker/EmojiPickerComponent.js +1 -1
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +3 -3
- package/dist/esm/util/analytics/analytics.js +26 -5
- package/dist/esm/util/analytics/index.js +1 -1
- package/dist/esm/util/is-ssr.js +14 -0
- package/dist/types/components/common/ResourcedEmoji.d.ts +1 -1
- package/dist/types/util/analytics/analytics.d.ts +6 -4
- package/dist/types/util/analytics/index.d.ts +1 -1
- package/dist/types/util/is-ssr.d.ts +1 -0
- package/dist/types-ts4.5/components/common/ResourcedEmoji.d.ts +1 -1
- package/dist/types-ts4.5/util/analytics/analytics.d.ts +6 -4
- package/dist/types-ts4.5/util/analytics/index.d.ts +1 -1
- package/dist/types-ts4.5/util/is-ssr.d.ts +1 -0
- package/package.json +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @atlaskit/emoji
|
|
2
2
|
|
|
3
|
+
## 67.8.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`b0c0a2b36fb8e`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/b0c0a2b36fb8e) -
|
|
8
|
+
Add a feature gate that can bypass the sampling rate of rendered emoji performance metrics for
|
|
9
|
+
selected tenants, allowing better measurements for those tenants
|
|
10
|
+
|
|
11
|
+
## 67.8.6
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#151665](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/151665)
|
|
16
|
+
[`959c5fa5fc8b4`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/959c5fa5fc8b4) -
|
|
17
|
+
Add emoji attributes to recordEmojiSelection events
|
|
18
|
+
|
|
3
19
|
## 67.8.5
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -25,6 +25,7 @@ var _browserSupport = _interopRequireDefault(require("../../util/browser-support
|
|
|
25
25
|
var _useInView3 = require("../../hooks/useInView");
|
|
26
26
|
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
27
27
|
var _DeletableEmojiTooltipContent = require("./DeletableEmojiTooltipContent");
|
|
28
|
+
var _isSsr = require("../../util/is-ssr");
|
|
28
29
|
var _excluded = ["emoji", "fitToHeight", "selected", "selectOnHover", "className", "showTooltip", "showDelete", "shouldBeInteractive", "tabIndex", "onSelected", "onMouseMove", "onFocus", "onDelete", "onLoadError", "onLoadSuccess", "disableLazyLoad", "autoWidth", "children", "type", "editorEmoji"];
|
|
29
30
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
30
31
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -171,7 +172,8 @@ var ImageEmoji = exports.ImageEmoji = function ImageEmoji(props) {
|
|
|
171
172
|
if (fitToHeight && width && height) {
|
|
172
173
|
// Presize image, to prevent reflow due to size changes after loading
|
|
173
174
|
sizing = {
|
|
174
|
-
|
|
175
|
+
// Size of <img> needs to be deterministic when rendered on server-side. Auto will cause width to be 0 before image is loaded.
|
|
176
|
+
width: autoWidth && !(0, _isSsr.isSSR)() ? 'auto' : fitToHeight / height * width,
|
|
175
177
|
height: fitToHeight
|
|
176
178
|
};
|
|
177
179
|
}
|
|
@@ -20,10 +20,10 @@ var createRecordSelectionDefault = exports.createRecordSelectionDefault = functi
|
|
|
20
20
|
if (provider.recordSelection && emoji) {
|
|
21
21
|
_analytics.ufoExperiences['emoji-selection-recorded'].start();
|
|
22
22
|
provider.recordSelection(emoji).then(function () {
|
|
23
|
-
fireAnalytics && fireAnalytics(_analytics.
|
|
23
|
+
fireAnalytics && fireAnalytics((0, _analytics.recordSucceededEmoji)(emoji));
|
|
24
24
|
_analytics.ufoExperiences['emoji-selection-recorded'].success();
|
|
25
25
|
}).catch(function (error) {
|
|
26
|
-
fireAnalytics && fireAnalytics(_analytics.
|
|
26
|
+
fireAnalytics && fireAnalytics((0, _analytics.recordFailedEmoji)(emoji));
|
|
27
27
|
_analytics.ufoExperiences['emoji-selection-recorded'].failure({
|
|
28
28
|
metadata: {
|
|
29
29
|
error: (0, _analytics2.extractErrorInfo)(error),
|
|
@@ -1,30 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var
|
|
9
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
10
|
+
var _ResourcedEmojiComponent = require("./ResourcedEmojiComponent");
|
|
11
11
|
var _UfoErrorBoundary = require("./UfoErrorBoundary");
|
|
12
12
|
var _analytics = require("../../util/analytics");
|
|
13
13
|
var _constants = require("../../util/constants");
|
|
14
14
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
15
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != (
|
|
16
|
-
var ResourcedEmojiComponent = (0, _reactLoadable.default)({
|
|
17
|
-
loader: function loader() {
|
|
18
|
-
return Promise.resolve().then(function () {
|
|
19
|
-
return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_resourcedEmojiComponent" */'./ResourcedEmojiComponent'));
|
|
20
|
-
}).then(function (component) {
|
|
21
|
-
return component.ResourcedEmojiComponent;
|
|
22
|
-
});
|
|
23
|
-
},
|
|
24
|
-
loading: function loading() {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
28
16
|
var ResourcedEmoji = function ResourcedEmoji(props) {
|
|
29
17
|
var emojiId = props.emojiId,
|
|
30
18
|
optimisticImageURL = props.optimisticImageURL;
|
|
@@ -32,8 +20,9 @@ var ResourcedEmoji = function ResourcedEmoji(props) {
|
|
|
32
20
|
if (!emojiId) {
|
|
33
21
|
return;
|
|
34
22
|
}
|
|
23
|
+
var shouldAlwaysSample = (0, _platformFeatureFlags.fg)('platform_always_sample_rendered_emoji');
|
|
35
24
|
(0, _analytics.sampledUfoRenderedEmoji)(emojiId).start({
|
|
36
|
-
samplingRate: _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
25
|
+
samplingRate: shouldAlwaysSample ? 1 : _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
37
26
|
});
|
|
38
27
|
_analytics.ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName).addMetadata({
|
|
39
28
|
source: 'ResourcedEmoji',
|
|
@@ -51,6 +40,6 @@ var ResourcedEmoji = function ResourcedEmoji(props) {
|
|
|
51
40
|
}, [emojiId, optimisticImageURL]);
|
|
52
41
|
return /*#__PURE__*/_react.default.createElement(_UfoErrorBoundary.UfoErrorBoundary, {
|
|
53
42
|
experiences: [_analytics.ufoExperiences['emoji-rendered'].getInstance(props.emojiId.id || props.emojiId.shortName)]
|
|
54
|
-
}, /*#__PURE__*/_react.default.createElement(ResourcedEmojiComponent, props));
|
|
43
|
+
}, /*#__PURE__*/_react.default.createElement(_ResourcedEmojiComponent.ResourcedEmojiComponent, props));
|
|
55
44
|
};
|
|
56
45
|
var _default = exports.default = ResourcedEmoji;
|
|
@@ -298,7 +298,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
298
298
|
}, [disableCategories, emojiPickerList, emojiProvider, fireAnalytics, selectedTone]);
|
|
299
299
|
var recordUsageOnSelection = (0, _react.useMemo)(function () {
|
|
300
300
|
return (0, _RecordSelectionDefault.createRecordSelectionDefault)(emojiProvider, onSelectWrapper, function (analytic) {
|
|
301
|
-
return fireAnalytics(analytic(
|
|
301
|
+
return fireAnalytics(analytic(_types.SearchSourceTypes.PICKER));
|
|
302
302
|
});
|
|
303
303
|
}, [emojiProvider, fireAnalytics, onSelectWrapper]);
|
|
304
304
|
var formattedErrorMessage = (0, _react.useMemo)(function () {
|
|
@@ -118,7 +118,7 @@ var EmojiTypeAheadComponent = exports.default = /*#__PURE__*/function (_PureComp
|
|
|
118
118
|
var matchIndex = uniqueExactShortNameMatchIndex(result, query);
|
|
119
119
|
if (matchIndex !== undefined) {
|
|
120
120
|
var onSelect = (0, _RecordSelectionDefault.createRecordSelectionDefault)(_this.props.emojiProvider, _this.props.onSelection, function (analytic) {
|
|
121
|
-
return _this.fireAnalyticsEvent(analytic(
|
|
121
|
+
return _this.fireAnalyticsEvent(analytic(_types.SearchSourceTypes.TYPEAHEAD));
|
|
122
122
|
});
|
|
123
123
|
_this.fireSelectionEvent(result.emojis[matchIndex], true);
|
|
124
124
|
onSelect((0, _typeHelpers.toEmojiId)(result.emojis[matchIndex]), result.emojis[matchIndex]);
|
|
@@ -255,7 +255,7 @@ var EmojiTypeAheadComponent = exports.default = /*#__PURE__*/function (_PureComp
|
|
|
255
255
|
onSelection(emojiId, emoji, event);
|
|
256
256
|
}
|
|
257
257
|
}, function (analytic) {
|
|
258
|
-
return _this2.fireAnalyticsEvent(analytic(
|
|
258
|
+
return _this2.fireAnalyticsEvent(analytic(_types.SearchSourceTypes.TYPEAHEAD));
|
|
259
259
|
});
|
|
260
260
|
var _this$state = this.state,
|
|
261
261
|
visible = _this$state.visible,
|
|
@@ -4,9 +4,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.uploadSucceededEvent = exports.uploadFailedEvent = exports.uploadConfirmButton = exports.uploadCancelButton = exports.uploadBeginButton = exports.typeaheadSelectedEvent = exports.typeaheadRenderedEvent = exports.typeaheadCancelledEvent = exports.toneSelectorOpenedEvent = exports.toneSelectorClosedEvent = exports.toneSelectedEvent = exports.selectedFileEvent = exports.recordSucceeded = exports.recordSelectionSucceededSli = exports.recordSelectionFailedSli = exports.recordFailed = exports.pickerSearchedEvent = exports.pickerClickedEvent = exports.openedPickerEvent = exports.extractErrorInfo = exports.deleteConfirmEvent = exports.deleteCancelEvent = exports.deleteBeginEvent = exports.createAndFireEventInElementsChannel = exports.closedPickerEvent = exports.categoryClickedEvent = void 0;
|
|
7
|
+
exports.uploadSucceededEvent = exports.uploadFailedEvent = exports.uploadConfirmButton = exports.uploadCancelButton = exports.uploadBeginButton = exports.typeaheadSelectedEvent = exports.typeaheadRenderedEvent = exports.typeaheadCancelledEvent = exports.toneSelectorOpenedEvent = exports.toneSelectorClosedEvent = exports.toneSelectedEvent = exports.selectedFileEvent = exports.recordSucceededEmoji = exports.recordSucceeded = exports.recordSelectionSucceededSli = exports.recordSelectionFailedSli = exports.recordFailedEmoji = exports.recordFailed = exports.pickerSearchedEvent = exports.pickerClickedEvent = exports.openedPickerEvent = exports.extractErrorInfo = exports.deleteConfirmEvent = exports.deleteCancelEvent = exports.deleteBeginEvent = exports.createAndFireEventInElementsChannel = exports.closedPickerEvent = exports.categoryClickedEvent = void 0;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
10
|
+
var _types = require("../../types");
|
|
10
11
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
12
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
13
|
var createAndFireEventInElementsChannel = exports.createAndFireEventInElementsChannel = (0, _analyticsNext.createAndFireEvent)('fabric-elements');
|
|
@@ -19,15 +20,35 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
|
|
|
19
20
|
actionSubjectId: actionSubjectId,
|
|
20
21
|
attributes: _objectSpread({
|
|
21
22
|
packageName: "@atlaskit/emoji",
|
|
22
|
-
packageVersion: "67.8.
|
|
23
|
+
packageVersion: "67.8.7"
|
|
23
24
|
}, attributes)
|
|
24
25
|
};
|
|
25
26
|
};
|
|
27
|
+
var recordSucceededEmoji = exports.recordSucceededEmoji = function recordSucceededEmoji(emoji) {
|
|
28
|
+
return function (source) {
|
|
29
|
+
return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
|
|
30
|
+
source: source,
|
|
31
|
+
emojiId: emoji === null || emoji === void 0 ? void 0 : emoji.id,
|
|
32
|
+
emojiType: emoji === null || emoji === void 0 ? void 0 : emoji.type,
|
|
33
|
+
emojiCategory: emoji === null || emoji === void 0 ? void 0 : emoji.category
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
};
|
|
26
37
|
var recordSucceeded = exports.recordSucceeded = function recordSucceeded(source) {
|
|
27
38
|
return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
|
|
28
39
|
source: source
|
|
29
40
|
});
|
|
30
41
|
};
|
|
42
|
+
var recordFailedEmoji = exports.recordFailedEmoji = function recordFailedEmoji(emoji) {
|
|
43
|
+
return function (source) {
|
|
44
|
+
return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
|
|
45
|
+
source: source,
|
|
46
|
+
emojiId: emoji === null || emoji === void 0 ? void 0 : emoji.id,
|
|
47
|
+
emojiType: emoji === null || emoji === void 0 ? void 0 : emoji.type,
|
|
48
|
+
emojiCategory: emoji === null || emoji === void 0 ? void 0 : emoji.category
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
};
|
|
31
52
|
var recordFailed = exports.recordFailed = function recordFailed(source) {
|
|
32
53
|
return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
|
|
33
54
|
source: source
|
|
@@ -168,19 +189,19 @@ var typeaheadRenderedEvent = exports.typeaheadRenderedEvent = function typeahead
|
|
|
168
189
|
};
|
|
169
190
|
|
|
170
191
|
// it's used in editor typeahead to fire success record analytics
|
|
171
|
-
var recordSelectionSucceededSli = exports.recordSelectionSucceededSli = function recordSelectionSucceededSli(options) {
|
|
192
|
+
var recordSelectionSucceededSli = exports.recordSelectionSucceededSli = function recordSelectionSucceededSli(emoji, options) {
|
|
172
193
|
return function () {
|
|
173
194
|
if (options && options.createAnalyticsEvent) {
|
|
174
|
-
(0, _analyticsNext.createAndFireEvent)('editor')(
|
|
195
|
+
(0, _analyticsNext.createAndFireEvent)('editor')(recordSucceededEmoji(emoji)(_types.SearchSourceTypes.TYPEAHEAD))(options.createAnalyticsEvent);
|
|
175
196
|
}
|
|
176
197
|
};
|
|
177
198
|
};
|
|
178
199
|
|
|
179
200
|
// it's used in editor typeahead to fire failure record analytics
|
|
180
|
-
var recordSelectionFailedSli = exports.recordSelectionFailedSli = function recordSelectionFailedSli(options) {
|
|
201
|
+
var recordSelectionFailedSli = exports.recordSelectionFailedSli = function recordSelectionFailedSli(emoji, options) {
|
|
181
202
|
return function (err) {
|
|
182
203
|
if (options && options.createAnalyticsEvent) {
|
|
183
|
-
(0, _analyticsNext.createAndFireEvent)('editor')(
|
|
204
|
+
(0, _analyticsNext.createAndFireEvent)('editor')(recordFailedEmoji(emoji)(_types.SearchSourceTypes.TYPEAHEAD))(options.createAnalyticsEvent);
|
|
184
205
|
}
|
|
185
206
|
return Promise.reject(err);
|
|
186
207
|
};
|
|
@@ -75,6 +75,12 @@ Object.defineProperty(exports, "recordFailed", {
|
|
|
75
75
|
return _analytics.recordFailed;
|
|
76
76
|
}
|
|
77
77
|
});
|
|
78
|
+
Object.defineProperty(exports, "recordFailedEmoji", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function get() {
|
|
81
|
+
return _analytics.recordFailedEmoji;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
78
84
|
Object.defineProperty(exports, "recordSelectionFailedSli", {
|
|
79
85
|
enumerable: true,
|
|
80
86
|
get: function get() {
|
|
@@ -93,6 +99,12 @@ Object.defineProperty(exports, "recordSucceeded", {
|
|
|
93
99
|
return _analytics.recordSucceeded;
|
|
94
100
|
}
|
|
95
101
|
});
|
|
102
|
+
Object.defineProperty(exports, "recordSucceededEmoji", {
|
|
103
|
+
enumerable: true,
|
|
104
|
+
get: function get() {
|
|
105
|
+
return _analytics.recordSucceededEmoji;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
96
108
|
Object.defineProperty(exports, "sampledUfoRenderedEmoji", {
|
|
97
109
|
enumerable: true,
|
|
98
110
|
get: function get() {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isSSR = isSSR;
|
|
7
|
+
function isSSR() {
|
|
8
|
+
try {
|
|
9
|
+
var _process;
|
|
10
|
+
return Boolean(
|
|
11
|
+
// In most places there is no document when running on server-side
|
|
12
|
+
typeof document === 'undefined' ||
|
|
13
|
+
// When SSRing editor with full cycle mode we define the document
|
|
14
|
+
// Check Confluence specific environment variable
|
|
15
|
+
typeof process !== 'undefined' && ((_process = process) === null || _process === void 0 || (_process = _process.env) === null || _process === void 0 ? void 0 : _process.REACT_SSR));
|
|
16
|
+
} catch (e) {
|
|
17
|
+
// Catch possible error that might occur and just return false
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -19,6 +19,7 @@ import browserSupport from '../../util/browser-support';
|
|
|
19
19
|
import { useInView } from '../../hooks/useInView';
|
|
20
20
|
import { hasUfoMarked } from '../../util/analytics/ufoExperiences';
|
|
21
21
|
import { DeletableEmojiTooltipContent, DeletableEmojiTooltipContentForScreenReader } from './DeletableEmojiTooltipContent';
|
|
22
|
+
import { isSSR } from '../../util/is-ssr';
|
|
22
23
|
const handleMouseDown = (props, event) => {
|
|
23
24
|
// Clicked emoji delete button
|
|
24
25
|
if (event.target instanceof Element && event.target.getAttribute('aria-label') === deleteEmojiLabel) {
|
|
@@ -171,7 +172,8 @@ export const ImageEmoji = props => {
|
|
|
171
172
|
if (fitToHeight && width && height) {
|
|
172
173
|
// Presize image, to prevent reflow due to size changes after loading
|
|
173
174
|
sizing = {
|
|
174
|
-
|
|
175
|
+
// Size of <img> needs to be deterministic when rendered on server-side. Auto will cause width to be 0 before image is loaded.
|
|
176
|
+
width: autoWidth && !isSSR() ? 'auto' : fitToHeight / height * width,
|
|
175
177
|
height: fitToHeight
|
|
176
178
|
};
|
|
177
179
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { recordFailedEmoji, recordSucceededEmoji, ufoExperiences } from '../../util/analytics';
|
|
2
2
|
import { extractErrorInfo } from '../../util/analytics/analytics';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -15,10 +15,10 @@ export const createRecordSelectionDefault = (provider, onSelect, fireAnalytics)
|
|
|
15
15
|
if (provider.recordSelection && emoji) {
|
|
16
16
|
ufoExperiences['emoji-selection-recorded'].start();
|
|
17
17
|
provider.recordSelection(emoji).then(() => {
|
|
18
|
-
fireAnalytics && fireAnalytics(
|
|
18
|
+
fireAnalytics && fireAnalytics(recordSucceededEmoji(emoji));
|
|
19
19
|
ufoExperiences['emoji-selection-recorded'].success();
|
|
20
20
|
}).catch(error => {
|
|
21
|
-
fireAnalytics && fireAnalytics(
|
|
21
|
+
fireAnalytics && fireAnalytics(recordFailedEmoji(emoji));
|
|
22
22
|
ufoExperiences['emoji-selection-recorded'].failure({
|
|
23
23
|
metadata: {
|
|
24
24
|
error: extractErrorInfo(error),
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
|
-
import
|
|
2
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
|
+
import { ResourcedEmojiComponent } from './ResourcedEmojiComponent';
|
|
3
4
|
import { UfoErrorBoundary } from './UfoErrorBoundary';
|
|
4
5
|
import { sampledUfoRenderedEmoji, ufoExperiences } from '../../util/analytics';
|
|
5
6
|
import { SAMPLING_RATE_EMOJI_RENDERED_EXP } from '../../util/constants';
|
|
6
|
-
const ResourcedEmojiComponent = Loadable({
|
|
7
|
-
loader: () => import( /* webpackChunkName: "@atlaskit-internal_resourcedEmojiComponent" */'./ResourcedEmojiComponent').then(component => component.ResourcedEmojiComponent),
|
|
8
|
-
loading: () => null
|
|
9
|
-
});
|
|
10
7
|
const ResourcedEmoji = props => {
|
|
11
8
|
const {
|
|
12
9
|
emojiId,
|
|
@@ -16,8 +13,9 @@ const ResourcedEmoji = props => {
|
|
|
16
13
|
if (!emojiId) {
|
|
17
14
|
return;
|
|
18
15
|
}
|
|
16
|
+
var shouldAlwaysSample = fg('platform_always_sample_rendered_emoji');
|
|
19
17
|
sampledUfoRenderedEmoji(emojiId).start({
|
|
20
|
-
samplingRate: SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
18
|
+
samplingRate: shouldAlwaysSample ? 1 : SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
21
19
|
});
|
|
22
20
|
ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName).addMetadata({
|
|
23
21
|
source: 'ResourcedEmoji',
|
|
@@ -246,7 +246,7 @@ const EmojiPickerComponent = ({
|
|
|
246
246
|
}
|
|
247
247
|
});
|
|
248
248
|
}, [disableCategories, emojiPickerList, emojiProvider, fireAnalytics, selectedTone]);
|
|
249
|
-
const recordUsageOnSelection = useMemo(() => createRecordSelectionDefault(emojiProvider, onSelectWrapper, analytic => fireAnalytics(analytic(
|
|
249
|
+
const recordUsageOnSelection = useMemo(() => createRecordSelectionDefault(emojiProvider, onSelectWrapper, analytic => fireAnalytics(analytic(SearchSourceTypes.PICKER))), [emojiProvider, fireAnalytics, onSelectWrapper]);
|
|
250
250
|
const formattedErrorMessage = useMemo(() => uploadErrorMessage ? jsx(FormattedMessage, uploadErrorMessage) : null, [uploadErrorMessage]);
|
|
251
251
|
const onFileChooserClicked = useCallback(() => {
|
|
252
252
|
fireAnalytics(selectedFileEvent());
|
|
@@ -10,7 +10,7 @@ import { PureComponent } from 'react';
|
|
|
10
10
|
import { flushSync } from 'react-dom';
|
|
11
11
|
import uuid from 'uuid';
|
|
12
12
|
import { EmojiCommonProvider } from '../../context/EmojiCommonProvider';
|
|
13
|
-
import { SearchSort } from '../../types';
|
|
13
|
+
import { SearchSort, SearchSourceTypes } from '../../types';
|
|
14
14
|
import { typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, ufoExperiences } from '../../util/analytics';
|
|
15
15
|
import { defaultListLimit } from '../../util/constants';
|
|
16
16
|
import debug from '../../util/logger';
|
|
@@ -91,7 +91,7 @@ export default class EmojiTypeAheadComponent extends PureComponent {
|
|
|
91
91
|
if (isFullShortName(query)) {
|
|
92
92
|
const matchIndex = uniqueExactShortNameMatchIndex(result, query);
|
|
93
93
|
if (matchIndex !== undefined) {
|
|
94
|
-
const onSelect = createRecordSelectionDefault(this.props.emojiProvider, this.props.onSelection, analytic => this.fireAnalyticsEvent(analytic(
|
|
94
|
+
const onSelect = createRecordSelectionDefault(this.props.emojiProvider, this.props.onSelection, analytic => this.fireAnalyticsEvent(analytic(SearchSourceTypes.TYPEAHEAD)));
|
|
95
95
|
this.fireSelectionEvent(result.emojis[matchIndex], true);
|
|
96
96
|
onSelect(toEmojiId(result.emojis[matchIndex]), result.emojis[matchIndex]);
|
|
97
97
|
}
|
|
@@ -221,7 +221,7 @@ export default class EmojiTypeAheadComponent extends PureComponent {
|
|
|
221
221
|
if (onSelection) {
|
|
222
222
|
onSelection(emojiId, emoji, event);
|
|
223
223
|
}
|
|
224
|
-
}, analytic => this.fireAnalyticsEvent(analytic(
|
|
224
|
+
}, analytic => this.fireAnalyticsEvent(analytic(SearchSourceTypes.TYPEAHEAD)));
|
|
225
225
|
const {
|
|
226
226
|
visible,
|
|
227
227
|
emojis,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createAndFireEvent } from '@atlaskit/analytics-next';
|
|
2
|
+
import { SearchSourceTypes } from '../../types';
|
|
2
3
|
export const createAndFireEventInElementsChannel = createAndFireEvent('fabric-elements');
|
|
3
4
|
const createEvent = (eventType, action, actionSubject, actionSubjectId, attributes = {}) => ({
|
|
4
5
|
eventType,
|
|
@@ -7,15 +8,31 @@ const createEvent = (eventType, action, actionSubject, actionSubjectId, attribut
|
|
|
7
8
|
actionSubjectId,
|
|
8
9
|
attributes: {
|
|
9
10
|
packageName: "@atlaskit/emoji",
|
|
10
|
-
packageVersion: "67.8.
|
|
11
|
+
packageVersion: "67.8.7",
|
|
11
12
|
...attributes
|
|
12
13
|
}
|
|
13
14
|
});
|
|
15
|
+
export const recordSucceededEmoji = emoji => source => {
|
|
16
|
+
return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
|
|
17
|
+
source,
|
|
18
|
+
emojiId: emoji === null || emoji === void 0 ? void 0 : emoji.id,
|
|
19
|
+
emojiType: emoji === null || emoji === void 0 ? void 0 : emoji.type,
|
|
20
|
+
emojiCategory: emoji === null || emoji === void 0 ? void 0 : emoji.category
|
|
21
|
+
});
|
|
22
|
+
};
|
|
14
23
|
export const recordSucceeded = source => {
|
|
15
24
|
return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
|
|
16
25
|
source
|
|
17
26
|
});
|
|
18
27
|
};
|
|
28
|
+
export const recordFailedEmoji = emoji => source => {
|
|
29
|
+
return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
|
|
30
|
+
source,
|
|
31
|
+
emojiId: emoji === null || emoji === void 0 ? void 0 : emoji.id,
|
|
32
|
+
emojiType: emoji === null || emoji === void 0 ? void 0 : emoji.type,
|
|
33
|
+
emojiCategory: emoji === null || emoji === void 0 ? void 0 : emoji.category
|
|
34
|
+
});
|
|
35
|
+
};
|
|
19
36
|
export const recordFailed = source => {
|
|
20
37
|
return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
|
|
21
38
|
source
|
|
@@ -109,16 +126,16 @@ export const typeaheadRenderedEvent = (duration, query, emojiList) => createEven
|
|
|
109
126
|
});
|
|
110
127
|
|
|
111
128
|
// it's used in editor typeahead to fire success record analytics
|
|
112
|
-
export const recordSelectionSucceededSli = options => () => {
|
|
129
|
+
export const recordSelectionSucceededSli = (emoji, options) => () => {
|
|
113
130
|
if (options && options.createAnalyticsEvent) {
|
|
114
|
-
createAndFireEvent('editor')(
|
|
131
|
+
createAndFireEvent('editor')(recordSucceededEmoji(emoji)(SearchSourceTypes.TYPEAHEAD))(options.createAnalyticsEvent);
|
|
115
132
|
}
|
|
116
133
|
};
|
|
117
134
|
|
|
118
135
|
// it's used in editor typeahead to fire failure record analytics
|
|
119
|
-
export const recordSelectionFailedSli = options => err => {
|
|
136
|
+
export const recordSelectionFailedSli = (emoji, options) => err => {
|
|
120
137
|
if (options && options.createAnalyticsEvent) {
|
|
121
|
-
createAndFireEvent('editor')(
|
|
138
|
+
createAndFireEvent('editor')(recordFailedEmoji(emoji)(SearchSourceTypes.TYPEAHEAD))(options.createAnalyticsEvent);
|
|
122
139
|
}
|
|
123
140
|
return Promise.reject(err);
|
|
124
141
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ufoExperiencesSampled, clearSampled, isExperienceSampled, withSampling } from './samplingUfo';
|
|
2
|
-
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordSucceeded, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent } from './analytics';
|
|
2
|
+
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordFailedEmoji, recordSucceeded, recordSucceededEmoji, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent } from './analytics';
|
|
3
3
|
export { sampledUfoRenderedEmoji, ufoExperiences } from './ufoExperiences';
|
|
4
4
|
export { useSampledUFOComponentExperience } from './useSampledUFOComponentExperience';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function isSSR() {
|
|
2
|
+
try {
|
|
3
|
+
var _process, _process$env;
|
|
4
|
+
return Boolean(
|
|
5
|
+
// In most places there is no document when running on server-side
|
|
6
|
+
typeof document === 'undefined' ||
|
|
7
|
+
// When SSRing editor with full cycle mode we define the document
|
|
8
|
+
// Check Confluence specific environment variable
|
|
9
|
+
typeof process !== 'undefined' && ((_process = process) === null || _process === void 0 ? void 0 : (_process$env = _process.env) === null || _process$env === void 0 ? void 0 : _process$env.REACT_SSR));
|
|
10
|
+
} catch (e) {
|
|
11
|
+
// Catch possible error that might occur and just return false
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -25,6 +25,7 @@ import browserSupport from '../../util/browser-support';
|
|
|
25
25
|
import { useInView } from '../../hooks/useInView';
|
|
26
26
|
import { hasUfoMarked } from '../../util/analytics/ufoExperiences';
|
|
27
27
|
import { DeletableEmojiTooltipContent, DeletableEmojiTooltipContentForScreenReader } from './DeletableEmojiTooltipContent';
|
|
28
|
+
import { isSSR } from '../../util/is-ssr';
|
|
28
29
|
var handleMouseDown = function handleMouseDown(props, event) {
|
|
29
30
|
// Clicked emoji delete button
|
|
30
31
|
if (event.target instanceof Element && event.target.getAttribute('aria-label') === deleteEmojiLabel) {
|
|
@@ -163,7 +164,8 @@ export var ImageEmoji = function ImageEmoji(props) {
|
|
|
163
164
|
if (fitToHeight && width && height) {
|
|
164
165
|
// Presize image, to prevent reflow due to size changes after loading
|
|
165
166
|
sizing = {
|
|
166
|
-
|
|
167
|
+
// Size of <img> needs to be deterministic when rendered on server-side. Auto will cause width to be 0 before image is loaded.
|
|
168
|
+
width: autoWidth && !isSSR() ? 'auto' : fitToHeight / height * width,
|
|
167
169
|
height: fitToHeight
|
|
168
170
|
};
|
|
169
171
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { recordFailedEmoji, recordSucceededEmoji, ufoExperiences } from '../../util/analytics';
|
|
2
2
|
import { extractErrorInfo } from '../../util/analytics/analytics';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -15,10 +15,10 @@ export var createRecordSelectionDefault = function createRecordSelectionDefault(
|
|
|
15
15
|
if (provider.recordSelection && emoji) {
|
|
16
16
|
ufoExperiences['emoji-selection-recorded'].start();
|
|
17
17
|
provider.recordSelection(emoji).then(function () {
|
|
18
|
-
fireAnalytics && fireAnalytics(
|
|
18
|
+
fireAnalytics && fireAnalytics(recordSucceededEmoji(emoji));
|
|
19
19
|
ufoExperiences['emoji-selection-recorded'].success();
|
|
20
20
|
}).catch(function (error) {
|
|
21
|
-
fireAnalytics && fireAnalytics(
|
|
21
|
+
fireAnalytics && fireAnalytics(recordFailedEmoji(emoji));
|
|
22
22
|
ufoExperiences['emoji-selection-recorded'].failure({
|
|
23
23
|
metadata: {
|
|
24
24
|
error: extractErrorInfo(error),
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
|
-
import
|
|
2
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
|
+
import { ResourcedEmojiComponent } from './ResourcedEmojiComponent';
|
|
3
4
|
import { UfoErrorBoundary } from './UfoErrorBoundary';
|
|
4
5
|
import { sampledUfoRenderedEmoji, ufoExperiences } from '../../util/analytics';
|
|
5
6
|
import { SAMPLING_RATE_EMOJI_RENDERED_EXP } from '../../util/constants';
|
|
6
|
-
var ResourcedEmojiComponent = Loadable({
|
|
7
|
-
loader: function loader() {
|
|
8
|
-
return import( /* webpackChunkName: "@atlaskit-internal_resourcedEmojiComponent" */'./ResourcedEmojiComponent').then(function (component) {
|
|
9
|
-
return component.ResourcedEmojiComponent;
|
|
10
|
-
});
|
|
11
|
-
},
|
|
12
|
-
loading: function loading() {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
7
|
var ResourcedEmoji = function ResourcedEmoji(props) {
|
|
17
8
|
var emojiId = props.emojiId,
|
|
18
9
|
optimisticImageURL = props.optimisticImageURL;
|
|
@@ -20,8 +11,9 @@ var ResourcedEmoji = function ResourcedEmoji(props) {
|
|
|
20
11
|
if (!emojiId) {
|
|
21
12
|
return;
|
|
22
13
|
}
|
|
14
|
+
var shouldAlwaysSample = fg('platform_always_sample_rendered_emoji');
|
|
23
15
|
sampledUfoRenderedEmoji(emojiId).start({
|
|
24
|
-
samplingRate: SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
16
|
+
samplingRate: shouldAlwaysSample ? 1 : SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
25
17
|
});
|
|
26
18
|
ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName).addMetadata({
|
|
27
19
|
source: 'ResourcedEmoji',
|
|
@@ -293,7 +293,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
293
293
|
}, [disableCategories, emojiPickerList, emojiProvider, fireAnalytics, selectedTone]);
|
|
294
294
|
var recordUsageOnSelection = useMemo(function () {
|
|
295
295
|
return createRecordSelectionDefault(emojiProvider, onSelectWrapper, function (analytic) {
|
|
296
|
-
return fireAnalytics(analytic(
|
|
296
|
+
return fireAnalytics(analytic(SearchSourceTypes.PICKER));
|
|
297
297
|
});
|
|
298
298
|
}, [emojiProvider, fireAnalytics, onSelectWrapper]);
|
|
299
299
|
var formattedErrorMessage = useMemo(function () {
|
|
@@ -21,7 +21,7 @@ import { PureComponent } from 'react';
|
|
|
21
21
|
import { flushSync } from 'react-dom';
|
|
22
22
|
import uuid from 'uuid';
|
|
23
23
|
import { EmojiCommonProvider } from '../../context/EmojiCommonProvider';
|
|
24
|
-
import { SearchSort } from '../../types';
|
|
24
|
+
import { SearchSort, SearchSourceTypes } from '../../types';
|
|
25
25
|
import { typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, ufoExperiences } from '../../util/analytics';
|
|
26
26
|
import { defaultListLimit } from '../../util/constants';
|
|
27
27
|
import debug from '../../util/logger';
|
|
@@ -114,7 +114,7 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
114
114
|
var matchIndex = uniqueExactShortNameMatchIndex(result, query);
|
|
115
115
|
if (matchIndex !== undefined) {
|
|
116
116
|
var onSelect = createRecordSelectionDefault(_this.props.emojiProvider, _this.props.onSelection, function (analytic) {
|
|
117
|
-
return _this.fireAnalyticsEvent(analytic(
|
|
117
|
+
return _this.fireAnalyticsEvent(analytic(SearchSourceTypes.TYPEAHEAD));
|
|
118
118
|
});
|
|
119
119
|
_this.fireSelectionEvent(result.emojis[matchIndex], true);
|
|
120
120
|
onSelect(toEmojiId(result.emojis[matchIndex]), result.emojis[matchIndex]);
|
|
@@ -251,7 +251,7 @@ var EmojiTypeAheadComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
251
251
|
onSelection(emojiId, emoji, event);
|
|
252
252
|
}
|
|
253
253
|
}, function (analytic) {
|
|
254
|
-
return _this2.fireAnalyticsEvent(analytic(
|
|
254
|
+
return _this2.fireAnalyticsEvent(analytic(SearchSourceTypes.TYPEAHEAD));
|
|
255
255
|
});
|
|
256
256
|
var _this$state = this.state,
|
|
257
257
|
visible = _this$state.visible,
|
|
@@ -2,6 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
3
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
4
|
import { createAndFireEvent } from '@atlaskit/analytics-next';
|
|
5
|
+
import { SearchSourceTypes } from '../../types';
|
|
5
6
|
export var createAndFireEventInElementsChannel = createAndFireEvent('fabric-elements');
|
|
6
7
|
var createEvent = function createEvent(eventType, action, actionSubject, actionSubjectId) {
|
|
7
8
|
var attributes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
|
@@ -12,15 +13,35 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
|
|
|
12
13
|
actionSubjectId: actionSubjectId,
|
|
13
14
|
attributes: _objectSpread({
|
|
14
15
|
packageName: "@atlaskit/emoji",
|
|
15
|
-
packageVersion: "67.8.
|
|
16
|
+
packageVersion: "67.8.7"
|
|
16
17
|
}, attributes)
|
|
17
18
|
};
|
|
18
19
|
};
|
|
20
|
+
export var recordSucceededEmoji = function recordSucceededEmoji(emoji) {
|
|
21
|
+
return function (source) {
|
|
22
|
+
return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
|
|
23
|
+
source: source,
|
|
24
|
+
emojiId: emoji === null || emoji === void 0 ? void 0 : emoji.id,
|
|
25
|
+
emojiType: emoji === null || emoji === void 0 ? void 0 : emoji.type,
|
|
26
|
+
emojiCategory: emoji === null || emoji === void 0 ? void 0 : emoji.category
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
};
|
|
19
30
|
export var recordSucceeded = function recordSucceeded(source) {
|
|
20
31
|
return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
|
|
21
32
|
source: source
|
|
22
33
|
});
|
|
23
34
|
};
|
|
35
|
+
export var recordFailedEmoji = function recordFailedEmoji(emoji) {
|
|
36
|
+
return function (source) {
|
|
37
|
+
return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
|
|
38
|
+
source: source,
|
|
39
|
+
emojiId: emoji === null || emoji === void 0 ? void 0 : emoji.id,
|
|
40
|
+
emojiType: emoji === null || emoji === void 0 ? void 0 : emoji.type,
|
|
41
|
+
emojiCategory: emoji === null || emoji === void 0 ? void 0 : emoji.category
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
};
|
|
24
45
|
export var recordFailed = function recordFailed(source) {
|
|
25
46
|
return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
|
|
26
47
|
source: source
|
|
@@ -161,19 +182,19 @@ export var typeaheadRenderedEvent = function typeaheadRenderedEvent(duration, qu
|
|
|
161
182
|
};
|
|
162
183
|
|
|
163
184
|
// it's used in editor typeahead to fire success record analytics
|
|
164
|
-
export var recordSelectionSucceededSli = function recordSelectionSucceededSli(options) {
|
|
185
|
+
export var recordSelectionSucceededSli = function recordSelectionSucceededSli(emoji, options) {
|
|
165
186
|
return function () {
|
|
166
187
|
if (options && options.createAnalyticsEvent) {
|
|
167
|
-
createAndFireEvent('editor')(
|
|
188
|
+
createAndFireEvent('editor')(recordSucceededEmoji(emoji)(SearchSourceTypes.TYPEAHEAD))(options.createAnalyticsEvent);
|
|
168
189
|
}
|
|
169
190
|
};
|
|
170
191
|
};
|
|
171
192
|
|
|
172
193
|
// it's used in editor typeahead to fire failure record analytics
|
|
173
|
-
export var recordSelectionFailedSli = function recordSelectionFailedSli(options) {
|
|
194
|
+
export var recordSelectionFailedSli = function recordSelectionFailedSli(emoji, options) {
|
|
174
195
|
return function (err) {
|
|
175
196
|
if (options && options.createAnalyticsEvent) {
|
|
176
|
-
createAndFireEvent('editor')(
|
|
197
|
+
createAndFireEvent('editor')(recordFailedEmoji(emoji)(SearchSourceTypes.TYPEAHEAD))(options.createAnalyticsEvent);
|
|
177
198
|
}
|
|
178
199
|
return Promise.reject(err);
|
|
179
200
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ufoExperiencesSampled, clearSampled, isExperienceSampled, withSampling } from './samplingUfo';
|
|
2
|
-
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordSucceeded, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent } from './analytics';
|
|
2
|
+
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordFailedEmoji, recordSucceeded, recordSucceededEmoji, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent } from './analytics';
|
|
3
3
|
export { sampledUfoRenderedEmoji, ufoExperiences } from './ufoExperiences';
|
|
4
4
|
export { useSampledUFOComponentExperience } from './useSampledUFOComponentExperience';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function isSSR() {
|
|
2
|
+
try {
|
|
3
|
+
var _process;
|
|
4
|
+
return Boolean(
|
|
5
|
+
// In most places there is no document when running on server-side
|
|
6
|
+
typeof document === 'undefined' ||
|
|
7
|
+
// When SSRing editor with full cycle mode we define the document
|
|
8
|
+
// Check Confluence specific environment variable
|
|
9
|
+
typeof process !== 'undefined' && ((_process = process) === null || _process === void 0 || (_process = _process.env) === null || _process === void 0 ? void 0 : _process.REACT_SSR));
|
|
10
|
+
} catch (e) {
|
|
11
|
+
// Catch possible error that might occur and just return false
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type
|
|
2
|
+
import { type Props as ResourcedEmojiProps } from './ResourcedEmojiComponent';
|
|
3
3
|
export interface Props extends ResourcedEmojiProps {
|
|
4
4
|
}
|
|
5
5
|
declare const ResourcedEmoji: (props: React.PropsWithChildren<Props>) => JSX.Element;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type AnalyticsEventPayload, type CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
|
|
2
|
-
import type
|
|
2
|
+
import { type EmojiDescription, type OptionalEmojiDescription, SearchSourceTypes } from '../../types';
|
|
3
3
|
export declare const createAndFireEventInElementsChannel: (payload: AnalyticsEventPayload) => (createAnalyticsEvent: CreateUIAnalyticsEvent) => import("@atlaskit/analytics-next").UIAnalyticsEvent;
|
|
4
|
-
export type EmojiInsertionAnalytic = (source:
|
|
4
|
+
export type EmojiInsertionAnalytic = (source: SearchSourceTypes.PICKER | SearchSourceTypes.TYPEAHEAD) => AnalyticsEventPayload;
|
|
5
|
+
export declare const recordSucceededEmoji: (emoji: OptionalEmojiDescription) => (source: SearchSourceTypes) => AnalyticsEventPayload;
|
|
5
6
|
export declare const recordSucceeded: EmojiInsertionAnalytic;
|
|
7
|
+
export declare const recordFailedEmoji: (emoji: OptionalEmojiDescription) => (source: SearchSourceTypes) => AnalyticsEventPayload;
|
|
6
8
|
export declare const recordFailed: EmojiInsertionAnalytic;
|
|
7
9
|
interface Duration {
|
|
8
10
|
duration: number;
|
|
@@ -52,10 +54,10 @@ export declare const selectedFileEvent: () => AnalyticsEventPayload;
|
|
|
52
54
|
export declare const typeaheadCancelledEvent: (duration: number, query?: string, emojiList?: EmojiDescription[]) => AnalyticsEventPayload;
|
|
53
55
|
export declare const typeaheadSelectedEvent: (pressed: boolean, duration: number, emoji: EmojiDescription, emojiList?: EmojiDescription[], query?: string, exactMatch?: boolean) => AnalyticsEventPayload;
|
|
54
56
|
export declare const typeaheadRenderedEvent: (duration: number, query?: string, emojiList?: EmojiDescription[]) => AnalyticsEventPayload;
|
|
55
|
-
export declare const recordSelectionSucceededSli: (options?: {
|
|
57
|
+
export declare const recordSelectionSucceededSli: (emoji: OptionalEmojiDescription, options?: {
|
|
56
58
|
createAnalyticsEvent?: CreateUIAnalyticsEvent;
|
|
57
59
|
}) => () => void;
|
|
58
|
-
export declare const recordSelectionFailedSli: (options?: {
|
|
60
|
+
export declare const recordSelectionFailedSli: (emoji: OptionalEmojiDescription, options?: {
|
|
59
61
|
createAnalyticsEvent?: CreateUIAnalyticsEvent;
|
|
60
62
|
}) => (err: Error) => Promise<never>;
|
|
61
63
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ufoExperiencesSampled, clearSampled, isExperienceSampled, withSampling, } from './samplingUfo';
|
|
2
2
|
export type { UFOExperienceSampledRecords, WithSamplingUFOExperience } from './samplingUfo';
|
|
3
|
-
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordSucceeded, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent, } from './analytics';
|
|
3
|
+
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordFailedEmoji, recordSucceeded, recordSucceededEmoji, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent, } from './analytics';
|
|
4
4
|
export { sampledUfoRenderedEmoji, ufoExperiences } from './ufoExperiences';
|
|
5
5
|
export type { EmojiInsertionAnalytic } from './analytics';
|
|
6
6
|
export { useSampledUFOComponentExperience } from './useSampledUFOComponentExperience';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isSSR(): boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type
|
|
2
|
+
import { type Props as ResourcedEmojiProps } from './ResourcedEmojiComponent';
|
|
3
3
|
export interface Props extends ResourcedEmojiProps {
|
|
4
4
|
}
|
|
5
5
|
declare const ResourcedEmoji: (props: React.PropsWithChildren<Props>) => JSX.Element;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type AnalyticsEventPayload, type CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
|
|
2
|
-
import type
|
|
2
|
+
import { type EmojiDescription, type OptionalEmojiDescription, SearchSourceTypes } from '../../types';
|
|
3
3
|
export declare const createAndFireEventInElementsChannel: (payload: AnalyticsEventPayload) => (createAnalyticsEvent: CreateUIAnalyticsEvent) => import("@atlaskit/analytics-next").UIAnalyticsEvent;
|
|
4
|
-
export type EmojiInsertionAnalytic = (source:
|
|
4
|
+
export type EmojiInsertionAnalytic = (source: SearchSourceTypes.PICKER | SearchSourceTypes.TYPEAHEAD) => AnalyticsEventPayload;
|
|
5
|
+
export declare const recordSucceededEmoji: (emoji: OptionalEmojiDescription) => (source: SearchSourceTypes) => AnalyticsEventPayload;
|
|
5
6
|
export declare const recordSucceeded: EmojiInsertionAnalytic;
|
|
7
|
+
export declare const recordFailedEmoji: (emoji: OptionalEmojiDescription) => (source: SearchSourceTypes) => AnalyticsEventPayload;
|
|
6
8
|
export declare const recordFailed: EmojiInsertionAnalytic;
|
|
7
9
|
interface Duration {
|
|
8
10
|
duration: number;
|
|
@@ -52,10 +54,10 @@ export declare const selectedFileEvent: () => AnalyticsEventPayload;
|
|
|
52
54
|
export declare const typeaheadCancelledEvent: (duration: number, query?: string, emojiList?: EmojiDescription[]) => AnalyticsEventPayload;
|
|
53
55
|
export declare const typeaheadSelectedEvent: (pressed: boolean, duration: number, emoji: EmojiDescription, emojiList?: EmojiDescription[], query?: string, exactMatch?: boolean) => AnalyticsEventPayload;
|
|
54
56
|
export declare const typeaheadRenderedEvent: (duration: number, query?: string, emojiList?: EmojiDescription[]) => AnalyticsEventPayload;
|
|
55
|
-
export declare const recordSelectionSucceededSli: (options?: {
|
|
57
|
+
export declare const recordSelectionSucceededSli: (emoji: OptionalEmojiDescription, options?: {
|
|
56
58
|
createAnalyticsEvent?: CreateUIAnalyticsEvent;
|
|
57
59
|
}) => () => void;
|
|
58
|
-
export declare const recordSelectionFailedSli: (options?: {
|
|
60
|
+
export declare const recordSelectionFailedSli: (emoji: OptionalEmojiDescription, options?: {
|
|
59
61
|
createAnalyticsEvent?: CreateUIAnalyticsEvent;
|
|
60
62
|
}) => (err: Error) => Promise<never>;
|
|
61
63
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ufoExperiencesSampled, clearSampled, isExperienceSampled, withSampling, } from './samplingUfo';
|
|
2
2
|
export type { UFOExperienceSampledRecords, WithSamplingUFOExperience } from './samplingUfo';
|
|
3
|
-
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordSucceeded, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent, } from './analytics';
|
|
3
|
+
export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordFailedEmoji, recordSucceeded, recordSucceededEmoji, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent, } from './analytics';
|
|
4
4
|
export { sampledUfoRenderedEmoji, ufoExperiences } from './ufoExperiences';
|
|
5
5
|
export type { EmojiInsertionAnalytic } from './analytics';
|
|
6
6
|
export { useSampledUFOComponentExperience } from './useSampledUFOComponentExperience';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isSSR(): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/emoji",
|
|
3
|
-
"version": "67.8.
|
|
3
|
+
"version": "67.8.7",
|
|
4
4
|
"description": "Fabric emoji React components",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@atlaskit/primitives": "^12.2.0",
|
|
43
43
|
"@atlaskit/spinner": "^16.3.0",
|
|
44
44
|
"@atlaskit/textfield": "^6.5.0",
|
|
45
|
-
"@atlaskit/theme": "^13.
|
|
45
|
+
"@atlaskit/theme": "^13.1.0",
|
|
46
46
|
"@atlaskit/tokens": "^2.0.0",
|
|
47
47
|
"@atlaskit/tooltip": "^18.8.0",
|
|
48
48
|
"@atlaskit/ufo": "^0.3.0",
|
|
@@ -120,6 +120,9 @@
|
|
|
120
120
|
"platform_index_emoji_just_in_time": {
|
|
121
121
|
"type": "boolean"
|
|
122
122
|
},
|
|
123
|
+
"platform_always_sample_rendered_emoji": {
|
|
124
|
+
"type": "boolean"
|
|
125
|
+
},
|
|
123
126
|
"platform_editor_react18_phase2": {
|
|
124
127
|
"type": "boolean"
|
|
125
128
|
}
|