@atlaskit/reactions 21.3.1 → 21.3.4
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 +20 -0
- package/dist/cjs/analytics/ufo.js +10 -2
- package/dist/cjs/components/ReactionPicker.js +13 -2
- package/dist/cjs/components/ReactionTooltip.js +3 -14
- package/dist/cjs/components/Reactions.js +3 -3
- package/dist/cjs/components/UfoErrorBoundary.js +13 -3
- package/dist/cjs/containers/ConnectedReactionsView.js +14 -6
- package/dist/cjs/store/ReactionsStore.js +72 -7
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/analytics/ufo.js +7 -0
- package/dist/es2019/components/ReactionPicker.js +13 -2
- package/dist/es2019/components/ReactionTooltip.js +2 -6
- package/dist/es2019/components/Reactions.js +3 -3
- package/dist/es2019/components/UfoErrorBoundary.js +13 -3
- package/dist/es2019/containers/ConnectedReactionsView.js +14 -8
- package/dist/es2019/store/ReactionsStore.js +70 -7
- package/dist/es2019/version.json +1 -1
- package/dist/esm/analytics/ufo.js +7 -0
- package/dist/esm/components/ReactionPicker.js +13 -2
- package/dist/esm/components/ReactionTooltip.js +2 -7
- package/dist/esm/components/Reactions.js +3 -3
- package/dist/esm/components/UfoErrorBoundary.js +13 -3
- package/dist/esm/containers/ConnectedReactionsView.js +14 -6
- package/dist/esm/store/ReactionsStore.js +72 -7
- package/dist/esm/version.json +1 -1
- package/dist/types/analytics/ufo.d.ts +8 -2
- package/dist/types/client/ReactionClient.d.ts +14 -0
- package/dist/types/components/ReactionTooltip.d.ts +1 -0
- package/dist/types/components/UfoErrorBoundary.d.ts +2 -2
- package/dist/types/store/ReactionsStore.d.ts +13 -0
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/reactions
|
|
2
2
|
|
|
3
|
+
## 21.3.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`c3f9e9bce1c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c3f9e9bce1c) - Add custom information to failure and abort events for UFO experiences
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
|
|
10
|
+
## 21.3.3
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- [`7f1dd280229`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7f1dd280229) - Fix styling issue in the reaction emoji while hovering on it for the first time
|
|
15
|
+
|
|
16
|
+
## 21.3.2
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- [`1940b04de7d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1940b04de7d) - Adding new UFO experience for contents list of reacted users should be able to be fetched reliably
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
|
|
3
23
|
## 21.3.1
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.ReactionsRendered = exports.ReactionsRemove = exports.ReactionsAdd = exports.PickerRender = exports.ExperienceName = exports.ComponentName = void 0;
|
|
6
|
+
exports.ReactionsRendered = exports.ReactionsRemove = exports.ReactionsAdd = exports.ReactionDetailsFetch = exports.PickerRender = exports.ExperienceName = exports.ComponentName = void 0;
|
|
7
7
|
|
|
8
8
|
var _ufo = require("@atlaskit/ufo");
|
|
9
9
|
|
|
@@ -37,6 +37,7 @@ exports.ExperienceName = ExperienceName;
|
|
|
37
37
|
ExperienceName["PICKER_OPENED"] = "reactions-picker-opened";
|
|
38
38
|
ExperienceName["REACTION_ADDED"] = "reaction-added";
|
|
39
39
|
ExperienceName["REACTION_REMOVED"] = "reaction-removed";
|
|
40
|
+
ExperienceName["REACTION_DETAILS_FETCHED"] = "reaction-details-fetched";
|
|
40
41
|
})(ExperienceName || (exports.ExperienceName = ExperienceName = {}));
|
|
41
42
|
|
|
42
43
|
var ComponentName;
|
|
@@ -49,6 +50,7 @@ exports.ComponentName = ComponentName;
|
|
|
49
50
|
(function (ComponentName) {
|
|
50
51
|
ComponentName["PICKER_RENDERED"] = "reactions-picker";
|
|
51
52
|
ComponentName["REACTIONS"] = "reactions-list";
|
|
53
|
+
ComponentName["REACTION_ITEM"] = "reaction-item";
|
|
52
54
|
})(ComponentName || (exports.ComponentName = ComponentName = {}));
|
|
53
55
|
|
|
54
56
|
var PickerRender = new _ufo.UFOExperience(ExperienceName.PICKER_OPENED, createExperienceConfig(ComponentName.PICKER_RENDERED, _ufo.ExperienceTypes.Experience, _ufo.ExperiencePerformanceTypes.InlineResult));
|
|
@@ -65,9 +67,15 @@ var ReactionsRendered = new _ufo.ConcurrentExperience(ExperienceName.REACTIONS_R
|
|
|
65
67
|
exports.ReactionsRendered = ReactionsRendered;
|
|
66
68
|
var ReactionsAdd = new _ufo.ConcurrentExperience(ExperienceName.REACTION_ADDED, createExperienceConfig(ComponentName.REACTIONS, _ufo.ExperienceTypes.Experience, _ufo.ExperiencePerformanceTypes.InlineResult));
|
|
67
69
|
/**
|
|
68
|
-
* Experience when a reaction
|
|
70
|
+
* Experience when a reaction details gets fetched
|
|
69
71
|
*/
|
|
70
72
|
|
|
71
73
|
exports.ReactionsAdd = ReactionsAdd;
|
|
74
|
+
var ReactionDetailsFetch = new _ufo.ConcurrentExperience(ExperienceName.REACTION_DETAILS_FETCHED, createExperienceConfig(ComponentName.REACTION_ITEM, _ufo.ExperienceTypes.Experience, _ufo.ExperiencePerformanceTypes.InlineResult));
|
|
75
|
+
/**
|
|
76
|
+
* Experience when a reaction emoji gets removed/decrement
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
exports.ReactionDetailsFetch = ReactionDetailsFetch;
|
|
72
80
|
var ReactionsRemove = new _ufo.ConcurrentExperience(ExperienceName.REACTION_REMOVED, createExperienceConfig(ComponentName.REACTIONS, _ufo.ExperienceTypes.Experience, _ufo.ExperiencePerformanceTypes.InlineResult));
|
|
73
81
|
exports.ReactionsRemove = ReactionsRemove;
|
|
@@ -189,7 +189,12 @@ var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
189
189
|
value: function componentWillUnmount() {
|
|
190
190
|
document.removeEventListener('click', this.handleClickOutside);
|
|
191
191
|
|
|
192
|
-
_analytics.UFO.PickerRender.abort(
|
|
192
|
+
_analytics.UFO.PickerRender.abort({
|
|
193
|
+
metadata: {
|
|
194
|
+
source: 'Reaction-Picker',
|
|
195
|
+
reason: 'unmount'
|
|
196
|
+
}
|
|
197
|
+
});
|
|
193
198
|
}
|
|
194
199
|
}, {
|
|
195
200
|
key: "close",
|
|
@@ -199,7 +204,13 @@ var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
199
204
|
showFullPicker: false
|
|
200
205
|
}, function () {
|
|
201
206
|
// ufo abort reaction experience
|
|
202
|
-
_analytics.UFO.PickerRender.abort(
|
|
207
|
+
_analytics.UFO.PickerRender.abort({
|
|
208
|
+
metadata: {
|
|
209
|
+
emojiId: _emojiId,
|
|
210
|
+
source: 'Reaction-Picker',
|
|
211
|
+
reason: 'close dialog'
|
|
212
|
+
}
|
|
213
|
+
});
|
|
203
214
|
});
|
|
204
215
|
}
|
|
205
216
|
}, {
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
@@ -11,12 +9,12 @@ exports.ReactionTooltip = void 0;
|
|
|
11
9
|
|
|
12
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
11
|
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
14
14
|
var _core = require("@emotion/core");
|
|
15
15
|
|
|
16
16
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
17
17
|
|
|
18
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
-
|
|
20
18
|
var _reactIntlNext = require("react-intl-next");
|
|
21
19
|
|
|
22
20
|
var _tokens = require("@atlaskit/tokens");
|
|
@@ -25,10 +23,6 @@ var _colors = require("@atlaskit/theme/colors");
|
|
|
25
23
|
|
|
26
24
|
var _i18n = require("./i18n");
|
|
27
25
|
|
|
28
|
-
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); }
|
|
29
|
-
|
|
30
|
-
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; }
|
|
31
|
-
|
|
32
26
|
/** @jsx jsx */
|
|
33
27
|
var verticalMargin = 5;
|
|
34
28
|
var tooltipStyle = (0, _core.css)({
|
|
@@ -64,12 +58,7 @@ var ReactionTooltip = function ReactionTooltip(_ref) {
|
|
|
64
58
|
var emojiName = _ref.emojiName,
|
|
65
59
|
children = _ref.children,
|
|
66
60
|
users = _ref.reaction.users;
|
|
67
|
-
|
|
68
|
-
if (!users || users.length === 0) {
|
|
69
|
-
return (0, _core.jsx)(_react.Fragment, null, _react.default.Children.only(children));
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
var content = (0, _core.jsx)("div", {
|
|
61
|
+
var content = !users || users.length === 0 ? null : (0, _core.jsx)("div", {
|
|
73
62
|
css: tooltipStyle
|
|
74
63
|
}, (0, _core.jsx)("ul", null, emojiName ? (0, _core.jsx)("li", {
|
|
75
64
|
css: emojiNameStyle
|
|
@@ -50,7 +50,7 @@ var reactionStyle = (0, _core.css)({
|
|
|
50
50
|
// top margin of 2px to allow spacing between rows when wrapped (paired with top margin in reactionsStyle)
|
|
51
51
|
margin: '2px 4px 0 4px'
|
|
52
52
|
});
|
|
53
|
-
var
|
|
53
|
+
var wrapperStyle = (0, _core.css)({
|
|
54
54
|
display: 'flex',
|
|
55
55
|
flexWrap: 'wrap',
|
|
56
56
|
position: 'relative',
|
|
@@ -58,7 +58,7 @@ var reactionsStyle = (0, _core.css)({
|
|
|
58
58
|
borderRadius: '15px',
|
|
59
59
|
// To allow to row spacing of 2px on wrap, and 0px on first row
|
|
60
60
|
marginTop: '-2px',
|
|
61
|
-
'
|
|
61
|
+
'> :first-of-type > :first-child': {
|
|
62
62
|
marginLeft: 0
|
|
63
63
|
}
|
|
64
64
|
});
|
|
@@ -177,7 +177,7 @@ var ReactionsWithoutAnalytics = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
177
177
|
key: "render",
|
|
178
178
|
value: function render() {
|
|
179
179
|
return (0, _core.jsx)("div", {
|
|
180
|
-
css:
|
|
180
|
+
css: wrapperStyle
|
|
181
181
|
}, this.props.reactions.map(this.renderReaction), this.renderPicker());
|
|
182
182
|
}
|
|
183
183
|
}]);
|
|
@@ -41,14 +41,24 @@ var UfoErrorBoundary = /*#__PURE__*/function (_React$Component) {
|
|
|
41
41
|
|
|
42
42
|
(0, _createClass2.default)(UfoErrorBoundary, [{
|
|
43
43
|
key: "componentDidCatch",
|
|
44
|
-
value: function componentDidCatch() {
|
|
44
|
+
value: function componentDidCatch(error, errorInfo) {
|
|
45
45
|
var _iterator = _createForOfIteratorHelper(this.props.experiences),
|
|
46
46
|
_step;
|
|
47
47
|
|
|
48
48
|
try {
|
|
49
49
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
50
|
-
var
|
|
51
|
-
|
|
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
|
+
});
|
|
52
62
|
}
|
|
53
63
|
} catch (err) {
|
|
54
64
|
_iterator.e(err);
|
|
@@ -34,7 +34,8 @@ var ReactionsView = function ReactionsView(props) {
|
|
|
34
34
|
var experienceInstance = (0, _react.useRef)();
|
|
35
35
|
var ari = props.ari,
|
|
36
36
|
createAnalyticsEvent = props.createAnalyticsEvent,
|
|
37
|
-
store = props.store
|
|
37
|
+
store = props.store,
|
|
38
|
+
containerAri = props.containerAri;
|
|
38
39
|
(0, _react.useEffect)(function () {
|
|
39
40
|
experienceInstance.current = _ReactionsStore.ufoExperiences.render.getInstance(ari);
|
|
40
41
|
}, [ari]);
|
|
@@ -47,16 +48,23 @@ var ReactionsView = function ReactionsView(props) {
|
|
|
47
48
|
}, [createAnalyticsEvent, store]); // abort when component gets unmounted
|
|
48
49
|
|
|
49
50
|
(0, _react.useEffect)(function () {
|
|
50
|
-
return function () {
|
|
51
|
+
return function cleanup() {
|
|
51
52
|
var _experienceInstance$c;
|
|
52
53
|
|
|
53
|
-
(_experienceInstance$c = experienceInstance.current) === null || _experienceInstance$c === void 0 ? void 0 : _experienceInstance$c.abort(
|
|
54
|
+
(_experienceInstance$c = experienceInstance.current) === null || _experienceInstance$c === void 0 ? void 0 : _experienceInstance$c.abort({
|
|
55
|
+
metadata: {
|
|
56
|
+
source: 'Connected-Reactions-View',
|
|
57
|
+
data: {
|
|
58
|
+
ari: ari,
|
|
59
|
+
containerAri: containerAri
|
|
60
|
+
},
|
|
61
|
+
reason: 'unmount'
|
|
62
|
+
}
|
|
63
|
+
});
|
|
54
64
|
};
|
|
55
|
-
}, [experienceInstance]);
|
|
65
|
+
}, [experienceInstance, containerAri, ari]);
|
|
56
66
|
|
|
57
67
|
var renderChildren = function renderChildren(innerProps) {
|
|
58
|
-
var containerAri = props.containerAri,
|
|
59
|
-
ari = props.ari;
|
|
60
68
|
return /*#__PURE__*/_react.default.createElement(_analyticsNamespacedContext.FabricElementsAnalyticsContext, {
|
|
61
69
|
data: {
|
|
62
70
|
containerAri: containerAri,
|
|
@@ -35,9 +35,25 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
35
35
|
* Set of all available UFO experiences relating to reaction element
|
|
36
36
|
*/
|
|
37
37
|
var ufoExperiences = {
|
|
38
|
+
/**
|
|
39
|
+
* Experience when a reaction emoji gets added
|
|
40
|
+
*/
|
|
38
41
|
add: Analytics.UFO.ReactionsAdd,
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Experience when a reaction emoji gets removed/decrement
|
|
45
|
+
*/
|
|
39
46
|
remove: Analytics.UFO.ReactionsRemove,
|
|
40
|
-
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Experience when the list of reactions gets rendered
|
|
50
|
+
*/
|
|
51
|
+
render: Analytics.UFO.ReactionsRendered,
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Experience when a reaction details gets fetched
|
|
55
|
+
*/
|
|
56
|
+
fetchDetails: Analytics.UFO.ReactionDetailsFetch
|
|
41
57
|
};
|
|
42
58
|
exports.ufoExperiences = ufoExperiences;
|
|
43
59
|
|
|
@@ -150,7 +166,15 @@ var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
150
166
|
|
|
151
167
|
exp.failure({
|
|
152
168
|
metadata: {
|
|
153
|
-
error: error
|
|
169
|
+
error: error,
|
|
170
|
+
source: 'Reaction-Store',
|
|
171
|
+
data: {
|
|
172
|
+
containerAri: containerAri,
|
|
173
|
+
ari: ari,
|
|
174
|
+
emojiId: emojiId,
|
|
175
|
+
metadata: _this.metadata
|
|
176
|
+
},
|
|
177
|
+
reason: 'addReaction fetch failed'
|
|
154
178
|
}
|
|
155
179
|
});
|
|
156
180
|
}
|
|
@@ -175,7 +199,15 @@ var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
175
199
|
// ufo add reaction failure
|
|
176
200
|
exp.failure({
|
|
177
201
|
metadata: {
|
|
178
|
-
error: error
|
|
202
|
+
error: error,
|
|
203
|
+
source: 'Reaction-Store',
|
|
204
|
+
data: {
|
|
205
|
+
containerAri: containerAri,
|
|
206
|
+
ari: ari,
|
|
207
|
+
emojiId: emojiId,
|
|
208
|
+
metadata: _this.metadata
|
|
209
|
+
},
|
|
210
|
+
reason: 'deleteReaction fetch failed'
|
|
179
211
|
}
|
|
180
212
|
});
|
|
181
213
|
});
|
|
@@ -188,11 +220,12 @@ var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
188
220
|
* TODO:
|
|
189
221
|
* All reactions are usually fetched in a single call to reactions-service. Need to check why "getReactions" gets called randomly 1-2 times everytime on each fetch request despite using same containerAri.
|
|
190
222
|
*/
|
|
191
|
-
var exp = ufoExperiences.render.getInstance(containerAri);
|
|
223
|
+
var exp = ufoExperiences.render.getInstance(containerAri);
|
|
224
|
+
var arisArr = aris.reduce(utils.flattenAris); // ufo start reaction experience
|
|
192
225
|
|
|
193
226
|
exp.start();
|
|
194
227
|
|
|
195
|
-
_this.client.getReactions(containerAri,
|
|
228
|
+
_this.client.getReactions(containerAri, arisArr).then(function (value) {
|
|
196
229
|
Object.keys(value).map(function (ari) {
|
|
197
230
|
var reactionsState = _this.getReactionsState(containerAri, ari);
|
|
198
231
|
|
|
@@ -212,7 +245,17 @@ var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
212
245
|
Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'getReactions', error.code);
|
|
213
246
|
}
|
|
214
247
|
|
|
215
|
-
exp.failure(
|
|
248
|
+
exp.failure({
|
|
249
|
+
metadata: {
|
|
250
|
+
error: error,
|
|
251
|
+
source: 'Reaction-Store',
|
|
252
|
+
data: {
|
|
253
|
+
containerAri: containerAri,
|
|
254
|
+
aris: arisArr.join(',')
|
|
255
|
+
},
|
|
256
|
+
reason: 'getReactions fetch failed'
|
|
257
|
+
}
|
|
258
|
+
});
|
|
216
259
|
return Promise.reject(error);
|
|
217
260
|
}
|
|
218
261
|
});
|
|
@@ -220,7 +263,29 @@ var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
220
263
|
(0, _defineProperty2.default)(this, "toggleReaction", this.withReaction(this.doRemoveReaction, this.doAddReaction));
|
|
221
264
|
(0, _defineProperty2.default)(this, "addReaction", this.withReaction(this.flash, this.doAddReaction));
|
|
222
265
|
(0, _defineProperty2.default)(this, "getDetailedReaction", function (containerAri, ari, emojiId) {
|
|
223
|
-
|
|
266
|
+
var exp = ufoExperiences.fetchDetails.getInstance("".concat(ari, "|").concat(emojiId));
|
|
267
|
+
exp.start();
|
|
268
|
+
|
|
269
|
+
_this.client.getDetailedReaction(containerAri, ari, emojiId).then(function (summary) {
|
|
270
|
+
// ufo get reaction details success
|
|
271
|
+
exp.success();
|
|
272
|
+
|
|
273
|
+
_this.handleDetailedReactionResponse(summary);
|
|
274
|
+
}).catch(function (error) {
|
|
275
|
+
// ufo get reaction details failure
|
|
276
|
+
exp.failure({
|
|
277
|
+
metadata: {
|
|
278
|
+
error: error,
|
|
279
|
+
source: 'Reaction-Store',
|
|
280
|
+
data: {
|
|
281
|
+
containerAri: containerAri,
|
|
282
|
+
ari: ari,
|
|
283
|
+
emojiId: emojiId
|
|
284
|
+
},
|
|
285
|
+
reason: 'getDetailedReaction fetch failed'
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
});
|
|
224
289
|
});
|
|
225
290
|
(0, _defineProperty2.default)(this, "getState", function () {
|
|
226
291
|
return _this.state;
|
package/dist/cjs/version.json
CHANGED
|
@@ -32,6 +32,7 @@ export let ExperienceName;
|
|
|
32
32
|
ExperienceName["PICKER_OPENED"] = "reactions-picker-opened";
|
|
33
33
|
ExperienceName["REACTION_ADDED"] = "reaction-added";
|
|
34
34
|
ExperienceName["REACTION_REMOVED"] = "reaction-removed";
|
|
35
|
+
ExperienceName["REACTION_DETAILS_FETCHED"] = "reaction-details-fetched";
|
|
35
36
|
})(ExperienceName || (ExperienceName = {}));
|
|
36
37
|
|
|
37
38
|
export let ComponentName;
|
|
@@ -42,6 +43,7 @@ export let ComponentName;
|
|
|
42
43
|
(function (ComponentName) {
|
|
43
44
|
ComponentName["PICKER_RENDERED"] = "reactions-picker";
|
|
44
45
|
ComponentName["REACTIONS"] = "reactions-list";
|
|
46
|
+
ComponentName["REACTION_ITEM"] = "reaction-item";
|
|
45
47
|
})(ComponentName || (ComponentName = {}));
|
|
46
48
|
|
|
47
49
|
export const PickerRender = new UFOExperience(ExperienceName.PICKER_OPENED, createExperienceConfig(ComponentName.PICKER_RENDERED, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
@@ -55,6 +57,11 @@ export const ReactionsRendered = new ConcurrentExperience(ExperienceName.REACTIO
|
|
|
55
57
|
*/
|
|
56
58
|
|
|
57
59
|
export const ReactionsAdd = new ConcurrentExperience(ExperienceName.REACTION_ADDED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
60
|
+
/**
|
|
61
|
+
* Experience when a reaction details gets fetched
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
export const ReactionDetailsFetch = new ConcurrentExperience(ExperienceName.REACTION_DETAILS_FETCHED, createExperienceConfig(ComponentName.REACTION_ITEM, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
58
65
|
/**
|
|
59
66
|
* Experience when a reaction emoji gets removed/decrement
|
|
60
67
|
*/
|
|
@@ -143,7 +143,12 @@ export class ReactionPicker extends PureComponent {
|
|
|
143
143
|
|
|
144
144
|
componentWillUnmount() {
|
|
145
145
|
document.removeEventListener('click', this.handleClickOutside);
|
|
146
|
-
UFO.PickerRender.abort(
|
|
146
|
+
UFO.PickerRender.abort({
|
|
147
|
+
metadata: {
|
|
148
|
+
source: 'Reaction-Picker',
|
|
149
|
+
reason: 'unmount'
|
|
150
|
+
}
|
|
151
|
+
});
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
close(_emojiId) {
|
|
@@ -152,7 +157,13 @@ export class ReactionPicker extends PureComponent {
|
|
|
152
157
|
showFullPicker: false
|
|
153
158
|
}, () => {
|
|
154
159
|
// ufo abort reaction experience
|
|
155
|
-
UFO.PickerRender.abort(
|
|
160
|
+
UFO.PickerRender.abort({
|
|
161
|
+
metadata: {
|
|
162
|
+
emojiId: _emojiId,
|
|
163
|
+
source: 'Reaction-Picker',
|
|
164
|
+
reason: 'close dialog'
|
|
165
|
+
}
|
|
166
|
+
});
|
|
156
167
|
});
|
|
157
168
|
}
|
|
158
169
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
|
|
3
3
|
/** @jsx jsx */
|
|
4
|
+
import React from 'react';
|
|
4
5
|
import { jsx, css } from '@emotion/core';
|
|
5
6
|
import Tooltip from '@atlaskit/tooltip';
|
|
6
|
-
import React, { Fragment } from 'react';
|
|
7
7
|
import { FormattedMessage } from 'react-intl-next';
|
|
8
8
|
import { token } from '@atlaskit/tokens';
|
|
9
9
|
import { N90 } from '@atlaskit/theme/colors';
|
|
@@ -44,11 +44,7 @@ export const ReactionTooltip = ({
|
|
|
44
44
|
users
|
|
45
45
|
}
|
|
46
46
|
}) => {
|
|
47
|
-
|
|
48
|
-
return jsx(Fragment, null, React.Children.only(children));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const content = jsx("div", {
|
|
47
|
+
const content = !users || users.length === 0 ? null : jsx("div", {
|
|
52
48
|
css: tooltipStyle
|
|
53
49
|
}, jsx("ul", null, emojiName ? jsx("li", {
|
|
54
50
|
css: emojiNameStyle
|
|
@@ -16,7 +16,7 @@ const reactionStyle = css({
|
|
|
16
16
|
// top margin of 2px to allow spacing between rows when wrapped (paired with top margin in reactionsStyle)
|
|
17
17
|
margin: '2px 4px 0 4px'
|
|
18
18
|
});
|
|
19
|
-
const
|
|
19
|
+
const wrapperStyle = css({
|
|
20
20
|
display: 'flex',
|
|
21
21
|
flexWrap: 'wrap',
|
|
22
22
|
position: 'relative',
|
|
@@ -24,7 +24,7 @@ const reactionsStyle = css({
|
|
|
24
24
|
borderRadius: '15px',
|
|
25
25
|
// To allow to row spacing of 2px on wrap, and 0px on first row
|
|
26
26
|
marginTop: '-2px',
|
|
27
|
-
'
|
|
27
|
+
'> :first-of-type > :first-child': {
|
|
28
28
|
marginLeft: 0
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -134,7 +134,7 @@ export class ReactionsWithoutAnalytics extends React.PureComponent {
|
|
|
134
134
|
|
|
135
135
|
render() {
|
|
136
136
|
return jsx("div", {
|
|
137
|
-
css:
|
|
137
|
+
css: wrapperStyle
|
|
138
138
|
}, this.props.reactions.map(this.renderReaction), this.renderPicker());
|
|
139
139
|
}
|
|
140
140
|
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export class UfoErrorBoundary extends React.Component {
|
|
3
|
-
componentDidCatch() {
|
|
4
|
-
for (const
|
|
5
|
-
|
|
3
|
+
componentDidCatch(error, errorInfo) {
|
|
4
|
+
for (const exp of this.props.experiences) {
|
|
5
|
+
exp.failure({
|
|
6
|
+
metadata: {
|
|
7
|
+
source: 'UfoErrorBoundary',
|
|
8
|
+
reason: 'error',
|
|
9
|
+
error: {
|
|
10
|
+
name: error.name,
|
|
11
|
+
message: error.message,
|
|
12
|
+
infoStack: errorInfo.componentStack
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
6
16
|
}
|
|
7
17
|
}
|
|
8
18
|
|
|
@@ -13,7 +13,8 @@ const ReactionsView = props => {
|
|
|
13
13
|
const {
|
|
14
14
|
ari,
|
|
15
15
|
createAnalyticsEvent,
|
|
16
|
-
store
|
|
16
|
+
store,
|
|
17
|
+
containerAri
|
|
17
18
|
} = props;
|
|
18
19
|
useEffect(() => {
|
|
19
20
|
experienceInstance.current = ufoExperiences.render.getInstance(ari);
|
|
@@ -27,18 +28,23 @@ const ReactionsView = props => {
|
|
|
27
28
|
}, [createAnalyticsEvent, store]); // abort when component gets unmounted
|
|
28
29
|
|
|
29
30
|
useEffect(() => {
|
|
30
|
-
return ()
|
|
31
|
+
return function cleanup() {
|
|
31
32
|
var _experienceInstance$c;
|
|
32
33
|
|
|
33
|
-
(_experienceInstance$c = experienceInstance.current) === null || _experienceInstance$c === void 0 ? void 0 : _experienceInstance$c.abort(
|
|
34
|
+
(_experienceInstance$c = experienceInstance.current) === null || _experienceInstance$c === void 0 ? void 0 : _experienceInstance$c.abort({
|
|
35
|
+
metadata: {
|
|
36
|
+
source: 'Connected-Reactions-View',
|
|
37
|
+
data: {
|
|
38
|
+
ari,
|
|
39
|
+
containerAri
|
|
40
|
+
},
|
|
41
|
+
reason: 'unmount'
|
|
42
|
+
}
|
|
43
|
+
});
|
|
34
44
|
};
|
|
35
|
-
}, [experienceInstance]);
|
|
45
|
+
}, [experienceInstance, containerAri, ari]);
|
|
36
46
|
|
|
37
47
|
const renderChildren = innerProps => {
|
|
38
|
-
const {
|
|
39
|
-
containerAri,
|
|
40
|
-
ari
|
|
41
|
-
} = props;
|
|
42
48
|
return /*#__PURE__*/React.createElement(FabricElementsAnalyticsContext, {
|
|
43
49
|
data: {
|
|
44
50
|
containerAri,
|
|
@@ -9,9 +9,25 @@ import { isRealErrorFromService } from './utils';
|
|
|
9
9
|
* Set of all available UFO experiences relating to reaction element
|
|
10
10
|
*/
|
|
11
11
|
export const ufoExperiences = {
|
|
12
|
+
/**
|
|
13
|
+
* Experience when a reaction emoji gets added
|
|
14
|
+
*/
|
|
12
15
|
add: Analytics.UFO.ReactionsAdd,
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Experience when a reaction emoji gets removed/decrement
|
|
19
|
+
*/
|
|
13
20
|
remove: Analytics.UFO.ReactionsRemove,
|
|
14
|
-
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Experience when the list of reactions gets rendered
|
|
24
|
+
*/
|
|
25
|
+
render: Analytics.UFO.ReactionsRendered,
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Experience when a reaction details gets fetched
|
|
29
|
+
*/
|
|
30
|
+
fetchDetails: Analytics.UFO.ReactionDetailsFetch
|
|
15
31
|
};
|
|
16
32
|
export class MemoryReactionsStore {
|
|
17
33
|
constructor(client, state = {
|
|
@@ -115,7 +131,15 @@ export class MemoryReactionsStore {
|
|
|
115
131
|
|
|
116
132
|
exp.failure({
|
|
117
133
|
metadata: {
|
|
118
|
-
error
|
|
134
|
+
error,
|
|
135
|
+
source: 'Reaction-Store',
|
|
136
|
+
data: {
|
|
137
|
+
containerAri,
|
|
138
|
+
ari,
|
|
139
|
+
emojiId,
|
|
140
|
+
metadata: this.metadata
|
|
141
|
+
},
|
|
142
|
+
reason: 'addReaction fetch failed'
|
|
119
143
|
}
|
|
120
144
|
});
|
|
121
145
|
}
|
|
@@ -141,7 +165,15 @@ export class MemoryReactionsStore {
|
|
|
141
165
|
// ufo add reaction failure
|
|
142
166
|
exp.failure({
|
|
143
167
|
metadata: {
|
|
144
|
-
error
|
|
168
|
+
error,
|
|
169
|
+
source: 'Reaction-Store',
|
|
170
|
+
data: {
|
|
171
|
+
containerAri,
|
|
172
|
+
ari,
|
|
173
|
+
emojiId,
|
|
174
|
+
metadata: this.metadata
|
|
175
|
+
},
|
|
176
|
+
reason: 'deleteReaction fetch failed'
|
|
145
177
|
}
|
|
146
178
|
});
|
|
147
179
|
});
|
|
@@ -156,10 +188,11 @@ export class MemoryReactionsStore {
|
|
|
156
188
|
* TODO:
|
|
157
189
|
* All reactions are usually fetched in a single call to reactions-service. Need to check why "getReactions" gets called randomly 1-2 times everytime on each fetch request despite using same containerAri.
|
|
158
190
|
*/
|
|
159
|
-
const exp = ufoExperiences.render.getInstance(containerAri);
|
|
191
|
+
const exp = ufoExperiences.render.getInstance(containerAri);
|
|
192
|
+
const arisArr = aris.reduce(utils.flattenAris); // ufo start reaction experience
|
|
160
193
|
|
|
161
194
|
exp.start();
|
|
162
|
-
this.client.getReactions(containerAri,
|
|
195
|
+
this.client.getReactions(containerAri, arisArr).then(value => {
|
|
163
196
|
Object.keys(value).map(ari => {
|
|
164
197
|
const reactionsState = this.getReactionsState(containerAri, ari);
|
|
165
198
|
const reactions = reactionsState && reactionsState.status === Types.ReactionStatus.ready ? reactionsState.reactions : undefined;
|
|
@@ -177,7 +210,17 @@ export class MemoryReactionsStore {
|
|
|
177
210
|
Analytics.createAndFireSafe(this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'getReactions', error.code);
|
|
178
211
|
}
|
|
179
212
|
|
|
180
|
-
exp.failure(
|
|
213
|
+
exp.failure({
|
|
214
|
+
metadata: {
|
|
215
|
+
error,
|
|
216
|
+
source: 'Reaction-Store',
|
|
217
|
+
data: {
|
|
218
|
+
containerAri,
|
|
219
|
+
aris: arisArr.join(',')
|
|
220
|
+
},
|
|
221
|
+
reason: 'getReactions fetch failed'
|
|
222
|
+
}
|
|
223
|
+
});
|
|
181
224
|
return Promise.reject(error);
|
|
182
225
|
}
|
|
183
226
|
});
|
|
@@ -188,7 +231,27 @@ export class MemoryReactionsStore {
|
|
|
188
231
|
_defineProperty(this, "addReaction", this.withReaction(this.flash, this.doAddReaction));
|
|
189
232
|
|
|
190
233
|
_defineProperty(this, "getDetailedReaction", (containerAri, ari, emojiId) => {
|
|
191
|
-
|
|
234
|
+
const exp = ufoExperiences.fetchDetails.getInstance(`${ari}|${emojiId}`);
|
|
235
|
+
exp.start();
|
|
236
|
+
this.client.getDetailedReaction(containerAri, ari, emojiId).then(summary => {
|
|
237
|
+
// ufo get reaction details success
|
|
238
|
+
exp.success();
|
|
239
|
+
this.handleDetailedReactionResponse(summary);
|
|
240
|
+
}).catch(error => {
|
|
241
|
+
// ufo get reaction details failure
|
|
242
|
+
exp.failure({
|
|
243
|
+
metadata: {
|
|
244
|
+
error,
|
|
245
|
+
source: 'Reaction-Store',
|
|
246
|
+
data: {
|
|
247
|
+
containerAri,
|
|
248
|
+
ari,
|
|
249
|
+
emojiId
|
|
250
|
+
},
|
|
251
|
+
reason: 'getDetailedReaction fetch failed'
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
});
|
|
192
255
|
});
|
|
193
256
|
|
|
194
257
|
_defineProperty(this, "getState", () => this.state);
|
package/dist/es2019/version.json
CHANGED
|
@@ -32,6 +32,7 @@ export var ExperienceName;
|
|
|
32
32
|
ExperienceName["PICKER_OPENED"] = "reactions-picker-opened";
|
|
33
33
|
ExperienceName["REACTION_ADDED"] = "reaction-added";
|
|
34
34
|
ExperienceName["REACTION_REMOVED"] = "reaction-removed";
|
|
35
|
+
ExperienceName["REACTION_DETAILS_FETCHED"] = "reaction-details-fetched";
|
|
35
36
|
})(ExperienceName || (ExperienceName = {}));
|
|
36
37
|
|
|
37
38
|
export var ComponentName;
|
|
@@ -42,6 +43,7 @@ export var ComponentName;
|
|
|
42
43
|
(function (ComponentName) {
|
|
43
44
|
ComponentName["PICKER_RENDERED"] = "reactions-picker";
|
|
44
45
|
ComponentName["REACTIONS"] = "reactions-list";
|
|
46
|
+
ComponentName["REACTION_ITEM"] = "reaction-item";
|
|
45
47
|
})(ComponentName || (ComponentName = {}));
|
|
46
48
|
|
|
47
49
|
export var PickerRender = new UFOExperience(ExperienceName.PICKER_OPENED, createExperienceConfig(ComponentName.PICKER_RENDERED, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
@@ -55,6 +57,11 @@ export var ReactionsRendered = new ConcurrentExperience(ExperienceName.REACTIONS
|
|
|
55
57
|
*/
|
|
56
58
|
|
|
57
59
|
export var ReactionsAdd = new ConcurrentExperience(ExperienceName.REACTION_ADDED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
60
|
+
/**
|
|
61
|
+
* Experience when a reaction details gets fetched
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
export var ReactionDetailsFetch = new ConcurrentExperience(ExperienceName.REACTION_DETAILS_FETCHED, createExperienceConfig(ComponentName.REACTION_ITEM, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
58
65
|
/**
|
|
59
66
|
* Experience when a reaction emoji gets removed/decrement
|
|
60
67
|
*/
|
|
@@ -166,7 +166,12 @@ export var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
166
166
|
key: "componentWillUnmount",
|
|
167
167
|
value: function componentWillUnmount() {
|
|
168
168
|
document.removeEventListener('click', this.handleClickOutside);
|
|
169
|
-
UFO.PickerRender.abort(
|
|
169
|
+
UFO.PickerRender.abort({
|
|
170
|
+
metadata: {
|
|
171
|
+
source: 'Reaction-Picker',
|
|
172
|
+
reason: 'unmount'
|
|
173
|
+
}
|
|
174
|
+
});
|
|
170
175
|
}
|
|
171
176
|
}, {
|
|
172
177
|
key: "close",
|
|
@@ -176,7 +181,13 @@ export var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
176
181
|
showFullPicker: false
|
|
177
182
|
}, function () {
|
|
178
183
|
// ufo abort reaction experience
|
|
179
|
-
UFO.PickerRender.abort(
|
|
184
|
+
UFO.PickerRender.abort({
|
|
185
|
+
metadata: {
|
|
186
|
+
emojiId: _emojiId,
|
|
187
|
+
source: 'Reaction-Picker',
|
|
188
|
+
reason: 'close dialog'
|
|
189
|
+
}
|
|
190
|
+
});
|
|
180
191
|
});
|
|
181
192
|
}
|
|
182
193
|
}, {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
|
|
3
3
|
/** @jsx jsx */
|
|
4
|
+
import React from 'react';
|
|
4
5
|
import { jsx, css } from '@emotion/core';
|
|
5
6
|
import Tooltip from '@atlaskit/tooltip';
|
|
6
|
-
import React, { Fragment } from 'react';
|
|
7
7
|
import { FormattedMessage } from 'react-intl-next';
|
|
8
8
|
import { token } from '@atlaskit/tokens';
|
|
9
9
|
import { N90 } from '@atlaskit/theme/colors';
|
|
@@ -41,12 +41,7 @@ export var ReactionTooltip = function ReactionTooltip(_ref) {
|
|
|
41
41
|
var emojiName = _ref.emojiName,
|
|
42
42
|
children = _ref.children,
|
|
43
43
|
users = _ref.reaction.users;
|
|
44
|
-
|
|
45
|
-
if (!users || users.length === 0) {
|
|
46
|
-
return jsx(Fragment, null, React.Children.only(children));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
var content = jsx("div", {
|
|
44
|
+
var content = !users || users.length === 0 ? null : jsx("div", {
|
|
50
45
|
css: tooltipStyle
|
|
51
46
|
}, jsx("ul", null, emojiName ? jsx("li", {
|
|
52
47
|
css: emojiNameStyle
|
|
@@ -26,7 +26,7 @@ var reactionStyle = css({
|
|
|
26
26
|
// top margin of 2px to allow spacing between rows when wrapped (paired with top margin in reactionsStyle)
|
|
27
27
|
margin: '2px 4px 0 4px'
|
|
28
28
|
});
|
|
29
|
-
var
|
|
29
|
+
var wrapperStyle = css({
|
|
30
30
|
display: 'flex',
|
|
31
31
|
flexWrap: 'wrap',
|
|
32
32
|
position: 'relative',
|
|
@@ -34,7 +34,7 @@ var reactionsStyle = css({
|
|
|
34
34
|
borderRadius: '15px',
|
|
35
35
|
// To allow to row spacing of 2px on wrap, and 0px on first row
|
|
36
36
|
marginTop: '-2px',
|
|
37
|
-
'
|
|
37
|
+
'> :first-of-type > :first-child': {
|
|
38
38
|
marginLeft: 0
|
|
39
39
|
}
|
|
40
40
|
});
|
|
@@ -162,7 +162,7 @@ export var ReactionsWithoutAnalytics = /*#__PURE__*/function (_React$PureCompone
|
|
|
162
162
|
key: "render",
|
|
163
163
|
value: function render() {
|
|
164
164
|
return jsx("div", {
|
|
165
|
-
css:
|
|
165
|
+
css: wrapperStyle
|
|
166
166
|
}, this.props.reactions.map(this.renderReaction), this.renderPicker());
|
|
167
167
|
}
|
|
168
168
|
}]);
|
|
@@ -28,14 +28,24 @@ export var UfoErrorBoundary = /*#__PURE__*/function (_React$Component) {
|
|
|
28
28
|
|
|
29
29
|
_createClass(UfoErrorBoundary, [{
|
|
30
30
|
key: "componentDidCatch",
|
|
31
|
-
value: function componentDidCatch() {
|
|
31
|
+
value: function componentDidCatch(error, errorInfo) {
|
|
32
32
|
var _iterator = _createForOfIteratorHelper(this.props.experiences),
|
|
33
33
|
_step;
|
|
34
34
|
|
|
35
35
|
try {
|
|
36
36
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
37
|
-
var
|
|
38
|
-
|
|
37
|
+
var exp = _step.value;
|
|
38
|
+
exp.failure({
|
|
39
|
+
metadata: {
|
|
40
|
+
source: 'UfoErrorBoundary',
|
|
41
|
+
reason: 'error',
|
|
42
|
+
error: {
|
|
43
|
+
name: error.name,
|
|
44
|
+
message: error.message,
|
|
45
|
+
infoStack: errorInfo.componentStack
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
39
49
|
}
|
|
40
50
|
} catch (err) {
|
|
41
51
|
_iterator.e(err);
|
|
@@ -12,7 +12,8 @@ var ReactionsView = function ReactionsView(props) {
|
|
|
12
12
|
var experienceInstance = useRef();
|
|
13
13
|
var ari = props.ari,
|
|
14
14
|
createAnalyticsEvent = props.createAnalyticsEvent,
|
|
15
|
-
store = props.store
|
|
15
|
+
store = props.store,
|
|
16
|
+
containerAri = props.containerAri;
|
|
16
17
|
useEffect(function () {
|
|
17
18
|
experienceInstance.current = ufoExperiences.render.getInstance(ari);
|
|
18
19
|
}, [ari]);
|
|
@@ -25,16 +26,23 @@ var ReactionsView = function ReactionsView(props) {
|
|
|
25
26
|
}, [createAnalyticsEvent, store]); // abort when component gets unmounted
|
|
26
27
|
|
|
27
28
|
useEffect(function () {
|
|
28
|
-
return function () {
|
|
29
|
+
return function cleanup() {
|
|
29
30
|
var _experienceInstance$c;
|
|
30
31
|
|
|
31
|
-
(_experienceInstance$c = experienceInstance.current) === null || _experienceInstance$c === void 0 ? void 0 : _experienceInstance$c.abort(
|
|
32
|
+
(_experienceInstance$c = experienceInstance.current) === null || _experienceInstance$c === void 0 ? void 0 : _experienceInstance$c.abort({
|
|
33
|
+
metadata: {
|
|
34
|
+
source: 'Connected-Reactions-View',
|
|
35
|
+
data: {
|
|
36
|
+
ari: ari,
|
|
37
|
+
containerAri: containerAri
|
|
38
|
+
},
|
|
39
|
+
reason: 'unmount'
|
|
40
|
+
}
|
|
41
|
+
});
|
|
32
42
|
};
|
|
33
|
-
}, [experienceInstance]);
|
|
43
|
+
}, [experienceInstance, containerAri, ari]);
|
|
34
44
|
|
|
35
45
|
var renderChildren = function renderChildren(innerProps) {
|
|
36
|
-
var containerAri = props.containerAri,
|
|
37
|
-
ari = props.ari;
|
|
38
46
|
return /*#__PURE__*/React.createElement(FabricElementsAnalyticsContext, {
|
|
39
47
|
data: {
|
|
40
48
|
containerAri: containerAri,
|
|
@@ -16,9 +16,25 @@ import { isRealErrorFromService } from './utils';
|
|
|
16
16
|
* Set of all available UFO experiences relating to reaction element
|
|
17
17
|
*/
|
|
18
18
|
export var ufoExperiences = {
|
|
19
|
+
/**
|
|
20
|
+
* Experience when a reaction emoji gets added
|
|
21
|
+
*/
|
|
19
22
|
add: Analytics.UFO.ReactionsAdd,
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Experience when a reaction emoji gets removed/decrement
|
|
26
|
+
*/
|
|
20
27
|
remove: Analytics.UFO.ReactionsRemove,
|
|
21
|
-
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Experience when the list of reactions gets rendered
|
|
31
|
+
*/
|
|
32
|
+
render: Analytics.UFO.ReactionsRendered,
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Experience when a reaction details gets fetched
|
|
36
|
+
*/
|
|
37
|
+
fetchDetails: Analytics.UFO.ReactionDetailsFetch
|
|
22
38
|
};
|
|
23
39
|
export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
24
40
|
function MemoryReactionsStore(client) {
|
|
@@ -138,7 +154,15 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
138
154
|
|
|
139
155
|
exp.failure({
|
|
140
156
|
metadata: {
|
|
141
|
-
error: error
|
|
157
|
+
error: error,
|
|
158
|
+
source: 'Reaction-Store',
|
|
159
|
+
data: {
|
|
160
|
+
containerAri: containerAri,
|
|
161
|
+
ari: ari,
|
|
162
|
+
emojiId: emojiId,
|
|
163
|
+
metadata: _this.metadata
|
|
164
|
+
},
|
|
165
|
+
reason: 'addReaction fetch failed'
|
|
142
166
|
}
|
|
143
167
|
});
|
|
144
168
|
}
|
|
@@ -164,7 +188,15 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
164
188
|
// ufo add reaction failure
|
|
165
189
|
exp.failure({
|
|
166
190
|
metadata: {
|
|
167
|
-
error: error
|
|
191
|
+
error: error,
|
|
192
|
+
source: 'Reaction-Store',
|
|
193
|
+
data: {
|
|
194
|
+
containerAri: containerAri,
|
|
195
|
+
ari: ari,
|
|
196
|
+
emojiId: emojiId,
|
|
197
|
+
metadata: _this.metadata
|
|
198
|
+
},
|
|
199
|
+
reason: 'deleteReaction fetch failed'
|
|
168
200
|
}
|
|
169
201
|
});
|
|
170
202
|
});
|
|
@@ -179,11 +211,12 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
179
211
|
* TODO:
|
|
180
212
|
* All reactions are usually fetched in a single call to reactions-service. Need to check why "getReactions" gets called randomly 1-2 times everytime on each fetch request despite using same containerAri.
|
|
181
213
|
*/
|
|
182
|
-
var exp = ufoExperiences.render.getInstance(containerAri);
|
|
214
|
+
var exp = ufoExperiences.render.getInstance(containerAri);
|
|
215
|
+
var arisArr = aris.reduce(utils.flattenAris); // ufo start reaction experience
|
|
183
216
|
|
|
184
217
|
exp.start();
|
|
185
218
|
|
|
186
|
-
_this.client.getReactions(containerAri,
|
|
219
|
+
_this.client.getReactions(containerAri, arisArr).then(function (value) {
|
|
187
220
|
Object.keys(value).map(function (ari) {
|
|
188
221
|
var reactionsState = _this.getReactionsState(containerAri, ari);
|
|
189
222
|
|
|
@@ -203,7 +236,17 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
203
236
|
Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'getReactions', error.code);
|
|
204
237
|
}
|
|
205
238
|
|
|
206
|
-
exp.failure(
|
|
239
|
+
exp.failure({
|
|
240
|
+
metadata: {
|
|
241
|
+
error: error,
|
|
242
|
+
source: 'Reaction-Store',
|
|
243
|
+
data: {
|
|
244
|
+
containerAri: containerAri,
|
|
245
|
+
aris: arisArr.join(',')
|
|
246
|
+
},
|
|
247
|
+
reason: 'getReactions fetch failed'
|
|
248
|
+
}
|
|
249
|
+
});
|
|
207
250
|
return Promise.reject(error);
|
|
208
251
|
}
|
|
209
252
|
});
|
|
@@ -214,7 +257,29 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
214
257
|
_defineProperty(this, "addReaction", this.withReaction(this.flash, this.doAddReaction));
|
|
215
258
|
|
|
216
259
|
_defineProperty(this, "getDetailedReaction", function (containerAri, ari, emojiId) {
|
|
217
|
-
|
|
260
|
+
var exp = ufoExperiences.fetchDetails.getInstance("".concat(ari, "|").concat(emojiId));
|
|
261
|
+
exp.start();
|
|
262
|
+
|
|
263
|
+
_this.client.getDetailedReaction(containerAri, ari, emojiId).then(function (summary) {
|
|
264
|
+
// ufo get reaction details success
|
|
265
|
+
exp.success();
|
|
266
|
+
|
|
267
|
+
_this.handleDetailedReactionResponse(summary);
|
|
268
|
+
}).catch(function (error) {
|
|
269
|
+
// ufo get reaction details failure
|
|
270
|
+
exp.failure({
|
|
271
|
+
metadata: {
|
|
272
|
+
error: error,
|
|
273
|
+
source: 'Reaction-Store',
|
|
274
|
+
data: {
|
|
275
|
+
containerAri: containerAri,
|
|
276
|
+
ari: ari,
|
|
277
|
+
emojiId: emojiId
|
|
278
|
+
},
|
|
279
|
+
reason: 'getDetailedReaction fetch failed'
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
});
|
|
218
283
|
});
|
|
219
284
|
|
|
220
285
|
_defineProperty(this, "getState", function () {
|
package/dist/esm/version.json
CHANGED
|
@@ -6,14 +6,16 @@ export declare enum ExperienceName {
|
|
|
6
6
|
REACTIONS_RENDERED = "reactions-rendered",
|
|
7
7
|
PICKER_OPENED = "reactions-picker-opened",
|
|
8
8
|
REACTION_ADDED = "reaction-added",
|
|
9
|
-
REACTION_REMOVED = "reaction-removed"
|
|
9
|
+
REACTION_REMOVED = "reaction-removed",
|
|
10
|
+
REACTION_DETAILS_FETCHED = "reaction-details-fetched"
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* UFO types of components been instrumented
|
|
13
14
|
*/
|
|
14
15
|
export declare enum ComponentName {
|
|
15
16
|
PICKER_RENDERED = "reactions-picker",
|
|
16
|
-
REACTIONS = "reactions-list"
|
|
17
|
+
REACTIONS = "reactions-list",
|
|
18
|
+
REACTION_ITEM = "reaction-item"
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Experience when the emoji picker is opened
|
|
@@ -27,6 +29,10 @@ export declare const ReactionsRendered: ConcurrentExperience;
|
|
|
27
29
|
* Experience when a reaction emoji gets added
|
|
28
30
|
*/
|
|
29
31
|
export declare const ReactionsAdd: ConcurrentExperience;
|
|
32
|
+
/**
|
|
33
|
+
* Experience when a reaction details gets fetched
|
|
34
|
+
*/
|
|
35
|
+
export declare const ReactionDetailsFetch: ConcurrentExperience;
|
|
30
36
|
/**
|
|
31
37
|
* Experience when a reaction emoji gets removed/decrement
|
|
32
38
|
*/
|
|
@@ -4,8 +4,22 @@ export declare type ReactionRequest<T> = (containerAri: string, ari: string, emo
|
|
|
4
4
|
[k: string]: any;
|
|
5
5
|
}) => Promise<T>;
|
|
6
6
|
export interface ReactionClient {
|
|
7
|
+
/**
|
|
8
|
+
* Fetch list of reactions for a given ARI.
|
|
9
|
+
* @param containerAri F
|
|
10
|
+
* @param aris
|
|
11
|
+
*/
|
|
7
12
|
getReactions(containerAri: string, aris: string[]): Promise<Reactions>;
|
|
13
|
+
/**
|
|
14
|
+
* Fetch details for a given reaction.
|
|
15
|
+
*/
|
|
8
16
|
getDetailedReaction: ReactionRequest<ReactionSummary>;
|
|
17
|
+
/**
|
|
18
|
+
* Fetch request when adding a reaction to a container.
|
|
19
|
+
*/
|
|
9
20
|
addReaction: ReactionRequest<ReactionSummary[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Fetch request when removing a reaction from a container.
|
|
23
|
+
*/
|
|
10
24
|
deleteReaction: ReactionRequest<ReactionSummary[]>;
|
|
11
25
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { ErrorInfo } from 'react';
|
|
2
2
|
import { UFOExperience } from '@atlaskit/ufo';
|
|
3
3
|
export declare class UfoErrorBoundary extends React.Component<{
|
|
4
4
|
experiences: UFOExperience[];
|
|
5
5
|
}> {
|
|
6
|
-
componentDidCatch(): void;
|
|
6
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
7
7
|
render(): React.ReactNode;
|
|
8
8
|
}
|
|
@@ -20,9 +20,22 @@ export interface StoreMetadata {
|
|
|
20
20
|
* Set of all available UFO experiences relating to reaction element
|
|
21
21
|
*/
|
|
22
22
|
export declare const ufoExperiences: {
|
|
23
|
+
/**
|
|
24
|
+
* Experience when a reaction emoji gets added
|
|
25
|
+
*/
|
|
23
26
|
add: import("@atlaskit/ufo").ConcurrentExperience;
|
|
27
|
+
/**
|
|
28
|
+
* Experience when a reaction emoji gets removed/decrement
|
|
29
|
+
*/
|
|
24
30
|
remove: import("@atlaskit/ufo").ConcurrentExperience;
|
|
31
|
+
/**
|
|
32
|
+
* Experience when the list of reactions gets rendered
|
|
33
|
+
*/
|
|
25
34
|
render: import("@atlaskit/ufo").ConcurrentExperience;
|
|
35
|
+
/**
|
|
36
|
+
* Experience when a reaction details gets fetched
|
|
37
|
+
*/
|
|
38
|
+
fetchDetails: import("@atlaskit/ufo").ConcurrentExperience;
|
|
26
39
|
};
|
|
27
40
|
export interface ReactionsStore extends Types.Actions {
|
|
28
41
|
getState: () => State;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/reactions",
|
|
3
|
-
"version": "21.3.
|
|
3
|
+
"version": "21.3.4",
|
|
4
4
|
"description": "Reactions component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"@atlaskit/analytics-namespaced-context": "^6.4.0",
|
|
30
30
|
"@atlaskit/analytics-next": "^8.2.0",
|
|
31
31
|
"@atlaskit/button": "^16.3.0",
|
|
32
|
-
"@atlaskit/ds-lib": "^
|
|
33
|
-
"@atlaskit/emoji": "^64.
|
|
32
|
+
"@atlaskit/ds-lib": "^2.0.0",
|
|
33
|
+
"@atlaskit/emoji": "^64.7.0",
|
|
34
34
|
"@atlaskit/icon": "^21.10.0",
|
|
35
|
-
"@atlaskit/motion": "^1.0
|
|
35
|
+
"@atlaskit/motion": "^1.1.0",
|
|
36
36
|
"@atlaskit/popper": "^5.0.0",
|
|
37
37
|
"@atlaskit/theme": "^12.1.0",
|
|
38
38
|
"@atlaskit/tokens": "^0.10.0",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"@atlaskit/editor-test-helpers": "^17.0.0",
|
|
54
54
|
"@atlaskit/elements-test-helpers": "^0.7.0",
|
|
55
55
|
"@atlaskit/tooltip": "^17.5.0",
|
|
56
|
-
"@atlaskit/util-data-test": "^17.
|
|
56
|
+
"@atlaskit/util-data-test": "^17.3.0",
|
|
57
57
|
"@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
|
|
58
58
|
"@atlassian/ufo": "^0.1.0",
|
|
59
59
|
"@types/webpack-dev-server": "^3.11.2",
|