@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/client/ProfileCardClient.js +4 -4
- package/dist/cjs/client/TeamCentralCardClient.js +106 -59
- package/dist/cjs/client/TeamProfileCardClient.js +13 -12
- package/dist/cjs/client/UserProfileCardClient.js +25 -2
- package/dist/cjs/client/errorUtils.js +25 -0
- package/dist/cjs/components/Error/ErrorMessage.js +40 -77
- package/dist/cjs/components/Team/TeamLoadingState.js +1 -1
- package/dist/cjs/components/Team/TeamProfileCard.js +4 -4
- package/dist/cjs/components/Team/TeamProfileCardTrigger.js +3 -3
- package/dist/cjs/components/User/OverflowProfileCardButtons.js +44 -10
- package/dist/cjs/components/User/ProfileCard.js +195 -362
- package/dist/cjs/components/User/ProfileCardDetails.js +142 -0
- package/dist/cjs/components/User/ProfileCardResourced.js +25 -20
- package/dist/cjs/components/User/ProfileCardTrigger.js +35 -7
- package/dist/cjs/components/User/ReportingLinesDetails.js +13 -13
- package/dist/cjs/components/User/UserLoadingState.js +14 -2
- package/dist/cjs/util/analytics.js +31 -16
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/client/ProfileCardClient.js +4 -4
- package/dist/es2019/client/TeamCentralCardClient.js +101 -59
- package/dist/es2019/client/TeamProfileCardClient.js +3 -9
- package/dist/es2019/client/UserProfileCardClient.js +23 -2
- package/dist/es2019/client/errorUtils.js +17 -0
- package/dist/es2019/components/Error/ErrorMessage.js +38 -42
- package/dist/es2019/components/Team/TeamLoadingState.js +2 -2
- package/dist/es2019/components/Team/TeamProfileCard.js +5 -5
- package/dist/es2019/components/Team/TeamProfileCardTrigger.js +4 -4
- package/dist/es2019/components/User/OverflowProfileCardButtons.js +30 -4
- package/dist/es2019/components/User/ProfileCard.js +161 -292
- package/dist/es2019/components/User/ProfileCardDetails.js +118 -0
- package/dist/es2019/components/User/ProfileCardResourced.js +21 -21
- package/dist/es2019/components/User/ProfileCardTrigger.js +32 -6
- package/dist/es2019/components/User/ReportingLinesDetails.js +10 -11
- package/dist/es2019/components/User/UserLoadingState.js +10 -2
- package/dist/es2019/util/analytics.js +13 -8
- package/dist/es2019/version.json +1 -1
- package/dist/esm/client/ProfileCardClient.js +4 -4
- package/dist/esm/client/TeamCentralCardClient.js +106 -59
- package/dist/esm/client/TeamProfileCardClient.js +11 -12
- package/dist/esm/client/UserProfileCardClient.js +22 -2
- package/dist/esm/client/errorUtils.js +17 -0
- package/dist/esm/components/Error/ErrorMessage.js +35 -80
- package/dist/esm/components/Team/TeamLoadingState.js +2 -2
- package/dist/esm/components/Team/TeamProfileCard.js +5 -5
- package/dist/esm/components/Team/TeamProfileCardTrigger.js +4 -4
- package/dist/esm/components/User/OverflowProfileCardButtons.js +39 -9
- package/dist/esm/components/User/ProfileCard.js +180 -362
- package/dist/esm/components/User/ProfileCardDetails.js +120 -0
- package/dist/esm/components/User/ProfileCardResourced.js +17 -17
- package/dist/esm/components/User/ProfileCardTrigger.js +33 -7
- package/dist/esm/components/User/ReportingLinesDetails.js +12 -12
- package/dist/esm/components/User/UserLoadingState.js +7 -2
- package/dist/esm/util/analytics.js +21 -12
- package/dist/esm/version.json +1 -1
- package/dist/types/client/ProfileCardClient.d.ts +3 -2
- package/dist/types/client/TeamCentralCardClient.d.ts +2 -0
- package/dist/types/client/TeamProfileCardClient.d.ts +2 -1
- package/dist/types/client/UserProfileCardClient.d.ts +2 -1
- package/dist/types/client/errorUtils.d.ts +6 -0
- package/dist/types/components/Error/ErrorMessage.d.ts +6 -15
- package/dist/types/components/Team/TeamProfileCardTrigger.d.ts +5 -11
- package/dist/types/components/User/OverflowProfileCardButtons.d.ts +4 -3
- package/dist/types/components/User/ProfileCard.d.ts +5 -29
- package/dist/types/components/User/ProfileCardDetails.d.ts +3 -0
- package/dist/types/components/User/ProfileCardResourced.d.ts +7 -3
- package/dist/types/components/User/ProfileCardTrigger.d.ts +3 -40
- package/dist/types/components/User/ReportingLinesDetails.d.ts +2 -4
- package/dist/types/components/User/UserLoadingState.d.ts +5 -1
- package/dist/types/components/User/lazyProfileCard.d.ts +1 -1
- package/dist/types/types.d.ts +12 -10
- package/dist/types/util/analytics.d.ts +22 -13
- package/package.json +9 -9
- package/report.api.md +74 -124
- package/dist/cjs/internal/analytics.js +0 -15
- package/dist/es2019/internal/analytics.js +0 -8
- package/dist/esm/internal/analytics.js +0 -8
- 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
|
|
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
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
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 (
|
|
180
|
-
|
|
191
|
+
if (cache) {
|
|
192
|
+
return Promise.resolve(cache);
|
|
181
193
|
}
|
|
182
194
|
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
249
|
+
if (_this3.featureFlagKeys.has(featureKey)) {
|
|
250
|
+
return Promise.resolve(_this3.featureFlagKeys.get(featureKey));
|
|
251
|
+
}
|
|
215
252
|
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
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
|
|
126
|
-
analytics((0, _analytics.teamRequestAnalytics)('failed', {
|
|
127
|
-
duration: (0, _performance.getPageTime)() - startTime
|
|
128
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
253
|
+
_this.fireAnalytics((0, _analytics.profileCardRendered)('team', 'errorBoundary', {
|
|
254
254
|
duration: 0
|
|
255
255
|
}));
|
|
256
256
|
|