@atlaskit/profilecard 16.11.0 → 17.0.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 (74) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/client/ProfileCardClient.js +2 -2
  3. package/dist/cjs/client/TeamProfileCardClient.js +13 -12
  4. package/dist/cjs/client/UserProfileCardClient.js +25 -2
  5. package/dist/cjs/client/errorUtils.js +25 -0
  6. package/dist/cjs/components/Error/ErrorMessage.js +40 -77
  7. package/dist/cjs/components/Team/TeamLoadingState.js +1 -1
  8. package/dist/cjs/components/Team/TeamProfileCard.js +4 -4
  9. package/dist/cjs/components/Team/TeamProfileCardTrigger.js +3 -3
  10. package/dist/cjs/components/User/OverflowProfileCardButtons.js +44 -10
  11. package/dist/cjs/components/User/ProfileCard.js +195 -362
  12. package/dist/cjs/components/User/ProfileCardDetails.js +142 -0
  13. package/dist/cjs/components/User/ProfileCardResourced.js +25 -20
  14. package/dist/cjs/components/User/ProfileCardTrigger.js +35 -7
  15. package/dist/cjs/components/User/ReportingLinesDetails.js +13 -13
  16. package/dist/cjs/components/User/UserLoadingState.js +14 -2
  17. package/dist/cjs/util/analytics.js +31 -16
  18. package/dist/cjs/version.json +1 -1
  19. package/dist/es2019/client/ProfileCardClient.js +2 -2
  20. package/dist/es2019/client/TeamProfileCardClient.js +3 -9
  21. package/dist/es2019/client/UserProfileCardClient.js +23 -2
  22. package/dist/es2019/client/errorUtils.js +17 -0
  23. package/dist/es2019/components/Error/ErrorMessage.js +38 -42
  24. package/dist/es2019/components/Team/TeamLoadingState.js +2 -2
  25. package/dist/es2019/components/Team/TeamProfileCard.js +5 -5
  26. package/dist/es2019/components/Team/TeamProfileCardTrigger.js +4 -4
  27. package/dist/es2019/components/User/OverflowProfileCardButtons.js +30 -4
  28. package/dist/es2019/components/User/ProfileCard.js +161 -292
  29. package/dist/es2019/components/User/ProfileCardDetails.js +118 -0
  30. package/dist/es2019/components/User/ProfileCardResourced.js +21 -21
  31. package/dist/es2019/components/User/ProfileCardTrigger.js +32 -6
  32. package/dist/es2019/components/User/ReportingLinesDetails.js +10 -11
  33. package/dist/es2019/components/User/UserLoadingState.js +10 -2
  34. package/dist/es2019/util/analytics.js +13 -8
  35. package/dist/es2019/version.json +1 -1
  36. package/dist/esm/client/ProfileCardClient.js +2 -2
  37. package/dist/esm/client/TeamProfileCardClient.js +11 -12
  38. package/dist/esm/client/UserProfileCardClient.js +22 -2
  39. package/dist/esm/client/errorUtils.js +17 -0
  40. package/dist/esm/components/Error/ErrorMessage.js +35 -80
  41. package/dist/esm/components/Team/TeamLoadingState.js +2 -2
  42. package/dist/esm/components/Team/TeamProfileCard.js +5 -5
  43. package/dist/esm/components/Team/TeamProfileCardTrigger.js +4 -4
  44. package/dist/esm/components/User/OverflowProfileCardButtons.js +39 -9
  45. package/dist/esm/components/User/ProfileCard.js +180 -362
  46. package/dist/esm/components/User/ProfileCardDetails.js +120 -0
  47. package/dist/esm/components/User/ProfileCardResourced.js +17 -17
  48. package/dist/esm/components/User/ProfileCardTrigger.js +33 -7
  49. package/dist/esm/components/User/ReportingLinesDetails.js +12 -12
  50. package/dist/esm/components/User/UserLoadingState.js +7 -2
  51. package/dist/esm/util/analytics.js +21 -12
  52. package/dist/esm/version.json +1 -1
  53. package/dist/types/client/ProfileCardClient.d.ts +3 -2
  54. package/dist/types/client/TeamProfileCardClient.d.ts +2 -1
  55. package/dist/types/client/UserProfileCardClient.d.ts +2 -1
  56. package/dist/types/client/errorUtils.d.ts +6 -0
  57. package/dist/types/components/Error/ErrorMessage.d.ts +6 -15
  58. package/dist/types/components/Team/TeamProfileCardTrigger.d.ts +5 -11
  59. package/dist/types/components/User/OverflowProfileCardButtons.d.ts +4 -3
  60. package/dist/types/components/User/ProfileCard.d.ts +5 -29
  61. package/dist/types/components/User/ProfileCardDetails.d.ts +3 -0
  62. package/dist/types/components/User/ProfileCardResourced.d.ts +7 -3
  63. package/dist/types/components/User/ProfileCardTrigger.d.ts +3 -40
  64. package/dist/types/components/User/ReportingLinesDetails.d.ts +2 -4
  65. package/dist/types/components/User/UserLoadingState.d.ts +5 -1
  66. package/dist/types/components/User/lazyProfileCard.d.ts +1 -1
  67. package/dist/types/types.d.ts +11 -10
  68. package/dist/types/util/analytics.d.ts +22 -13
  69. package/package.json +9 -9
  70. package/report.api.md +71 -124
  71. package/dist/cjs/internal/analytics.js +0 -15
  72. package/dist/es2019/internal/analytics.js +0 -8
  73. package/dist/esm/internal/analytics.js +0 -8
  74. package/dist/types/internal/analytics.d.ts +0 -8
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ProfileCardDetails = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ var _reactIntlNext = require("react-intl-next");
17
+
18
+ var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
19
+
20
+ var _relativeDate = _interopRequireDefault(require("../../internal/relative-date"));
21
+
22
+ var _messages = _interopRequireDefault(require("../../messages"));
23
+
24
+ var _Card = require("../../styled/Card");
25
+
26
+ var _Icon = require("../Icon");
27
+
28
+ var _ReportingLinesDetails = _interopRequireDefault(require("./ReportingLinesDetails"));
29
+
30
+ var _excluded = ["text"];
31
+
32
+ var renderName = function renderName(nickname, fullName, meta) {
33
+ if (!fullName && !nickname) {
34
+ return null;
35
+ }
36
+
37
+ var isNicknameRedundant = !nickname || nickname === fullName;
38
+ var shownNickname = " (".concat(nickname, ") ");
39
+ var displayName = isNicknameRedundant ? fullName : "".concat(fullName).concat(shownNickname);
40
+ return /*#__PURE__*/_react.default.createElement(_Card.FullNameLabel, {
41
+ noMeta: !meta,
42
+ "data-testid": "profilecard-name"
43
+ }, displayName);
44
+ };
45
+
46
+ var disabledAccountDesc = function disabledAccountDesc(statusModifiedDate, disabledAccountMessage) {
47
+ var status = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'closed';
48
+
49
+ // consumer does not want to use built-in message
50
+ if (disabledAccountMessage) {
51
+ return disabledAccountMessage;
52
+ }
53
+
54
+ var date = statusModifiedDate ? new Date(statusModifiedDate * 1000) : null;
55
+ var relativeDateKey = (0, _relativeDate.default)(date);
56
+ var msgKey = relativeDateKey ? "".concat(status, "AccountDescMsgHasDate").concat(relativeDateKey) : "".concat(status, "AccountDescMsgNoDate");
57
+
58
+ var secondSentence = /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default[msgKey]);
59
+
60
+ return /*#__PURE__*/_react.default.createElement("p", {
61
+ "data-testid": "profilecard-disabled-account"
62
+ }, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.generalDescMsgForDisabledUser), ' ', secondSentence);
63
+ };
64
+
65
+ var CustomLozenges = function CustomLozenges(_ref) {
66
+ var _ref$lozenges = _ref.lozenges,
67
+ lozenges = _ref$lozenges === void 0 ? [] : _ref$lozenges;
68
+
69
+ if (lozenges.length === 0) {
70
+ return null;
71
+ }
72
+
73
+ return /*#__PURE__*/_react.default.createElement(_Card.CustomLozengeContainer, null, lozenges.map(function (_ref2, index) {
74
+ var text = _ref2.text,
75
+ otherProps = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
76
+ return /*#__PURE__*/_react.default.createElement(_lozenge.default, (0, _extends2.default)({}, otherProps, {
77
+ key: index
78
+ }), text);
79
+ }));
80
+ };
81
+
82
+ var BotProfileCardDetails = function BotProfileCardDetails(props) {
83
+ var fullName = props.fullName,
84
+ nickname = props.nickname;
85
+ return /*#__PURE__*/_react.default.createElement(_Card.DetailsGroup, null, renderName(nickname, fullName), /*#__PURE__*/_react.default.createElement(_Card.AppTitleLabel, null, "App"));
86
+ };
87
+
88
+ var DisabledProfileCardDetails = function DisabledProfileCardDetails(props) {
89
+ var companyName = props.companyName,
90
+ disabledAccountMessage = props.disabledAccountMessage,
91
+ fullName = props.fullName,
92
+ _props$hasDisabledAcc = props.hasDisabledAccountLozenge,
93
+ hasDisabledAccountLozenge = _props$hasDisabledAcc === void 0 ? true : _props$hasDisabledAcc,
94
+ nickname = props.nickname,
95
+ status = props.status,
96
+ statusModifiedDate = props.statusModifiedDate;
97
+ var name = status === 'inactive' ? fullName || nickname : nickname || /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.disabledAccountDefaultName);
98
+ return /*#__PURE__*/_react.default.createElement(_Card.DetailsGroup, null, /*#__PURE__*/_react.default.createElement(_Card.FullNameLabel, {
99
+ noMeta: true,
100
+ isDisabledAccount: true,
101
+ "data-testid": "profilecard-name"
102
+ }, name), hasDisabledAccountLozenge && /*#__PURE__*/_react.default.createElement(_Card.LozengeWrapper, null, /*#__PURE__*/_react.default.createElement(_lozenge.default, {
103
+ appearance: "default",
104
+ isBold: true
105
+ }, status === 'inactive' ? /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.inactiveAccountMsg) : /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.closedAccountMsg))), /*#__PURE__*/_react.default.createElement(_Card.DisabledInfo, null, disabledAccountDesc(statusModifiedDate, disabledAccountMessage, status)), status === 'inactive' && /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
106
+ icon: "companyName"
107
+ }, companyName));
108
+ };
109
+
110
+ var ProfileCardDetails = function ProfileCardDetails(props) {
111
+ var meta = props.meta,
112
+ status = props.status;
113
+
114
+ if (props.isBot) {
115
+ return /*#__PURE__*/_react.default.createElement(BotProfileCardDetails, props);
116
+ }
117
+
118
+ if (status === 'inactive' || status === 'closed') {
119
+ return /*#__PURE__*/_react.default.createElement(DisabledProfileCardDetails, (0, _extends2.default)({}, props, {
120
+ status: status
121
+ }));
122
+ }
123
+
124
+ return /*#__PURE__*/_react.default.createElement(_Card.DetailsGroup, null, renderName(props.nickname, props.fullName, meta), meta && /*#__PURE__*/_react.default.createElement(_Card.JobTitleLabel, null, meta), /*#__PURE__*/_react.default.createElement(CustomLozenges, {
125
+ lozenges: props.customLozenges
126
+ }), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
127
+ icon: "email"
128
+ }, props.email), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
129
+ icon: "time"
130
+ }, props.timestring), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
131
+ icon: "companyName"
132
+ }, props.companyName), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
133
+ icon: "location"
134
+ }, props.location), /*#__PURE__*/_react.default.createElement(_ReportingLinesDetails.default, {
135
+ reportingLines: props.reportingLines,
136
+ reportingLinesProfileUrl: props.reportingLinesProfileUrl,
137
+ onReportingLinesClick: props.onReportingLinesClick,
138
+ fireAnalyticsWithDuration: props.fireAnalyticsWithDuration
139
+ }));
140
+ };
141
+
142
+ exports.ProfileCardDetails = ProfileCardDetails;
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = void 0;
10
+ exports.default = exports.ProfileCardResourcedInternal = void 0;
11
11
 
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
 
