@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.
Files changed (31) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/analytics/ufo.js +10 -2
  3. package/dist/cjs/components/ReactionPicker.js +13 -2
  4. package/dist/cjs/components/ReactionTooltip.js +3 -14
  5. package/dist/cjs/components/Reactions.js +3 -3
  6. package/dist/cjs/components/UfoErrorBoundary.js +13 -3
  7. package/dist/cjs/containers/ConnectedReactionsView.js +14 -6
  8. package/dist/cjs/store/ReactionsStore.js +72 -7
  9. package/dist/cjs/version.json +1 -1
  10. package/dist/es2019/analytics/ufo.js +7 -0
  11. package/dist/es2019/components/ReactionPicker.js +13 -2
  12. package/dist/es2019/components/ReactionTooltip.js +2 -6
  13. package/dist/es2019/components/Reactions.js +3 -3
  14. package/dist/es2019/components/UfoErrorBoundary.js +13 -3
  15. package/dist/es2019/containers/ConnectedReactionsView.js +14 -8
  16. package/dist/es2019/store/ReactionsStore.js +70 -7
  17. package/dist/es2019/version.json +1 -1
  18. package/dist/esm/analytics/ufo.js +7 -0
  19. package/dist/esm/components/ReactionPicker.js +13 -2
  20. package/dist/esm/components/ReactionTooltip.js +2 -7
  21. package/dist/esm/components/Reactions.js +3 -3
  22. package/dist/esm/components/UfoErrorBoundary.js +13 -3
  23. package/dist/esm/containers/ConnectedReactionsView.js +14 -6
  24. package/dist/esm/store/ReactionsStore.js +72 -7
  25. package/dist/esm/version.json +1 -1
  26. package/dist/types/analytics/ufo.d.ts +8 -2
  27. package/dist/types/client/ReactionClient.d.ts +14 -0
  28. package/dist/types/components/ReactionTooltip.d.ts +1 -0
  29. package/dist/types/components/UfoErrorBoundary.d.ts +2 -2
  30. package/dist/types/store/ReactionsStore.d.ts +13 -0
  31. 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 emoji gets removed/decrement
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 reactionsStyle = (0, _core.css)({
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
- '& > :first-of-type': {
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: reactionsStyle
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 e = _step.value;
51
- e.failure();
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
- render: Analytics.UFO.ReactionsRendered
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); // ufo start reaction experience
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, aris.reduce(utils.flattenAris)).then(function (value) {
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
- _this.client.getDetailedReaction(containerAri, ari, emojiId).then(_this.handleDetailedReactionResponse);
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;
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.3.1"
3
+ "version": "21.3.4"
4
4
  }
@@ -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
- if (!users || users.length === 0) {
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 reactionsStyle = css({
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
- '& > :first-of-type': {
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: reactionsStyle
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 e of this.props.experiences) {
5
- e.failure();
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
- render: Analytics.UFO.ReactionsRendered
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); // ufo start reaction experience
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, aris.reduce(utils.flattenAris)).then(value => {
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
- this.client.getDetailedReaction(containerAri, ari, emojiId).then(this.handleDetailedReactionResponse);
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);
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.3.1"
3
+ "version": "21.3.4"
4
4
  }
@@ -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 reactionsStyle = css({
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
- '& > :first-of-type': {
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: reactionsStyle
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 e = _step.value;
38
- e.failure();
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
- render: Analytics.UFO.ReactionsRendered
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); // ufo start reaction experience
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, aris.reduce(utils.flattenAris)).then(function (value) {
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
- _this.client.getDetailedReaction(containerAri, ari, emojiId).then(_this.handleDetailedReactionResponse);
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 () {
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.3.1"
3
+ "version": "21.3.4"
4
4
  }
@@ -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,3 +1,4 @@
1
+ /** @jsx jsx */
1
2
  import React from 'react';
2
3
  import { ReactionSummary } from '../types/ReactionSummary';
3
4
  export interface Props {
@@ -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.1",
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": "^1.4.0",
33
- "@atlaskit/emoji": "^64.6.0",
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.3",
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.2.0",
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",