@atlaskit/profilecard 16.12.1 → 17.1.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/client/ProfileCardClient.js +4 -4
  3. package/dist/cjs/client/TeamCentralCardClient.js +106 -59
  4. package/dist/cjs/client/TeamProfileCardClient.js +13 -12
  5. package/dist/cjs/client/UserProfileCardClient.js +25 -2
  6. package/dist/cjs/client/errorUtils.js +25 -0
  7. package/dist/cjs/components/Error/ErrorMessage.js +40 -77
  8. package/dist/cjs/components/Team/TeamLoadingState.js +1 -1
  9. package/dist/cjs/components/Team/TeamProfileCard.js +4 -4
  10. package/dist/cjs/components/Team/TeamProfileCardTrigger.js +3 -3
  11. package/dist/cjs/components/User/OverflowProfileCardButtons.js +44 -10
  12. package/dist/cjs/components/User/ProfileCard.js +195 -362
  13. package/dist/cjs/components/User/ProfileCardDetails.js +142 -0
  14. package/dist/cjs/components/User/ProfileCardResourced.js +25 -20
  15. package/dist/cjs/components/User/ProfileCardTrigger.js +35 -7
  16. package/dist/cjs/components/User/ReportingLinesDetails.js +13 -13
  17. package/dist/cjs/components/User/UserLoadingState.js +14 -2
  18. package/dist/cjs/util/analytics.js +31 -16
  19. package/dist/cjs/version.json +1 -1
  20. package/dist/es2019/client/ProfileCardClient.js +4 -4
  21. package/dist/es2019/client/TeamCentralCardClient.js +101 -59
  22. package/dist/es2019/client/TeamProfileCardClient.js +3 -9
  23. package/dist/es2019/client/UserProfileCardClient.js +23 -2
  24. package/dist/es2019/client/errorUtils.js +17 -0
  25. package/dist/es2019/components/Error/ErrorMessage.js +38 -42
  26. package/dist/es2019/components/Team/TeamLoadingState.js +2 -2
  27. package/dist/es2019/components/Team/TeamProfileCard.js +5 -5
  28. package/dist/es2019/components/Team/TeamProfileCardTrigger.js +4 -4
  29. package/dist/es2019/components/User/OverflowProfileCardButtons.js +30 -4
  30. package/dist/es2019/components/User/ProfileCard.js +161 -292
  31. package/dist/es2019/components/User/ProfileCardDetails.js +118 -0
  32. package/dist/es2019/components/User/ProfileCardResourced.js +21 -21
  33. package/dist/es2019/components/User/ProfileCardTrigger.js +32 -6
  34. package/dist/es2019/components/User/ReportingLinesDetails.js +10 -11
  35. package/dist/es2019/components/User/UserLoadingState.js +10 -2
  36. package/dist/es2019/util/analytics.js +13 -8
  37. package/dist/es2019/version.json +1 -1
  38. package/dist/esm/client/ProfileCardClient.js +4 -4
  39. package/dist/esm/client/TeamCentralCardClient.js +106 -59
  40. package/dist/esm/client/TeamProfileCardClient.js +11 -12
  41. package/dist/esm/client/UserProfileCardClient.js +22 -2
  42. package/dist/esm/client/errorUtils.js +17 -0
  43. package/dist/esm/components/Error/ErrorMessage.js +35 -80
  44. package/dist/esm/components/Team/TeamLoadingState.js +2 -2
  45. package/dist/esm/components/Team/TeamProfileCard.js +5 -5
  46. package/dist/esm/components/Team/TeamProfileCardTrigger.js +4 -4
  47. package/dist/esm/components/User/OverflowProfileCardButtons.js +39 -9
  48. package/dist/esm/components/User/ProfileCard.js +180 -362
  49. package/dist/esm/components/User/ProfileCardDetails.js +120 -0
  50. package/dist/esm/components/User/ProfileCardResourced.js +17 -17
  51. package/dist/esm/components/User/ProfileCardTrigger.js +33 -7
  52. package/dist/esm/components/User/ReportingLinesDetails.js +12 -12
  53. package/dist/esm/components/User/UserLoadingState.js +7 -2
  54. package/dist/esm/util/analytics.js +21 -12
  55. package/dist/esm/version.json +1 -1
  56. package/dist/types/client/ProfileCardClient.d.ts +3 -2
  57. package/dist/types/client/TeamCentralCardClient.d.ts +2 -0
  58. package/dist/types/client/TeamProfileCardClient.d.ts +2 -1
  59. package/dist/types/client/UserProfileCardClient.d.ts +2 -1
  60. package/dist/types/client/errorUtils.d.ts +6 -0
  61. package/dist/types/components/Error/ErrorMessage.d.ts +6 -15
  62. package/dist/types/components/Team/TeamProfileCardTrigger.d.ts +5 -11
  63. package/dist/types/components/User/OverflowProfileCardButtons.d.ts +4 -3
  64. package/dist/types/components/User/ProfileCard.d.ts +5 -29
  65. package/dist/types/components/User/ProfileCardDetails.d.ts +3 -0
  66. package/dist/types/components/User/ProfileCardResourced.d.ts +7 -3
  67. package/dist/types/components/User/ProfileCardTrigger.d.ts +3 -40
  68. package/dist/types/components/User/ReportingLinesDetails.d.ts +2 -4
  69. package/dist/types/components/User/UserLoadingState.d.ts +5 -1
  70. package/dist/types/components/User/lazyProfileCard.d.ts +1 -1
  71. package/dist/types/types.d.ts +12 -10
  72. package/dist/types/util/analytics.d.ts +22 -13
  73. package/package.json +9 -9
  74. package/report.api.md +74 -124
  75. package/dist/cjs/internal/analytics.js +0 -15
  76. package/dist/es2019/internal/analytics.js +0 -8
  77. package/dist/esm/internal/analytics.js +0 -8
  78. package/dist/types/internal/analytics.d.ts +0 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/profilecard