@@ -29,14 +29,16 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
29
29
 
30
30
  var _react = _interopRequireWildcard(require("react"));
31
31
 
32
- var _giveKudos = require("@atlaskit/give-kudos");
32
+ var _analyticsNext = require("@atlaskit/analytics-next");
33
33
 
34
- var _analytics = require("../../internal/analytics");
34
+ var _giveKudos = require("@atlaskit/give-kudos");
35
35
 
36
36
  var _filterActions = _interopRequireDefault(require("../../internal/filterActions"));
37
37
 
38
38
  var _Card = require("../../styled/Card");
39
39
 
40
+ var _analytics = require("../../util/analytics");
41
+
40
42
  var _Error = require("../Error");
41
43
 
42
44
  var _ProfileCard = _interopRequireDefault(require("./ProfileCard"));
@@ -81,12 +83,14 @@ var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
81
83
  isKudosEnabled: false,
82
84
  kudosDrawerOpen: false
83
85
  });
84
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "callAnalytics", function (id) {
85
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
86
- var analytics = _this.props.analytics;
86
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireAnalytics", function (payload) {
87
+ // Don't fire analytics if the component is unmounted
88
+ if (!_this._isMounted) {
89
+ return;
90
+ }
87
91
 
88
- if (analytics) {
89
- analytics(id, options);
92
+ if (_this.props.createAnalyticsEvent) {
93
+ (0, _analytics.fireEvent)(_this.props.createAnalyticsEvent, payload);
90
94
  }
91
95
  });
