@atlaskit/reactions 21.3.4 → 21.4.0

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 CHANGED
@@ -1,5 +1,15 @@
1
1
  # @atlaskit/reactions
2
2
 
3
+ ## 21.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`34155ee7563`](https://bitbucket.org/atlassian/atlassian-frontend/commits/34155ee7563) - add sampling for 2 ufo experiences to reduce volume of analytics
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+
3
13
  ## 21.3.4
4
14
 
5
15
  ### Patch Changes
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SAMPLING_RATE_REACTIONS_RENDERED_EXP = void 0;
7
+ // This rate is used in fetching emoji resource
8
+ var SAMPLING_RATE_REACTIONS_RENDERED_EXP = 0.02;
9
+ exports.SAMPLING_RATE_REACTIONS_RENDERED_EXP = SAMPLING_RATE_REACTIONS_RENDERED_EXP;
@@ -3,10 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ReactionsRendered = exports.ReactionsRemove = exports.ReactionsAdd = exports.ReactionDetailsFetch = exports.PickerRender = exports.ExperienceName = exports.ComponentName = void 0;
6
+ exports.sampledReactionsRendered = 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
 
10
+ var _emoji = require("@atlaskit/emoji");
11
+
10
12
  /**
11
13
  * Helper method for create the config type for an individual/Concurrent experience
12
14
  * @param componentName
@@ -78,4 +80,10 @@ var ReactionDetailsFetch = new _ufo.ConcurrentExperience(ExperienceName.REACTION
78
80
 
79
81
  exports.ReactionDetailsFetch = ReactionDetailsFetch;
80
82
  var ReactionsRemove = new _ufo.ConcurrentExperience(ExperienceName.REACTION_REMOVED, createExperienceConfig(ComponentName.REACTIONS, _ufo.ExperienceTypes.Experience, _ufo.ExperiencePerformanceTypes.InlineResult));
81
- exports.ReactionsRemove = ReactionsRemove;
83
+ exports.ReactionsRemove = ReactionsRemove;
84
+
85
+ var sampledReactionsRendered = function sampledReactionsRendered(instanceId) {
86
+ return (0, _emoji.withSampling)(ReactionsRendered.getInstance(instanceId));
87
+ };
88
+
89
+ exports.sampledReactionsRendered = sampledReactionsRendered;
@@ -26,6 +26,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
26
26
  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; }
27
27
 
28
28
  /** @jsx jsx */
29
+ // eslint-disable-next-line @atlaskit/design-system/no-banned-imports
29
30
  var counterTestId = 'counter-container';
30
31
  exports.counterTestId = counterTestId;