2
2
 
3
+ ## 17.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`aa321e66c2a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/aa321e66c2a) - Add cloudid as optional client prop and add workspace check for Atlas functionality
8
+
9
+ ## 17.0.0
10
+
11
+ ### Major Changes
12
+
13
+ - [`fae495c5956`](https://bitbucket.org/atlassian/atlassian-frontend/commits/fae495c5956) - Deprecated the analytics prop and start emitting GASv3 analytics
14
+
3
15
  ## 16.12.1
4
16
 
5
17
  ### Patch Changes
@@ -42,8 +42,8 @@ var ProfileCardClient = /*#__PURE__*/function () {
42
42
  }
43
43
  }, {
44
44
  key: "getProfile",
45
- value: function getProfile(cloudId, userId) {
46
- return this.userClient.getProfile(cloudId, userId);
45
+ value: function getProfile(cloudId, userId, analytics) {
46
+ return this.userClient.getProfile(cloudId, userId, analytics);
47
47
  }
48
48
  }, {
49
49
  key: "getTeamProfile",
@@ -70,11 +70,11 @@ var ProfileCardClient = /*#__PURE__*/function () {
70
70
  }, {
71
71
  key: "shouldShowGiveKudos",
72
72
  value: function shouldShowGiveKudos() {
73
- var _this$tcClient4, _this$tcClient5, _this$tcClient6;
73
+ var _this$tcClient4, _this$tcClient5;
74
74
 
75
75
  // Check if the kudos feature enabled and if the user has TC
76
76
  // if the user does not have TC the tc client will be undefined.
77
- return ((_this$tcClient4 = this.tcClient) === null || _this$tcClient4 === void 0 ? void 0 : _this$tcClient4.options.teamCentralBaseUrl) && ((_this$tcClient5 = this.tcClient) === null || _this$tcClient5 === void 0 ? void 0 : _this$tcClient5.getFlagEnabled('team-central-kudos-enabled-m2', (_this$tcClient6 = this.tcClient) === null || _this$tcClient6 === void 0 ? void 0 : _this$tcClient6.options.productIdentifier)) || Promise.resolve(false);
77
+ return this.getTeamCentralBaseUrl() && ((_this$tcClient4 = this.tcClient) === null || _this$tcClient4 === void 0 ? void 0 : _this$tcClient4.getFlagEnabled('team-central-kudos-enabled-m2', (_this$tcClient5 = this.tcClient) === null || _this$tcClient5 === void 0 ? void 0 : _this$tcClient5.options.productIdentifier)) || Promise.resolve(false);
78
78
  }
79
79
  }]);