92
96
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "clientFetchProfile", function () {
@@ -105,7 +109,7 @@ var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
105
109
  hasError: false,
106
110
  data: null
107
111
  }, function () {
108
- var requests = Promise.all([_this.props.resourceClient.getProfile(cloudId, userId), _this.props.resourceClient.getReportingLines(userId), _this.props.resourceClient.shouldShowGiveKudos()]);
112
+ var requests = Promise.all([_this.props.resourceClient.getProfile(cloudId, userId, _this.fireAnalytics), _this.props.resourceClient.getReportingLines(userId), _this.props.resourceClient.shouldShowGiveKudos()]);
109
113
  requests.then(function (res) {
110
114
  var _this2;
111
115
 
@@ -146,17 +150,12 @@ var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
146
150
  userId = _this$props2.userId,
147
151
  cloudId = _this$props2.cloudId,
148
152
  resourceClient = _this$props2.resourceClient;
149
- var hasError = this.state.hasError;
150
153
 
151
154
  if (userId !== prevProps.userId || cloudId !== prevProps.cloudId || resourceClient !== prevProps.resourceClient) {
152
155
  this.setState({
153
156
  isLoading: undefined
154
157
  }, this.clientFetchProfile);
155
158
  }
156
-
157
- if (hasError !== prevState.hasError && hasError) {
158
- this.callAnalytics(_analytics.AnalyticsName.PROFILE_CARD_RESOURCED_ERROR);
159
- }
160
159
  }
161
160
  }, {
162
161
  key: "componentWillUnmount",
@@ -202,7 +201,6 @@ var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
202
201
  reportingLinesData = _this$state.reportingLinesData,
203
202
  isKudosEnabled = _this$state.isKudosEnabled;
204
203
  var _this$props3 = this.props,
205
- analytics = _this$props3.analytics,
206
204
  onReportingLinesClick = _this$props3.onReportingLinesClick,
207
205
  cloudId = _this$props3.cloudId,
208
206
  userId = _this$props3.userId,
@@ -210,11 +208,14 @@ var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
210
208
  var isFetchingOrNotStartToFetchYet = isLoading === true || isLoading === undefined;
211
209
 
212
210
  if (isFetchingOrNotStartToFetchYet) {
213
- return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, null, /*#__PURE__*/_react.default.createElement(_UserLoadingState.default, null));
211
+ return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, null, /*#__PURE__*/_react.default.createElement(_UserLoadingState.default, {
212
+ fireAnalytics: this.fireAnalytics
213
+ }));
214
214
  } else if (hasError) {
215
215
  return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, null, /*#__PURE__*/_react.default.createElement(_Error.ErrorMessage, {
216
216
  errorType: error,
217
- reload: this.clientFetchProfile
217
+ reload: this.clientFetchProfile,
218
+ fireAnalytics: this.fireAnalytics
218
219
  }));