31
32
  var countStyle = (0, _core.css)({
@@ -37,7 +37,7 @@ var ReactionsView = function ReactionsView(props) {
37
37
  store = props.store,
38
38
  containerAri = props.containerAri;
39
39
  (0, _react.useEffect)(function () {
40
- experienceInstance.current = _ReactionsStore.ufoExperiences.render.getInstance(ari);
40
+ experienceInstance.current = _ReactionsStore.ufoExperiences.render(ari);
41
41
  }, [ari]);
42
42
  (0, _react.useEffect)(function () {
43
43
  Promise.resolve(store).then(function (_store) {
@@ -23,6 +23,10 @@ var _batched = require("./batched");
23
23
 
24
24
  var utils = _interopRequireWildcard(require("./utils"));
25
25
 
26
+ var _constants = require("../analytics/constants");
27
+
28
+ var _ufo = require("../analytics/ufo");
29
+
26
30
  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); }
27
31
 
28
32
  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; }
@@ -46,9 +50,11 @@ var ufoExperiences = {
46
50
  remove: Analytics.UFO.ReactionsRemove,
47
51
 
48
52
  /**
49
- * Experience when the list of reactions gets rendered
53
+ * Experience when the list of reactions gets rendered with sampling
50
54
  */
51
- render: Analytics.UFO.ReactionsRendered,
55
+ render: function render(instanceId) {
56
+ return (0, _ufo.sampledReactionsRendered)(instanceId);
57
+ },
52
58
 
53
59
  /**
54
60
  * Experience when a reaction details gets fetched
@@ -220,10 +226,12 @@ var MemoryReactionsStore = /*#__PURE__*/function () {
220
226
  * TODO:
221
227
  * 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.
222
228
  */
223
- var exp = ufoExperiences.render.getInstance(containerAri);
229
+ var sampledExp = ufoExperiences.render(containerAri);
224
230
  var arisArr = aris.reduce(utils.flattenAris); // ufo start reaction experience
225
231
 
226
- exp.start();
232
+ sampledExp.start({
233
+ samplingRate: _constants.SAMPLING_RATE_REACTIONS_RENDERED_EXP
234
+ });
227
235
 
228
236
  _this.client.getReactions(containerAri, arisArr).then(function (value) {
229
237
  Object.keys(value).map(function (ari) {
@@ -238,14 +246,14 @@ var MemoryReactionsStore = /*#__PURE__*/function () {
238
246
  Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestSucceededEvent, 'getReactions');
239
247
  }
240
248
 
241
- exp.success();
249
+ sampledExp.success();
242
250
  }).catch(function (error) {
243
251
  if ((0, utils.isRealErrorFromService)(error.code)) {
244
252
  if (_this.createAnalyticsEvent) {
245
253
  Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'getReactions', error.code);
246
254
  }
247
255
 
248
- exp.failure({
256
+ sampledExp.failure({
249
257
  metadata: {
250
258
  error: error,
251
259
  source: 'Reaction-Store',
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.3.4"
3
+ "version": "21.4.0"
4
4
  }
@@ -0,0 +1,2 @@
1
+ // This rate is used in fetching emoji resource
2
+ export const SAMPLING_RATE_REACTIONS_RENDERED_EXP = 0.02;
@@ -1,4 +1,5 @@
1
1
  import { ConcurrentExperience, UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
2
+ import { withSampling } from '@atlaskit/emoji';
2
3
  /**
3
4
  * Initial experience config object (deferred from @atlaskit/ufo inner types)
4
5
  * TODO: Check if possible to add this to exported types from @atlaskit/ufo
@@ -66,4 +67,5 @@ export const ReactionDetailsFetch = new ConcurrentExperience(ExperienceName.REAC
66
67
  * Experience when a reaction emoji gets removed/decrement
67
68
  */
68
69
 
69
- export const ReactionsRemove = new ConcurrentExperience(ExperienceName.REACTION_REMOVED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
70
+ export const ReactionsRemove = new ConcurrentExperience(ExperienceName.REACTION_REMOVED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
71
+ export const sampledReactionsRendered = instanceId => withSampling(ReactionsRendered.getInstance(instanceId));
@@ -3,7 +3,8 @@ import { jsx, css } from '@emotion/core';
3
3
  import { N500, B400 } from '@atlaskit/theme/colors';
4
4
  import { token } from '@atlaskit/tokens';
5
5
  import React, { memo } from 'react';
6
- import { SlideIn, ExitingPersistence, mediumDurationMs } from '@atlaskit/motion';
6
+ import { SlideIn, ExitingPersistence, mediumDurationMs } from '@atlaskit/motion'; // eslint-disable-next-line @atlaskit/design-system/no-banned-imports
7
+
7
8
  import usePreviousValue from '@atlaskit/ds-lib/use-previous-value';
8
9
  export const counterTestId = 'counter-container';
9
10
  export const countStyle = css({
@@ -17,7 +17,7 @@ const ReactionsView = props => {
17
17
  containerAri
18
18
  } = props;
19
19
  useEffect(() => {
20
- experienceInstance.current = ufoExperiences.render.getInstance(ari);
20
+ experienceInstance.current = ufoExperiences.render(ari);
21
21
  }, [ari]);
22
22
  useEffect(() => {
23
23
  Promise.resolve(store).then(_store => {
@@ -4,6 +4,8 @@ import * as Types from '../types';
4
4
  import { batch, batchByKey } from './batched';
5
5
  import * as utils from './utils';
6
6
  import { isRealErrorFromService } from './utils';
7
+ import { SAMPLING_RATE_REACTIONS_RENDERED_EXP } from '../analytics/constants';
8
+ import { sampledReactionsRendered } from '../analytics/ufo';
7
9
 
8
10
  /**
9
11
  * Set of all available UFO experiences relating to reaction element
@@ -20,9 +22,9 @@ export const ufoExperiences = {
20
22
  remove: Analytics.UFO.ReactionsRemove,
21
23
 
22
24
  /**
23
- * Experience when the list of reactions gets rendered
25
+ * Experience when the list of reactions gets rendered with sampling
24
26
  */
25
- render: Analytics.UFO.ReactionsRendered,
27
+ render: instanceId => sampledReactionsRendered(instanceId),
26
28
 
27
29
  /**
28
30
  * Experience when a reaction details gets fetched
@@ -188,10 +190,12 @@ export class MemoryReactionsStore {
188
190
  * TODO:
189
191
  * 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
192
  */
191
- const exp = ufoExperiences.render.getInstance(containerAri);
193
+ const sampledExp = ufoExperiences.render(containerAri);
192
194
  const arisArr = aris.reduce(utils.flattenAris); // ufo start reaction experience
193
195
 
194
- exp.start();
196
+ sampledExp.start({
197
+ samplingRate: SAMPLING_RATE_REACTIONS_RENDERED_EXP
198
+ });
195
199
  this.client.getReactions(containerAri, arisArr).then(value => {
196
200
  Object.keys(value).map(ari => {
197
201
  const reactionsState = this.getReactionsState(containerAri, ari);
@@ -203,14 +207,14 @@ export class MemoryReactionsStore {
203
207
  Analytics.createAndFireSafe(this.createAnalyticsEvent, Analytics.createRestSucceededEvent, 'getReactions');
204
208
  }
205
209
 
206
- exp.success();
210
+ sampledExp.success();
207
211
  }).catch(error => {
208
212
  if (isRealErrorFromService(error.code)) {
209
213
  if (this.createAnalyticsEvent) {
210
214
  Analytics.createAndFireSafe(this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'getReactions', error.code);
211
215
  }
212
216
 
213
- exp.failure({
217
+ sampledExp.failure({
214
218
  metadata: {
215
219
  error,
216
220
  source: 'Reaction-Store',
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.3.4"
3
+ "version": "21.4.0"
4
4
  }
@@ -0,0 +1,2 @@
1
+ // This rate is used in fetching emoji resource
2
+ export var SAMPLING_RATE_REACTIONS_RENDERED_EXP = 0.02;
@@ -1,4 +1,5 @@
1
1
  import { ConcurrentExperience, UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
2
+ import { withSampling } from '@atlaskit/emoji';
2
3
  /**
3
4
  * Initial experience config object (deferred from @atlaskit/ufo inner types)
4
5
  * TODO: Check if possible to add this to exported types from @atlaskit/ufo
@@ -66,4 +67,7 @@ export var ReactionDetailsFetch = new ConcurrentExperience(ExperienceName.REACTI
66
67
  * Experience when a reaction emoji gets removed/decrement
67
68
  */
68
69
 
69
- export var ReactionsRemove = new ConcurrentExperience(ExperienceName.REACTION_REMOVED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
70
+ export var ReactionsRemove = new ConcurrentExperience(ExperienceName.REACTION_REMOVED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
71
+ export var sampledReactionsRendered = function sampledReactionsRendered(instanceId) {
72
+ return withSampling(ReactionsRendered.getInstance(instanceId));
73
+ };
@@ -3,7 +3,8 @@ import { jsx, css } from '@emotion/core';
3
3
  import { N500, B400 } from '@atlaskit/theme/colors';
4
4
  import { token } from '@atlaskit/tokens';
5
5
  import React, { memo } from 'react';
6
- import { SlideIn, ExitingPersistence, mediumDurationMs } from '@atlaskit/motion';
6
+ import { SlideIn, ExitingPersistence, mediumDurationMs } from '@atlaskit/motion'; // eslint-disable-next-line @atlaskit/design-system/no-banned-imports
7
+
7
8
  import usePreviousValue from '@atlaskit/ds-lib/use-previous-value';
8
9
  export var counterTestId = 'counter-container';
9
10
  export var countStyle = css({
@@ -15,7 +15,7 @@ var ReactionsView = function ReactionsView(props) {
15
15
  store = props.store,
16
16
  containerAri = props.containerAri;
17
17
  useEffect(function () {
18
- experienceInstance.current = ufoExperiences.render.getInstance(ari);
18
+ experienceInstance.current = ufoExperiences.render(ari);
19
19
  }, [ari]);
20
20
  useEffect(function () {
21
21
  Promise.resolve(store).then(function (_store) {
@@ -11,6 +11,8 @@ import * as Types from '../types';
11
11
  import { batch, batchByKey } from './batched';
12
12
  import * as utils from './utils';
13
13
  import { isRealErrorFromService } from './utils';
14
+ import { SAMPLING_RATE_REACTIONS_RENDERED_EXP } from '../analytics/constants';
15
+ import { sampledReactionsRendered } from '../analytics/ufo';
14
16
 
15
17
  /**
16
18
  * Set of all available UFO experiences relating to reaction element
@@ -27,9 +29,11 @@ export var ufoExperiences = {
27
29
  remove: Analytics.UFO.ReactionsRemove,
28
30
 
29
31
  /**
30
- * Experience when the list of reactions gets rendered
32
+ * Experience when the list of reactions gets rendered with sampling
31
33
  */
32
- render: Analytics.UFO.ReactionsRendered,
34
+ render: function render(instanceId) {
35
+ return sampledReactionsRendered(instanceId);
36
+ },
33
37
 
34
38
  /**
35
39
  * Experience when a reaction details gets fetched
@@ -211,10 +215,12 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
211
215
  * TODO:
212
216
  * 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.
213
217
  */
214
- var exp = ufoExperiences.render.getInstance(containerAri);
218
+ var sampledExp = ufoExperiences.render(containerAri);
215
219
  var arisArr = aris.reduce(utils.flattenAris); // ufo start reaction experience
216
220
 
217
- exp.start();
221
+ sampledExp.start({
222
+ samplingRate: SAMPLING_RATE_REACTIONS_RENDERED_EXP
223
+ });
218
224
 
219
225
  _this.client.getReactions(containerAri, arisArr).then(function (value) {
220
226
  Object.keys(value).map(function (ari) {
@@ -229,14 +235,14 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
229
235
  Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestSucceededEvent, 'getReactions');
230
236
  }
231
237
 
232
- exp.success();
238
+ sampledExp.success();
233
239
  }).catch(function (error) {
234
240
  if (isRealErrorFromService(error.code)) {
235
241
  if (_this.createAnalyticsEvent) {
236
242
  Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'getReactions', error.code);
237
243
  }
238
244
 
239
- exp.failure({
245
+ sampledExp.failure({
240
246
  metadata: {
241
247
  error: error,
242
248
  source: 'Reaction-Store',
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.3.4"
3
+ "version": "21.4.0"
4
4
  }
@@ -0,0 +1 @@
1
+ export declare const SAMPLING_RATE_REACTIONS_RENDERED_EXP = 0.02;
@@ -37,3 +37,4 @@ export declare const ReactionDetailsFetch: ConcurrentExperience;
37
37
  * Experience when a reaction emoji gets removed/decrement
38
38
  */
39
39
  export declare const ReactionsRemove: ConcurrentExperience;
40
+ export declare const sampledReactionsRendered: (instanceId: string) => import("@atlaskit/emoji").WithSamplingUFOExperience;
@@ -1,7 +1,8 @@
1
1
  import React, { ErrorInfo } from 'react';
2
2
  import { UFOExperience } from '@atlaskit/ufo';
3
+ import { WithSamplingUFOExperience } from '@atlaskit/emoji';
3
4
  export declare class UfoErrorBoundary extends React.Component<{
4
- experiences: UFOExperience[];
5
+ experiences: UFOExperience[] | WithSamplingUFOExperience[];
5
6
  }> {
6
7
  componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
7
8
  render(): React.ReactNode;
@@ -29,9 +29,9 @@ export declare const ufoExperiences: {
29
29
  */
30
30
  remove: import("@atlaskit/ufo").ConcurrentExperience;
31
31
  /**
32
- * Experience when the list of reactions gets rendered
32
+ * Experience when the list of reactions gets rendered with sampling
33
33
  */
34
- render: import("@atlaskit/ufo").ConcurrentExperience;
34
+ render: (instanceId: string) => import("@atlaskit/emoji").WithSamplingUFOExperience;
35
35
  /**
36
36
  * Experience when a reaction details gets fetched
37
37
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/reactions",
3
- "version": "21.3.4",
3
+ "version": "21.4.0",
4
4
  "description": "Reactions component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -26,13 +26,13 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@atlaskit/analytics-gas-types": "^5.0.0",
29
- "@atlaskit/analytics-namespaced-context": "^6.4.0",
29
+ "@atlaskit/analytics-namespaced-context": "^6.5.0",
30
30
  "@atlaskit/analytics-next": "^8.2.0",
31
31
  "@atlaskit/button": "^16.3.0",
32
32
  "@atlaskit/ds-lib": "^2.0.0",
33
- "@atlaskit/emoji": "^64.7.0",
33
+ "@atlaskit/emoji": "^65.0.0",
34
34
  "@atlaskit/icon": "^21.10.0",
35
- "@atlaskit/motion": "^1.1.0",
35
+ "@atlaskit/motion": "^1.2.0",
36
36
  "@atlaskit/popper": "^5.0.0",
37
37
  "@atlaskit/theme": "^12.1.0",
38
38
  "@atlaskit/tokens": "^0.10.0",
@@ -50,10 +50,10 @@
50
50
  "devDependencies": {
51
51
  "@atlaskit/analytics-viewer": "^0.4.5",
52
52
  "@atlaskit/docs": "^9.0.0",
53
- "@atlaskit/editor-test-helpers": "^17.0.0",
53
+ "@atlaskit/editor-test-helpers": "^17.1.0",
54
54
  "@atlaskit/elements-test-helpers": "^0.7.0",
55
55
  "@atlaskit/tooltip": "^17.5.0",
56
- "@atlaskit/util-data-test": "^17.3.0",
56
+ "@atlaskit/util-data-test": "^17.4.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",