80
80
  return ProfileCardClient;
@@ -48,6 +48,14 @@ var buildCheckFeatureFlagQuery = function buildCheckFeatureFlagQuery(featureKey,
48
48
  };
49
49
  };
50
50
 
51
+ function hasTCWorkspace(config) {
52
+ return config.cloudId ? fetch("/gateway/api/watermelon/organization/containsAnyWorkspace?cloudId=".concat(config.cloudId)).then(function (res) {
53
+ return !res || res && res.ok;
54
+ }) : Promise.resolve(false);
55
+ }
56
+
57
+ var isTCReadyPromiseMap = new Map();
58
+
51
59
  var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
52
60
  (0, _inherits2.default)(TeamCentralCardClient, _CachingClient);
53
61
 
@@ -69,10 +77,27 @@ var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
69
77
  _this.options = options;
70
78
  _this.bypassOnFailure = false;
71
79
  _this.featureFlagKeys = new Map();
80
+ _this.isTCReadyPromise = _this.createTcReadyPromise(options);
72
81
  return _this;
73
82
  }
74
83
 
75
84
  (0, _createClass2.default)(TeamCentralCardClient, [{
85
+ key: "createTcReadyPromise",
86
+ value: function createTcReadyPromise(config) {
87
+ if (config.cloudId) {
88
+ var promise = isTCReadyPromiseMap.get(config.cloudId);
89
+
90
+ if (!promise) {
91
+ promise = hasTCWorkspace(config);
92
+ isTCReadyPromiseMap.set(config.cloudId, promise);
93
+ }
94
+
95
+ return promise;
96
+ }
97
+
98
+ return Promise.resolve(true);
99
+ }
100
+ }, {
76
101
  key: "makeFeatureFlagCheckRequest",
77
102
  value: function () {
78
103
  var _makeFeatureFlagCheckRequest = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(featureKey, context) {
@@ -91,7 +116,7 @@ var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
91
116
  case 2:
92
117
  query = buildCheckFeatureFlagQuery(featureKey, context);
93
118
  _context.next = 5;
94
- return (0, _graphqlUtils.graphqlQuery)(this.options.teamCentralUrl, query);
119
+ return (0, _graphqlUtils.graphqlQuery)("".concat(this.options.teamCentralUrl, "?operationName=isFeatureKeyEnabled"), query);
95
120
 
96
121
  case 5:
97
122
  response = _context.sent;
@@ -130,7 +155,7 @@ var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
130
155
  case 2:
131
156
  query = buildReportingLinesQuery(userId);
132
157
  _context2.next = 5;
133
- return (0, _graphqlUtils.graphqlQuery)(this.options.teamCentralUrl, query);
158
+ return (0, _graphqlUtils.graphqlQuery)("".concat(this.options.teamCentralUrl, "?operationName=ReportingLines"), query);
134
159
 
135
160
  case 5:
136
161
  response = _context2.sent;
@@ -155,44 +180,58 @@ var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
155
180
  value: function getReportingLines(userId) {
156
181
  var _this2 = this;
157
182
 
158
- if (!userId) {
159
- return Promise.reject(new Error('userId missing'));
160
- }
161
-
162
- var cache = this.getCachedProfile(userId);
163
-
164
- if (cache) {
165
- return Promise.resolve(cache);
166
- }
167
-
168
- if (this.bypassOnFailure) {
169
- return Promise.resolve({});
170
- }
183
+ return this.isTCReadyPromise.then(function (workSpaceExists) {
184
+ if (workSpaceExists) {
185
+ if (!userId) {
186
+ return Promise.reject(new Error('userId missing'));
187
+ }
171
188
 
172
- return new Promise(function (resolve) {
173
- _this2.makeRequest(userId).then(function (data) {
174
- var enhancedData = {
175
- managers: _this2.filterReportingLinesUser(data === null || data === void 0 ? void 0 : data.managers),
176
- reports: _this2.filterReportingLinesUser(data === null || data === void 0 ? void 0 : data.reports)
177
- };
189
+ var cache = _this2.getCachedProfile(userId);
178
190
 
179
- if (_this2.cache) {
180
- _this2.setCachedProfile(userId, enhancedData);
191
+ if (cache) {
192
+ return Promise.resolve(cache);
181
193
  }
182
194
 
183
- resolve(enhancedData);
184
- }).catch(function (error) {
185
- if ((error === null || error === void 0 ? void 0 : error.status) === 401 || (error === null || error === void 0 ? void 0 : error.status) === 403) {
186
- // Trigger circuit breaker
187
- _this2.bypassOnFailure = true;
195
+ if (_this2.bypassOnFailure) {
196
+ return Promise.resolve({});
188
197
  }
189
- /**
190
- * Reporting lines aren't part of the critical path of profile card.
191
- * Just resolve with empty values instead of bubbling up the error.
192
- */
193
-
194
198
 
195
- resolve({});
199
+ return new Promise(function (resolve) {
200
+ _this2.makeRequest(userId).then(function (data) {
201
+ var enhancedData = {
202
+ managers: _this2.filterReportingLinesUser(data === null || data === void 0 ? void 0 : data.managers),
203
+ reports: _this2.filterReportingLinesUser(data === null || data === void 0 ? void 0 : data.reports)
204
+ };
205
+
206
+ if (_this2.cache) {
207
+ _this2.setCachedProfile(userId, enhancedData);
208
+ }
209
+
210
+ resolve(enhancedData);
211
+ }).catch(function (error) {
212
+ if ((error === null || error === void 0 ? void 0 : error.status) === 401 || (error === null || error === void 0 ? void 0 : error.status) === 403) {
213
+ // Trigger circuit breaker
214
+ _this2.bypassOnFailure = true;
215
+ }
216
+ /**
217
+ * Reporting lines aren't part of the critical path of profile card.
218
+ * Just resolve with empty values instead of bubbling up the error.
219
+ */
220
+
221
+
222
+ resolve({});
223
+ });
224
+ });
225
+ }
226
+
227
+ return Promise.resolve({
228
+ managers: [],
229
+ reports: []
230
+ });
231
+ }, function () {
232
+ return Promise.resolve({
233
+ managers: [],
234
+ reports: []
196
235
  });
197
236
  });
198
237
  }
@@ -201,35 +240,43 @@ var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
201
240
  value: function getFlagEnabled(featureKey, productIdentifier) {
202
241
  var _this3 = this;
203
242
 
204
- if (!featureKey) {
205
- return Promise.reject(new Error('featureKey missing'));
206
- }
207
-
208
- if (this.featureFlagKeys.has(featureKey)) {
209
- return Promise.resolve(this.featureFlagKeys.get(featureKey));
210
- }
243
+ return this.isTCReadyPromise.then(function (workSpaceExists) {
244
+ if (workSpaceExists) {
245
+ if (!featureKey) {
246
+ return Promise.reject(new Error('featureKey missing'));
247
+ }
211
248
 
212
- if (this.bypassOnFailure) {
213
- return Promise.resolve(false);
214
- }
249
+ if (_this3.featureFlagKeys.has(featureKey)) {
250
+ return Promise.resolve(_this3.featureFlagKeys.get(featureKey));
251
+ }
215
252
 
216
- var context = [{
217
- key: 'productIdentifier',
218
- value: productIdentifier || 'unset'
219
- }];
220
- return new Promise(function (resolve) {
221
- _this3.makeFeatureFlagCheckRequest(featureKey, context).then(function (enabled) {
222
- _this3.featureFlagKeys.set(featureKey, enabled);
223
-
224
- resolve(enabled);
225
- }).catch(function (error) {
226
- if ((error === null || error === void 0 ? void 0 : error.status) === 401 || (error === null || error === void 0 ? void 0 : error.status) === 403) {
227
- // Trigger circuit breaker
228
- _this3.bypassOnFailure = true;
253
+ if (_this3.bypassOnFailure) {
254
+ return Promise.resolve(false);
229
255
  }
230
256
 
231
- resolve(false);
232
- });
257
+ var context = [{
258
+ key: 'productIdentifier',
259
+ value: productIdentifier || 'unset'
260
+ }];
261
+ return new Promise(function (resolve) {
262
+ _this3.makeFeatureFlagCheckRequest(featureKey, context).then(function (enabled) {
263
+ _this3.featureFlagKeys.set(featureKey, enabled);
264
+
265
+ resolve(enabled);
266
+ }).catch(function (error) {
267
+ if ((error === null || error === void 0 ? void 0 : error.status) === 401 || (error === null || error === void 0 ? void 0 : error.status) === 403) {
268
+ // Trigger circuit breaker
269
+ _this3.bypassOnFailure = true;
270
+ }
271
+
272
+ resolve(false);
273
+ });
274
+ });
275
+ }
276
+
277
+ return Promise.resolve(false);
278
+ }, function () {
279
+ return Promise.resolve(false);
233
280
  });
234
281
  }
235
282
  }, {
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
 
12
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -23,10 +25,16 @@ var _performance = require("../util/performance");
23
25
 
24
26
  var _CachingClient2 = _interopRequireDefault(require("./CachingClient"));
25
27
 
28
+ var _errorUtils = require("./errorUtils");
29
+
26
30
  var _getTeamFromAGG = require("./getTeamFromAGG");
27
31
 
28
32
  var _graphqlUtils = require("./graphqlUtils");
29
33
 
34
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
35
+
36
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
37
+
30
38
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
31
39
 
32
40
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -43,12 +51,6 @@ var buildTeamQuery = function buildTeamQuery(teamId, orgId) {
43
51
  };
44
52
  };
45
53
 
46
- var IGNORED_ERRORS = ['NotPermitted', 'Gone'];
47
-
48
- function isRealError(error) {
49
- return !IGNORED_ERRORS.includes(error.reason);
50
- }
51
-
52
54
  var TeamProfileCardClient = /*#__PURE__*/function (_CachingClient) {
53
55
  (0, _inherits2.default)(TeamProfileCardClient, _CachingClient);
54
56
 
@@ -122,13 +124,12 @@ var TeamProfileCardClient = /*#__PURE__*/function (_CachingClient) {
122
124
 
123
125
  resolve(data);
124
126
  }).catch(function (error) {
125
- if (analytics && isRealError(error)) {
126
- analytics((0, _analytics.teamRequestAnalytics)('failed', {
127
- duration: (0, _performance.getPageTime)() - startTime,
128
- errorStatus: error.code,
129
- errorReason: error.reason,
127
+ if (analytics) {
128
+ analytics((0, _analytics.teamRequestAnalytics)('failed', _objectSpread(_objectSpread({
129
+ duration: (0, _performance.getPageTime)() - startTime
130
+ }, (0, _errorUtils.getErrorAttributes)(error)), {}, {
130
131
  gateway: shouldUseGateway
131
- }));
132
+ })));
132
133
  }
133
134
 
134
135
  reject(error);
@@ -23,8 +23,14 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
23
23
 
24
24
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
25
 
26
+ var _analytics = require("../util/analytics");
27
+
28
+ var _performance = require("../util/performance");
29
+
26
30
  var _CachingClient2 = _interopRequireDefault(require("./CachingClient"));
27
31
 
32
+ var _errorUtils = require("./errorUtils");
33
+
28
34
  var _graphqlUtils = require("./graphqlUtils");
29
35
 
30
36
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
@@ -55,7 +61,6 @@ var modifyResponse = function modifyResponse(response) {
55
61
  return {
56
62
  isBot: data.isBot,
57
63
  isCurrentUser: data.isCurrentUser,
58
- isNotMentionable: data.isNotMentionable,
59
64
  status: data.status,
60
65
  statusModifiedDate: data.statusModifiedDate || undefined,
61
66
  avatarUrl: data.avatarUrl || undefined,
@@ -142,7 +147,7 @@ var UserProfileCardClient = /*#__PURE__*/function (_CachingClient) {
142
147
  }()
143
148
  }, {
144
149
  key: "getProfile",
145
- value: function getProfile(cloudId, userId) {
150
+ value: function getProfile(cloudId, userId, analytics) {
146
151
  var _this2 = this;
147
152
 
148
153
  if (!userId) {
@@ -157,13 +162,31 @@ var UserProfileCardClient = /*#__PURE__*/function (_CachingClient) {
157
162
  }
158
163
 
159
164
  return new Promise(function (resolve, reject) {
165
+ var startTime = (0, _performance.getPageTime)();
166
+
167
+ if (analytics) {
168
+ analytics((0, _analytics.userRequestAnalytics)('triggered'));
169
+ }
170
+
160
171
  _this2.makeRequest(cloudId, userId).then(function (data) {
161
172
  if (_this2.cache) {
162
173
  _this2.setCachedProfile(cacheIdentifier, data);
163
174
  }
164
175
 
176
+ if (analytics) {
177
+ analytics((0, _analytics.userRequestAnalytics)('succeeded', {
178
+ duration: (0, _performance.getPageTime)() - startTime
179
+ }));
180
+ }
181
+
165
182
  resolve(data);
166
183
  }).catch(function (error) {
184
+ if (analytics) {
185
+ analytics((0, _analytics.userRequestAnalytics)('failed', _objectSpread({
186
+ duration: (0, _performance.getPageTime)() - startTime
187
+ }, (0, _errorUtils.getErrorAttributes)(error))));
188
+ }
189
+
167
190
  reject(error);
168
191
  });
169
192
  });
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getErrorAttributes = void 0;
7
+ var IGNORED_ERRORS = ['NotPermitted', 'Gone'];
8
+
9
+ function isIgnoredError(error) {
10
+ return !!error && IGNORED_ERRORS.includes(error.reason);
11
+ }
12
+
13
+ var getErrorAttributes = function getErrorAttributes(error) {
14
+ var _error$response, _error$response$heade;
15
+
16
+ var traceId = !!error ? (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$heade = _error$response.headers) === null || _error$response$heade === void 0 ? void 0 : _error$response$heade.get('atl-traceid') : undefined;
17
+ return {
18
+ errorStatus: error === null || error === void 0 ? void 0 : error.code,
19
+ errorReason: error === null || error === void 0 ? void 0 : error.reason,
20
+ isSLOFailure: !isIgnoredError(error),
21
+ traceId: traceId !== null && traceId !== void 0 ? traceId : undefined
22
+ };
23
+ };
24
+
25
+ exports.getErrorAttributes = getErrorAttributes;
@@ -2,97 +2,60 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
8
10
  exports.default = void 0;
9
11
 
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
+ var _react = _interopRequireWildcard(require("react"));
19
13
 
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
- var _react = _interopRequireDefault(require("react"));
25
-
26
- var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
14
+ var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
27
15
 
28
16
  var _crossCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/cross-circle"));
29
17
 
30
18
  var _Error = require("../../styled/Error");
31
19
 
32
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
33
-
34
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
35
-
36
- var ErrorMessage = /*#__PURE__*/function (_React$PureComponent) {
37
- (0, _inherits2.default)(ErrorMessage, _React$PureComponent);
20
+ var _analytics = require("../../util/analytics");
38
21
 
39
- var _super = _createSuper(ErrorMessage);
22
+ 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); }
40
23
 
41
- function ErrorMessage() {
42
- var _this;
24
+ 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; }
43
25
 
44
- (0, _classCallCheck2.default)(this, ErrorMessage);
45
-
46
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
47
- args[_key] = arguments[_key];
48
- }
49
-
50
- _this = _super.call.apply(_super, [this].concat(args));
51
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderNotFound", function () {
26
+ var ErrorMessage = function ErrorMessage(props) {
27
+ var errorType = props.errorType || {
28
+ reason: 'default'
29
+ };
30
+ var errorReason = errorType.reason;
31
+ var fireAnalytics = props.fireAnalytics,
32
+ reload = props.reload;
33
+ var hasRetry = !!reload;
34
+ (0, _react.useEffect)(function () {
35
+ fireAnalytics((0, _analytics.profileCardRendered)('user', 'error', {
36
+ hasRetry: hasRetry,
37
+ errorType: errorReason
38
+ }));
39
+ }, [errorReason, fireAnalytics, hasRetry]);
40
+
41
+ var errorContent = function errorContent() {
42
+ if (errorReason === 'NotFound') {
52
43
  return /*#__PURE__*/_react.default.createElement(_Error.ErrorTitle, null, "The user is no longer available for the site");
53
- });
54
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderDefault", function () {
55
- return /*#__PURE__*/_react.default.createElement(_Error.ErrorTitle, null, "Oops, looks like we\u2019re having issues", /*#__PURE__*/_react.default.createElement("br", null), _this.props.reload ? /*#__PURE__*/_react.default.createElement(_Error.ErrorText, null, "Try again and we\u2019ll give it another shot") : null);
56
- });
57
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderRetryButton", function () {
58
- return _this.props.reload ? /*#__PURE__*/_react.default.createElement(_customThemeButton.default, {
59
- appearance: "link",
60
- onClick: _this.props.reload
61
- }, "Try again") : null;
62
- });
63
- return _this;
64
- }
65
-
66
- (0, _createClass2.default)(ErrorMessage, [{
67
- key: "renderErrorContent",
68
- value: function renderErrorContent() {
69
- var errorType = this.props.errorType || {
70
- reason: 'default'
71
- };
72
-
73
- switch (errorType.reason) {
74
- case 'NotFound':
75
- return this.renderNotFound();
76
-
77
- default:
78
- return this.renderDefault();
79
- }
80
44
  }
81
- }, {
82
- key: "render",
83
- value: function render() {
84
- return /*#__PURE__*/_react.default.createElement(_Error.ErrorWrapper, null, /*#__PURE__*/_react.default.createElement(_crossCircle.default, {
85
- label: "icon error",
86
- size: "xlarge"
87
- }), this.renderErrorContent(), this.renderRetryButton());
88
- }
89
- }]);
90
- return ErrorMessage;
91
- }(_react.default.PureComponent);
92
45
 
93
- exports.default = ErrorMessage;
94
- (0, _defineProperty2.default)(ErrorMessage, "defaultProps", {
95
- errorType: {
96
- reason: 'default'
97
- }
98
- });
46
+ return /*#__PURE__*/_react.default.createElement(_Error.ErrorTitle, null, "Oops, looks like we\u2019re having issues", /*#__PURE__*/_react.default.createElement("br", null), reload && /*#__PURE__*/_react.default.createElement(_Error.ErrorText, null, "Try again and we\u2019ll give it another shot"));
47
+ };
48
+
49
+ return /*#__PURE__*/_react.default.createElement(_Error.ErrorWrapper, {
50
+ "data-testid": "profilecard-error"
51
+ }, /*#__PURE__*/_react.default.createElement(_crossCircle.default, {
52
+ label: "icon error",
53
+ size: "xlarge"
54
+ }), errorContent(), reload && /*#__PURE__*/_react.default.createElement(_standardButton.default, {
55
+ appearance: "link",
56
+ onClick: reload
57
+ }, "Try again"));
58
+ };
59
+
60
+ var _default = ErrorMessage;
61
+ exports.default = _default;
@@ -25,7 +25,7 @@ var _default = function _default(props) {
25
25
  var analytics = props.analytics;
26
26
  (0, _react.useEffect)(function () {
27
27
  analytics(function (duration) {
28
- return (0, _analytics.teamProfileCardRendered)('spinner', {
28
+ return (0, _analytics.profileCardRendered)('team', 'spinner', {
29
29
  duration: duration
30
30
  });
31
31
  });
@@ -134,7 +134,7 @@ var TeamMembers = function TeamMembers(_ref) {
134
134
  function onActionClick(action, analytics, index) {
135
135
  return function (event) {
136
136
  analytics(function (duration) {
137
- return (0, _analytics.teamActionClicked)({
137
+ return (0, _analytics.actionClicked)('team', {
138
138
  duration: duration,
139
139
  hasHref: !!action.link,
140
140
  hasOnClick: !!action.callback,
@@ -189,7 +189,7 @@ var ExtraActions = function ExtraActions(_ref3) {
189
189
  if (shouldBeOpen) {
190
190
  // Only fire this event when OPENING the dropdown
191
191
  analytics(function (duration) {
192
- return (0, _analytics.moreActionsClicked)({
192
+ return (0, _analytics.moreActionsClicked)('team', {
193
193
  duration: duration,
194
194
  numActions: count + 2
195
195
  });
@@ -280,7 +280,7 @@ var TeamProfilecardContent = function TeamProfilecardContent(_ref5) {
280
280
  analytics(function (duration) {
281
281
  var _team$members;
282
282
 
283
- return (0, _analytics.teamProfileCardRendered)('content', {
283
+ return (0, _analytics.profileCardRendered)('team', 'content', {
284
284
  duration: duration,
285
285
  numActions: allActions.length,
286
286
  memberCount: (_team$members = team.members) === null || _team$members === void 0 ? void 0 : _team$members.length,
@@ -313,7 +313,7 @@ var ErrorMessage = function ErrorMessage(_ref6) {
313
313
  var hasRetry = !!clientFetchProfile;
314
314
  (0, _react.useEffect)(function () {
315
315
  analytics(function (duration) {
316
- return (0, _analytics.teamProfileCardRendered)('error', {
316
+ return (0, _analytics.profileCardRendered)('team', 'error', {
317
317
  duration: duration,
318
318
  hasRetry: hasRetry
319
319
  });
@@ -147,7 +147,7 @@ var TeamProfileCardTriggerInternal = /*#__PURE__*/function (_React$PureComponent
147
147
  _this.showProfilecard(0);
148
148
 
149
149
  if (!_this.state.visible) {
150
- _this.fireAnalytics((0, _analytics.teamCardTriggered)('click'));
150
+ _this.fireAnalytics((0, _analytics.cardTriggered)('team', 'click'));
151
151
  }
152
152
  }
153
153
  });
@@ -159,7 +159,7 @@ var TeamProfileCardTriggerInternal = /*#__PURE__*/function (_React$PureComponent
159
159
  if (!_this.state.visible) {
160
160
  _this.openedByHover = true;
161
161
 
162
- _this.fireAnalytics((0, _analytics.teamCardTriggered)('hover'));
162
+ _this.fireAnalytics((0, _analytics.cardTriggered)('team', 'hover'));
163
163
  }
164
164
 
165
165
  _this.showProfilecard(_config.DELAY_MS_SHOW);
@@ -250,7 +250,7 @@ var TeamProfileCardTriggerInternal = /*#__PURE__*/function (_React$PureComponent
250
250
  });
251
251
  });
252
252
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onErrorBoundary", function () {
253
- _this.fireAnalytics((0, _analytics.teamProfileCardRendered)('errorBoundary', {
253
+ _this.fireAnalytics((0, _analytics.profileCardRendered)('team', 'errorBoundary', {
254
254
  duration: 0
255
255
  }));
256
256