219
220
  }
220
221
 
@@ -222,7 +223,6 @@ var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
222
223
  hasError: hasError,
223
224
  errorType: error,
224
225
  clientFetchProfile: this.clientFetchProfile,
225
- analytics: analytics,
226
226
  reportingLines: reportingLinesData,
227
227
  onReportingLinesClick: onReportingLinesClick,
228
228
  cloudId: cloudId,
@@ -255,7 +255,12 @@ var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
255
255
  return ProfileCardResourced;
256
256
  }(_react.default.PureComponent);
257
257
 
258
- exports.default = ProfileCardResourced;
259
258
  (0, _defineProperty2.default)(ProfileCardResourced, "defaultProps", {
260
259
  actions: []
261
- });
260
+ });
261
+ var ProfileCardResourcedInternal = ProfileCardResourced;
262
+ exports.ProfileCardResourcedInternal = ProfileCardResourcedInternal;
263
+
264
+ var _default = (0, _analyticsNext.withAnalyticsEvents)()(ProfileCardResourced);
265
+
266
+ exports.default = _default;
@@ -31,6 +31,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
31
31
 
32
32
  var _react = _interopRequireWildcard(require("react"));
33
33
 
34
+ var _analyticsNext = require("@atlaskit/analytics-next");
35
+
34
36
  var _giveKudos = require("@atlaskit/give-kudos");
35
37
 
36
38
  var _popup = _interopRequireDefault(require("@atlaskit/popup"));
@@ -41,6 +43,8 @@ var _filterActions2 = _interopRequireDefault(require("../../internal/filterActio
41
43
 
42
44
  var _Card = require("../../styled/Card");
43
45
 
46
+ var _analytics = require("../../util/analytics");
47
+
44
48
  var _config = require("../../util/config");
45
49
 
46
50
  var _lazyProfileCard = require("./lazyProfileCard");
@@ -81,6 +85,16 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
81
85
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hideDelay", _this.props.trigger === 'click' ? 0 : _config.DELAY_MS_HIDE);
82
86
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "showTimer", 0);
83
87
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hideTimer", 0);
88
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireAnalytics", function (payload) {
89
+ // Don't fire any analytics if the component is unmounted
90
+ if (!_this._isMounted) {
91
+ return;
92
+ }
93
+
94
+ if (_this.props.createAnalyticsEvent) {
95
+ (0, _analytics.fireEvent)(_this.props.createAnalyticsEvent, payload);
96
+ }
97
+ });
84
98
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hideProfilecard", function () {
85
99
  clearTimeout(_this.showTimer);
86
100
  clearTimeout(_this.hideTimer);
@@ -110,9 +124,20 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
110
124
  event.stopPropagation();
111
125
 
112
126
  _this.showProfilecard();
127
+
128
+ if (!_this.state.visible) {
129
+ _this.fireAnalytics((0, _analytics.cardTriggered)('user', 'click'));
130
+ }
131
+ });
132
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onMouseEnter", function () {
133
+ _this.showProfilecard();
134
+
135
+ if (!_this.state.visible) {
136
+ _this.fireAnalytics((0, _analytics.cardTriggered)('user', 'hover'));
137
+ }
113
138
  });
114
139
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "containerListeners", _this.props.trigger === 'hover' ? {
115
- onMouseEnter: _this.showProfilecard,
140
+ onMouseEnter: _this.onMouseEnter,
116
141
  onMouseLeave: _this.hideProfilecard
117
142
  } : {
118
143
  onClick: _this.onClick
@@ -152,7 +177,7 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
152
177
  hasError: false,
153
178
  data: null
154
179
  }, function () {
155
- var requests = Promise.all([_this.props.resourceClient.getProfile(cloudId || '', userId), _this.props.resourceClient.getReportingLines(userId), _this.props.resourceClient.shouldShowGiveKudos()]);
180
+ var requests = Promise.all([_this.props.resourceClient.getProfile(cloudId || '', userId, _this.fireAnalytics), _this.props.resourceClient.getReportingLines(userId), _this.props.resourceClient.shouldShowGiveKudos()]);
156
181
  requests.then(function (res) {
157
182
  var _this2;
158
183
 
@@ -180,7 +205,9 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
180
205
  var isLoading = _this.state.isLoading;
181
206
 
182
207
  if (isLoading === true || isLoading === undefined) {
183
- return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, null, /*#__PURE__*/_react.default.createElement(_UserLoadingState.default, null));
208
+ return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, null, /*#__PURE__*/_react.default.createElement(_UserLoadingState.default, {
209
+ fireAnalytics: _this.fireAnalytics
210
+ }));
184
211
  } else {
185
212
  return _this.renderProfileCard();
186
213
  }
@@ -256,8 +283,7 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
256
283
  var newProps = _objectSpread(_objectSpread({
257
284
  userId: this.props.userId,
258
285
  isCurrentUser: (_this$state$data = this.state.data) === null || _this$state$data === void 0 ? void 0 : _this$state$data.isCurrentUser,
259
- clientFetchProfile: this.clientFetchProfile,
260
- analytics: this.props.analytics
286
+ clientFetchProfile: this.clientFetchProfile
261
287
  }, this.state.data), {}, {
262
288
  reportingLines: this.state.reportingLinesData,
263
289
  onReportingLinesClick: this.props.onReportingLinesClick,
@@ -268,7 +294,7 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
268
294
  });
269
295
 
270
296
  var wrapperProps = this.props.trigger === 'hover' ? {
271
- onMouseEnter: this.showProfilecard,
297
+ onMouseEnter: this.onMouseEnter,
272
298
  onMouseLeave: this.hideProfilecard
273
299
  } : {};
274
300
  return /*#__PURE__*/_react.default.createElement("div", wrapperProps, this.state.visible && /*#__PURE__*/_react.default.createElement(_react.Suspense, {
@@ -333,5 +359,7 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
333
359
  trigger: 'hover',
334
360
  position: 'bottom-start'
335
361
  });
336
- var _default = ProfilecardTrigger;
362
+
363
+ var _default = (0, _analyticsNext.withAnalyticsEvents)()(ProfilecardTrigger);
364
+
337
365
  exports.default = _default;
@@ -17,12 +17,12 @@ var _avatarGroup = _interopRequireDefault(require("@atlaskit/avatar-group"));
17
17
 
18
18
  var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
19
19
 
20
- var _analytics = require("../../internal/analytics");
21
-
22
20
  var _messages = _interopRequireDefault(require("../../messages"));
23
21
 
24
22
  var _ReportingLines = require("../../styled/ReportingLines");
25
23
 
24
+ var _analytics = require("../../util/analytics");
25
+
26
26
  function getProfileHref(userId, profileUrl) {
27
27
  return profileUrl ? profileUrl + userId : undefined;
28
28
  }
@@ -30,13 +30,11 @@ function getProfileHref(userId, profileUrl) {
30
30
  var ReportingLinesDetails = function ReportingLinesDetails(props) {
31
31
  var _manager$pii, _manager$pii2;
32
32
 
33
- var _props$reportingLines = props.reportingLines,
33
+ var fireAnalyticsWithDuration = props.fireAnalyticsWithDuration,
34
+ _props$reportingLines = props.reportingLines,
34
35
  reportingLines = _props$reportingLines === void 0 ? {} : _props$reportingLines,
35
36
  reportingLinesProfileUrl = props.reportingLinesProfileUrl,
36
- onReportingLinesClick = props.onReportingLinesClick,
37
- _props$analytics = props.analytics,
38
- analytics = _props$analytics === void 0 ? function () {} : _props$analytics,
39
- getDuration = props.getDuration;
37
+ onReportingLinesClick = props.onReportingLinesClick;
40
38
  var _reportingLines$manag = reportingLines.managers,
41
39
  managers = _reportingLines$manag === void 0 ? [] : _reportingLines$manag,
42
40
  _reportingLines$repor = reportingLines.reports,
@@ -44,11 +42,13 @@ var ReportingLinesDetails = function ReportingLinesDetails(props) {
44
42
  var manager = managers.length >= 1 ? managers[0] : undefined;
45
43
  var hasReports = reports.length > 0;
46
44
 
47
- var getReportingLinesOnClick = function getReportingLinesOnClick(user, analyticsId) {
45
+ var getReportingLinesOnClick = function getReportingLinesOnClick(user, userType) {
48
46
  return onReportingLinesClick ? function () {
49
- analytics(_analytics.AnalyticsName.PROFILE_CARD_CLICK, {
50
- id: analyticsId,
51
- duration: getDuration()
47
+ fireAnalyticsWithDuration(function (duration) {
48
+ return (0, _analytics.reportingLinesClicked)({
49
+ duration: duration,
50
+ userType: userType
51
+ });
52
52
  });
53
53
  onReportingLinesClick(user);
54
54
  } : undefined;
@@ -62,7 +62,7 @@ var ReportingLinesDetails = function ReportingLinesDetails(props) {
62
62
  appearance: "subtle",
63
63
  spacing: "none",
64
64
  href: getProfileHref(manager.accountIdentifier, reportingLinesProfileUrl),
65
- onClick: getReportingLinesOnClick(manager, 'reporting-lines-manager'),
65
+ onClick: getReportingLinesOnClick(manager, 'manager'),
66
66
  isDisabled: !onReportingLinesClick
67
67
  }, /*#__PURE__*/_react.default.createElement(_ReportingLines.ManagerSection, null, /*#__PURE__*/_react.default.createElement(_avatar.default, {
68
68
  size: "xsmall",
@@ -78,7 +78,7 @@ var ReportingLinesDetails = function ReportingLinesDetails(props) {
78
78
  name: ((_member$pii = member.pii) === null || _member$pii === void 0 ? void 0 : _member$pii.name) || '',
79
79
  src: (_member$pii2 = member.pii) === null || _member$pii2 === void 0 ? void 0 : _member$pii2.picture,
80
80
  href: getProfileHref(member.accountIdentifier, reportingLinesProfileUrl),
81
- onClick: getReportingLinesOnClick(member, 'reporting-lines-direct-report')
81
+ onClick: getReportingLinesOnClick(member, 'direct-report')
82
82
  };
83
83
  }),
84
84
  maxCount: 5,
@@ -2,18 +2,30 @@
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 _react = _interopRequireDefault(require("react"));
12
+ var _react = _interopRequireWildcard(require("react"));
11
13
 
12
14
  var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
13
15
 
14
16
  var _Card = require("../../styled/Card");
15
17
 
16
- var UserLoadingState = function UserLoadingState() {
18
+ var _analytics = require("../../util/analytics");
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ var UserLoadingState = function UserLoadingState(_ref) {
25
+ var fireAnalytics = _ref.fireAnalytics;
26
+ (0, _react.useEffect)(function () {
27
+ fireAnalytics((0, _analytics.profileCardRendered)('user', 'spinner'));
28
+ }, [fireAnalytics]);
17
29
  return /*#__PURE__*/_react.default.createElement(_Card.SpinnerContainer, null, /*#__PURE__*/_react.default.createElement(_spinner.default, null));
18
30
  };
19
31
 
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.teamRequestAnalytics = exports.teamProfileCardRendered = exports.teamCardTriggered = exports.teamAvatarClicked = exports.teamActionClicked = exports.moreMembersClicked = exports.moreActionsClicked = exports.fireEvent = exports.errorRetryClicked = void 0;
8
+ exports.userRequestAnalytics = exports.teamRequestAnalytics = exports.teamAvatarClicked = exports.reportingLinesClicked = exports.profileCardRendered = exports.moreMembersClicked = exports.moreActionsClicked = exports.fireEvent = exports.errorRetryClicked = exports.cardTriggered = exports.actionClicked = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
@@ -19,8 +19,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
19
19
  var ANALYTICS_CHANNEL = 'peopleTeams';
20
20
 
21
21
  var runItLater = function runItLater(cb) {
22
- if (window.requestIdleCallback === 'function') {
23
- return window.requestIdleCallback(cb);
22
+ var requestIdleCallback = window.requestIdleCallback;
23
+
24
+ if (typeof requestIdleCallback === 'function') {
25
+ return requestIdleCallback(cb);
24
26
  }
25
27
 
26
28
  if (typeof window.requestAnimationFrame === 'function') {
@@ -46,6 +48,7 @@ var fireEvent = function fireEvent(createAnalyticsEvent, body) {
46
48
 
47
49
  exports.fireEvent = fireEvent;
48
50
  var TEAM_SUBJECT = 'teamProfileCard';
51
+ var USER_SUBJECT = 'profilecard';
49
52
 
50
53
  var createEvent = function createEvent(eventType, action, actionSubject, actionSubjectId) {
51
54
  var attributes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
@@ -56,20 +59,20 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
56
59
  actionSubjectId: actionSubjectId,
57
60
  attributes: _objectSpread(_objectSpread({
58
61
  packageName: "@atlaskit/profilecard",
59
- packageVersion: "16.11.0"
62
+ packageVersion: "17.0.0"
60
63
  }, attributes), {}, {
61
- firedAt: (0, _performance.getPageTime)()
64
+ firedAt: Math.round((0, _performance.getPageTime)())
62
65
  })
63
66
  };
64
67
  };
65
68
 
66
- var teamCardTriggered = function teamCardTriggered(method) {
67
- return createEvent('ui', 'triggered', TEAM_SUBJECT, undefined, {
69
+ var cardTriggered = function cardTriggered(type, method) {
70
+ return createEvent('ui', 'triggered', type === 'user' ? USER_SUBJECT : TEAM_SUBJECT, undefined, {
68
71
  method: method
69
72
  });
70
73
  };
71
74
 
72
- exports.teamCardTriggered = teamCardTriggered;
75
+ exports.cardTriggered = cardTriggered;
73
76
 
74
77
  var teamRequestAnalytics = function teamRequestAnalytics(action, attributes) {
75
78
  return createEvent('operational', action, TEAM_SUBJECT, 'request', attributes);
@@ -77,20 +80,32 @@ var teamRequestAnalytics = function teamRequestAnalytics(action, attributes) {
77
80
 
78
81
  exports.teamRequestAnalytics = teamRequestAnalytics;
79
82
 
80
- var teamProfileCardRendered = function teamProfileCardRendered(actionSubjectId, attributes) {
81
- return createEvent('ui', 'rendered', TEAM_SUBJECT, actionSubjectId, attributes);
83
+ var userRequestAnalytics = function userRequestAnalytics(action, attributes) {
84
+ return createEvent('operational', action, USER_SUBJECT, 'request', attributes);
85
+ };
86
+
87
+ exports.userRequestAnalytics = userRequestAnalytics;
88
+
89
+ var profileCardRendered = function profileCardRendered(type, actionSubjectId, attributes) {
90
+ return createEvent('ui', 'rendered', type === 'user' ? USER_SUBJECT : TEAM_SUBJECT, actionSubjectId, attributes);
91
+ };
92
+
93
+ exports.profileCardRendered = profileCardRendered;
94
+
95
+ var actionClicked = function actionClicked(type, attributes) {
96
+ return createEvent('ui', 'clicked', type === 'user' ? USER_SUBJECT : TEAM_SUBJECT, 'action', attributes);
82
97
  };
83
98
 
84
- exports.teamProfileCardRendered = teamProfileCardRendered;
99
+ exports.actionClicked = actionClicked;
85
100
 
86
- var teamActionClicked = function teamActionClicked(attributes) {
87
- return createEvent('ui', 'clicked', TEAM_SUBJECT, 'action', attributes);
101
+ var reportingLinesClicked = function reportingLinesClicked(attributes) {
102
+ return createEvent('ui', 'clicked', USER_SUBJECT, 'reportingLines', attributes);
88
103
  };
89
104
 
90
- exports.teamActionClicked = teamActionClicked;
105
+ exports.reportingLinesClicked = reportingLinesClicked;
91
106
 
92
- var moreActionsClicked = function moreActionsClicked(attributes) {
93
- return createEvent('ui', 'clicked', TEAM_SUBJECT, 'moreActions', attributes);
107
+ var moreActionsClicked = function moreActionsClicked(type, attributes) {
108
+ return createEvent('ui', 'clicked', type === 'user' ? USER_SUBJECT : TEAM_SUBJECT, 'moreActions', attributes);
94
109
  };
95
110
 
96
111
  exports.moreActionsClicked = moreActionsClicked;
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/profilecard",
3
- "version": "16.11.0"
3
+ "version": "17.0.0"
4
4
  }
@@ -17,8 +17,8 @@ class ProfileCardClient {
17
17
  (_this$tcClient = this.tcClient) === null || _this$tcClient === void 0 ? void 0 : _this$tcClient.flushCache();
18
18
  }
19
19
 
20
- getProfile(cloudId, userId) {
21
- return this.userClient.getProfile(cloudId, userId);
20
+ getProfile(cloudId, userId, analytics) {
21
+ return this.userClient.getProfile(cloudId, userId, analytics);
22
22
  }
23
23
 
24
24
  getTeamProfile(teamId, orgId, analytics) {
@@ -1,6 +1,7 @@
1
1
  import { teamRequestAnalytics } from '../util/analytics';
2
2
  import { getPageTime } from '../util/performance';
3
3
  import CachingClient from './CachingClient';
4
+ import { getErrorAttributes } from './errorUtils';
4
5
  import { getTeamFromAGG } from './getTeamFromAGG';
5
6
  import { graphqlQuery } from './graphqlUtils';
6
7
  const QUERY = `query Team($teamId: String!, $organizationId: String) {
@@ -28,12 +29,6 @@ const buildTeamQuery = (teamId, orgId) => ({
28
29
  }
29
30
  });
30
31
 
31
- const IGNORED_ERRORS = ['NotPermitted', 'Gone'];
32
-
33
- function isRealError(error) {
34
- return !IGNORED_ERRORS.includes(error.reason);
35
- }
36
-
37
32
  export default class TeamProfileCardClient extends CachingClient {
38
33
  constructor(options) {
39
34
  super(options);
@@ -91,11 +86,10 @@ export default class TeamProfileCardClient extends CachingClient {
91
86
 
92
87
  resolve(data);
93
88
  }).catch(error => {
94
- if (analytics && isRealError(error)) {
89
+ if (analytics) {
95
90
  analytics(teamRequestAnalytics('failed', {
96
91
  duration: getPageTime() - startTime,
97
- errorStatus: error.code,
98
- errorReason: error.reason,
92
+ ...getErrorAttributes(error),
99
93
  gateway: shouldUseGateway
100
94
  }));
101
95
  }