@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
@@ -2,415 +2,248 @@
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
- exports.default = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ exports.default = exports.ProfilecardInternal = void 0;
13
11
 
14
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
13
 
16
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
21
-
22
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
-
26
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
27
15
 
28
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
29
17
 
30
- var _react = _interopRequireDefault(require("react"));
18
+ var _react = _interopRequireWildcard(require("react"));
31
19
 
32
20
  var _reactIntlNext = require("react-intl-next");
33
21
 
22
+ var _analyticsNext = require("@atlaskit/analytics-next");
23
+
34
24
  var _avatar = _interopRequireDefault(require("@atlaskit/avatar"));
35
25
 
36
26
  var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
37
27
 
38
- var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
39
-
40
28
  var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
41
29
 
42
30
  var _colors = require("@atlaskit/theme/colors");
43
31
 
44
32
  var _tokens = require("@atlaskit/tokens");
45
33
 
46
- var _analytics = require("../../internal/analytics");
47
-
48
- var _relativeDate = _interopRequireDefault(require("../../internal/relative-date"));
49
-
50
34
  var _messages = _interopRequireDefault(require("../../messages"));
51
35
 
52
36
  var _Card = require("../../styled/Card");
53
37
 
38
+ var _analytics = require("../../util/analytics");
39
+
54
40
  var _click = require("../../util/click");
55
41
 
56
- var _Error = require("../Error");
42
+ var _performance = require("../../util/performance");
57
43
 
58
- var _Icon = require("../Icon");
44
+ var _Error = require("../Error");
59
45
 
60
46
  var _OverflowProfileCardButtons = require("./OverflowProfileCardButtons");
61
47
 
62
- var _ReportingLinesDetails = _interopRequireDefault(require("./ReportingLinesDetails"));
48
+ var _ProfileCardDetails = require("./ProfileCardDetails");
63
49
 
64
- var _excluded = ["text"];
50
+ 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); }
65
51
 
66
- 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); }; }
52
+ 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; }
67
53
 
68
- 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; } }
54
+ var GIVE_KUDOS_ACTION_ID = 'give-kudos';
69
55
 
70
- var Profilecard = /*#__PURE__*/function (_React$PureComponent) {
71
- (0, _inherits2.default)(Profilecard, _React$PureComponent);
56
+ var useKudos = function useKudos(cloudId, userId, teamCentralBaseUrl, openKudosDrawer) {
57
+ var kudosUrl = (0, _react.useMemo)(function () {
58
+ var recipientId = userId ? "&recipientId=".concat(userId) : '';
59
+ var cloudIdParam = cloudId ? "&cloudId=".concat(cloudId) : '';
60
+ return "".concat(teamCentralBaseUrl || '', "/kudos/give?type=individual").concat(recipientId).concat(cloudIdParam);
61
+ }, [cloudId, teamCentralBaseUrl, userId]);
62
+ var kudosButtonCallback = (0, _react.useCallback)(function () {
63
+ if (openKudosDrawer) {
64
+ openKudosDrawer();
65
+ } else {
66
+ window.open(kudosUrl);
67
+ }
68
+ }, [kudosUrl, openKudosDrawer]);
69
+ var kudosAction = (0, _react.useMemo)(function () {
70
+ return {
71
+ label: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.giveKudosButton),
72
+ id: GIVE_KUDOS_ACTION_ID,
73
+ callback: kudosButtonCallback,
74
+ link: kudosUrl
75
+ };
76
+ }, [kudosButtonCallback, kudosUrl]);
77
+ return {
78
+ kudosAction: kudosAction,
79
+ kudosButtonCallback: kudosButtonCallback,
80
+ kudosUrl: kudosUrl
81
+ };
82
+ };
83
+
84
+ var Wrapper = function Wrapper(props) {
85
+ return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, {
86
+ "data-testid": "profilecard"
87
+ }, props.children);
88
+ };
89
+
90
+ var ProfilecardInternal = function ProfilecardInternal(props) {
91
+ var _useState = (0, _react.useState)((0, _performance.getPageTime)()),
92
+ _useState2 = (0, _slicedToArray2.default)(_useState, 1),
93
+ openTime = _useState2[0];
94
+
95
+ var createAnalyticsEvent = props.createAnalyticsEvent;
96
+ var fireAnalytics = (0, _react.useCallback)(function (payload) {
97
+ if (createAnalyticsEvent) {
98
+ (0, _analytics.fireEvent)(createAnalyticsEvent, payload);
99
+ }
100
+ }, [createAnalyticsEvent]);
101
+ var fireAnalyticsWithDuration = (0, _react.useCallback)(function (generator) {
102
+ var elapsed = (0, _performance.getPageTime)() - openTime;
103
+ var event = generator(elapsed);
104
+ fireAnalytics(event);
105
+ }, [fireAnalytics, openTime]);
106
+
107
+ var _useKudos = useKudos(props.cloudId, props.userId, props.teamCentralBaseUrl, props.openKudosDrawer),
108
+ kudosAction = _useKudos.kudosAction;
109
+
110
+ var _props$actions = props.actions,
111
+ actions = _props$actions === void 0 ? [] : _props$actions,
112
+ isCurrentUser = props.isCurrentUser,
113
+ isKudosEnabled = props.isKudosEnabled,
114
+ _props$status = props.status,
115
+ status = _props$status === void 0 ? 'active' : _props$status;
116
+ var realActions = (0, _react.useMemo)(function () {
117
+ if (isCurrentUser || !isKudosEnabled || status !== 'active') {
118
+ return actions;
119
+ }
72
120
 
73
- var _super = _createSuper(Profilecard);
121
+ return actions.concat([kudosAction]);
122
+ }, [actions, isCurrentUser, isKudosEnabled, kudosAction, status]);
123
+ var isLoading = props.isLoading,
124
+ fullName = props.fullName,
125
+ hasError = props.hasError;
126
+ var canRender = !hasError && !isLoading && !!(fullName || status === 'closed');
127
+ (0, _react.useEffect)(function () {
128
+ if (canRender) {
129
+ fireAnalyticsWithDuration(function (duration) {
130
+ return (0, _analytics.profileCardRendered)('user', 'content', {
131
+ duration: duration,
132
+ numActions: realActions.length
133
+ });
134
+ });
135
+ }
136
+ }, [canRender, fireAnalyticsWithDuration, realActions]);
137
+
138
+ if (hasError) {
139
+ return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(_Error.ErrorMessage, {
140
+ reload: props.clientFetchProfile,
141
+ errorType: props.errorType || null,
142
+ fireAnalytics: fireAnalytics
143
+ }));
144
+ }
74
145
 
75
- function Profilecard(props) {
76
- var _this;
146
+ if (isLoading) {
147
+ return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(LoadingView, {
148
+ fireAnalyticsWithDuration: fireAnalyticsWithDuration
149
+ }));
150
+ }
77
151
 
78
- (0, _classCallCheck2.default)(this, Profilecard);
79
- _this = _super.call(this, props);
80
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "GIVE_KUDOS_ACTION_ID", 'give-kudos');
81
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "durationSince", function (from) {
82
- var fromParsed = from || 0;
83
- return fromParsed > 0 ? Date.now() - fromParsed : null;
84
- });
85
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "callClientFetchProfile", function () {
86
- if (_this.props.clientFetchProfile) {
87
- var _this$props;
152
+ if (!canRender) {
153
+ return null;
154
+ }
88
155
 
89
- (_this$props = _this.props).clientFetchProfile.apply(_this$props, arguments);
90
- }
91
- });
92
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "callAnalytics", function (id, options) {
93
- if (_this.props.analytics) {
94
- _this.props.analytics(id, options);
95
- }
96
- });
97
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "kudosUrl", function () {
98
- var recipientId = _this.props.userId && "&recipientId=".concat(_this.props.userId) || '';
99
- var cloudId = _this.props.cloudId && "&cloudId=".concat(_this.props.cloudId) || '';
100
- return "".concat(_this.props.teamCentralBaseUrl, "/kudos/give?type=individual").concat(recipientId).concat(cloudId);
101
- });
102
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "kudosButtonCallback", function () {
103
- if (_this.props.openKudosDrawer) {
104
- _this.props.openKudosDrawer();
105
- } else {
106
- window.open(_this.kudosUrl());
107
- }
108
- });
109
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderButton", function (action, idx) {
110
- var isGiveKudosActionButton = action.id === _this.GIVE_KUDOS_ACTION_ID;
111
-
112
- var actionButton = /*#__PURE__*/_react.default.createElement(_customThemeButton.default, {
113
- appearance: "default",
114
- key: action.id || idx,
115
- onClick: function onClick(event) {
116
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
117
- args[_key - 1] = arguments[_key];
118
- }
119
-
120
- return _this.onActionClick(action, args, event);
121
- },
122
- href: action.link
123
- }, action.label, isGiveKudosActionButton && /*#__PURE__*/_react.default.createElement(_Card.KudosBlobAnimation, null));
124
-
125
- if (isGiveKudosActionButton) {
126
- return /*#__PURE__*/_react.default.createElement(_Card.AnimatedKudosButton, null, actionButton);
127
- }
128
-
129
- return actionButton;
156
+ var isDisabledUser = status === 'inactive' || status === 'closed';
157
+ return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(_Card.CardContainer, {
158
+ isDisabledUser: isDisabledUser,
159
+ withoutElevation: props.withoutElevation
160
+ }, /*#__PURE__*/_react.default.createElement(_Card.ProfileImage, null, /*#__PURE__*/_react.default.createElement(_avatar.default, {
161
+ size: "xlarge",
162
+ src: status !== 'closed' ? props.avatarUrl : undefined,
163
+ borderColor: (0, _tokens.token)('elevation.shadow.overlay', _colors.N0)
164
+ })), /*#__PURE__*/_react.default.createElement(_Card.CardContent, null, /*#__PURE__*/_react.default.createElement(_ProfileCardDetails.ProfileCardDetails, (0, _extends2.default)({}, props, {
165
+ status: status,
166
+ fireAnalyticsWithDuration: fireAnalyticsWithDuration
167
+ })), realActions && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Card.ActionsFlexSpacer, null), /*#__PURE__*/_react.default.createElement(Actions, {
168
+ actions: realActions,
169
+ fireAnalyticsWithDuration: fireAnalyticsWithDuration
170
+ })))));
171
+ };
172
+
173
+ exports.ProfilecardInternal = ProfilecardInternal;
174
+
175
+ var Actions = function Actions(_ref) {
176
+ var actions = _ref.actions,
177
+ fireAnalyticsWithDuration = _ref.fireAnalyticsWithDuration;
178
+ var onActionClick = (0, _react.useCallback)(function (action, args, event, index) {
179
+ fireAnalyticsWithDuration(function (duration) {
180
+ return (0, _analytics.actionClicked)('user', {
181
+ duration: duration,
182
+ hasHref: !!action.link,
183
+ hasOnClick: !!action.callback,
184
+ index: index,
185
+ actionId: action.id || 'no-id-specified'
186
+ });
130
187
  });
131
- _this.timeOpen = null;
132
188
 
133
- _this.clientFetchProfile = function () {
134
- var _this2;
189
+ if (action.callback && (0, _click.isBasicClick)(event)) {
190
+ event.preventDefault();
191
+ action.callback.apply(action, [event].concat((0, _toConsumableArray2.default)(args)));
192
+ }
193
+ }, [fireAnalyticsWithDuration]);
135
194
 
136
- _this.callAnalytics(_analytics.AnalyticsName.PROFILE_CARD_RELOAD, {});
195
+ if (!actions || actions.length === 0) {
196
+ return null;
197
+ }
137
198
 
138
- (_this2 = _this).callClientFetchProfile.apply(_this2, arguments);
139
- };
199
+ var regularActions = actions.slice(0, _OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD);
200
+ var overflowActions = actions.length > _OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD ? actions.slice(_OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD) : undefined;
201
+ return /*#__PURE__*/_react.default.createElement(_Card.ActionButtonGroup, {
202
+ "data-testid": "profilecard-actions"
203
+ }, regularActions.map(function (action, index) {
204
+ var isKudos = action.id === GIVE_KUDOS_ACTION_ID;
205
+
206
+ var button = /*#__PURE__*/_react.default.createElement(_customThemeButton.default, {
207
+ appearance: "default",
208
+ key: action.id || index,
209
+ onClick: function onClick(event) {
210
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
211
+ args[_key - 1] = arguments[_key];
212
+ }
140
213
 
141
- return _this;
142
- }
214
+ return onActionClick(action, args, event, index);
215
+ },
216
+ href: action.link
217
+ }, action.label, isKudos && /*#__PURE__*/_react.default.createElement(_Card.KudosBlobAnimation, null));
143
218
 
144
- (0, _createClass2.default)(Profilecard, [{
145
- key: "componentDidMount",
146
- value: function componentDidMount() {
147
- this.timeOpen = Date.now();
148
- this.callAnalytics(_analytics.AnalyticsName.PROFILE_CARD_VIEW, {});
149
- }
150
- }, {
151
- key: "renderErrorMessage",
152
- value: function renderErrorMessage() {
153
- return /*#__PURE__*/_react.default.createElement(_Error.ErrorMessage, {
154
- reload: this.props.clientFetchProfile && this.clientFetchProfile,
155
- errorType: this.props.errorType
156
- });
219
+ if (isKudos) {
220
+ return /*#__PURE__*/_react.default.createElement(_Card.AnimatedKudosButton, null, button);
157
221
  }
158
- }, {
159
- key: "getActions",
160
- value: function getActions() {
161
- var _this3 = this;
162
-
163
- var actions = this.props.actions || [];
164
-
165
- if (!this.props.isCurrentUser && this.props.isKudosEnabled) {
166
- var kudosAction = {
167
- label: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.giveKudosButton),
168
- id: this.GIVE_KUDOS_ACTION_ID,
169
- callback: function callback() {
170
- _this3.kudosButtonCallback();
171
- },
172
- link: this.kudosUrl()
173
- };
174
- return actions.concat([kudosAction]);
175
- }
176
222
 
177
- return actions;
178
- }
179
- }, {
180
- key: "renderActionsButtons",
181
- value: function renderActionsButtons() {
182
- var _this4 = this;
183
-
184
- if (this.props.actions && this.props.actions.length === 0) {
185
- return null;
186
- }
187
-
188
- var actions = this.getActions();
189
- var firstTwoActions = actions.slice(0, 2);
190
- var restOfActions = actions && actions.length > 2 ? actions.slice(2) : undefined;
191
- return /*#__PURE__*/_react.default.createElement(_Card.ActionButtonGroup, null, firstTwoActions.map(function (action, idx) {
192
- return _this4.renderButton(action, idx);
193
- }), restOfActions && /*#__PURE__*/_react.default.createElement(_OverflowProfileCardButtons.OverflowProfileCardButtons, {
194
- actions: restOfActions,
195
- onItemClick: function onItemClick(action, args, event) {
196
- return _this4.onActionClick(action, args, event);
197
- }
198
- }));
223
+ return button;
224
+ }), overflowActions && /*#__PURE__*/_react.default.createElement(_OverflowProfileCardButtons.OverflowProfileCardButtons, {
225
+ actions: overflowActions,
226
+ fireAnalyticsWithDuration: fireAnalyticsWithDuration,
227
+ onItemClick: function onItemClick(action, args, event, index) {
228
+ return onActionClick(action, args, event, index + _OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD);
199
229
  }
200
- }, {
201
- key: "onActionClick",
202
- value: function onActionClick(action, args, event) {
203
- this.callAnalytics(_analytics.AnalyticsName.PROFILE_CARD_CLICK, {
204
- id: action.id || null,
205
- duration: this.durationSince(this.timeOpen)
230
+ }));
231
+ };
232
+
233
+ var LoadingView = function LoadingView(_ref2) {
234
+ var fireAnalyticsWithDuration = _ref2.fireAnalyticsWithDuration;
235
+ (0, _react.useEffect)(function () {
236
+ fireAnalyticsWithDuration(function (duration) {
237
+ return (0, _analytics.profileCardRendered)('user', 'spinner', {
238
+ duration: duration
206
239
  });
240
+ });
241
+ }, [fireAnalyticsWithDuration]);
242
+ return /*#__PURE__*/_react.default.createElement(_Card.SpinnerContainer, {
243
+ "data-testid": "profilecard-spinner-container"
244
+ }, /*#__PURE__*/_react.default.createElement(_spinner.default, null));
245
+ };
207
246
 
208
- if (action.callback && (0, _click.isBasicClick)(event)) {
209
- event.preventDefault();
210
- action.callback.apply(action, [event].concat((0, _toConsumableArray2.default)(args)));
211
- }
212
- }
213
- }, {
214
- key: "renderCardDetailsDefault",
215
- value: function renderCardDetailsDefault() {
216
- var _this5 = this;
217
-
218
- var _this$props2 = this.props,
219
- meta = _this$props2.meta,
220
- location = _this$props2.location,
221
- email = _this$props2.email,
222
- timestring = _this$props2.timestring,
223
- companyName = _this$props2.companyName,
224
- customLozenges = _this$props2.customLozenges;
225
- return /*#__PURE__*/_react.default.createElement(_Card.DetailsGroup, null, this.renderFullNameAndPublicName(meta), meta && /*#__PURE__*/_react.default.createElement(_Card.JobTitleLabel, null, meta), customLozenges && this.renderCustomLozenges(customLozenges), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
226
- icon: "email"
227
- }, email), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
228
- icon: "time"
229
- }, timestring), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
230
- icon: "companyName"
231
- }, companyName), /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
232
- icon: "location"
233
- }, location), /*#__PURE__*/_react.default.createElement(_ReportingLinesDetails.default, {
234
- reportingLines: this.props.reportingLines,
235
- reportingLinesProfileUrl: this.props.reportingLinesProfileUrl,
236
- onReportingLinesClick: this.props.onReportingLinesClick,
237
- analytics: this.props.analytics,
238
- getDuration: function getDuration() {
239
- return _this5.durationSince(_this5.timeOpen);
240
- }
241
- }));
242
- }
243
- }, {
244
- key: "renderCardDetailsForDisabledAccount",
245
- value: function renderCardDetailsForDisabledAccount() {
246
- var _this$props3 = this.props,
247
- status = _this$props3.status,
248
- companyName = _this$props3.companyName,
249
- hasDisabledAccountLozenge = _this$props3.hasDisabledAccountLozenge;
250
- return /*#__PURE__*/_react.default.createElement(_Card.DetailsGroup, null, /*#__PURE__*/_react.default.createElement(_Card.FullNameLabel, {
251
- noMeta: true,
252
- isDisabledAccount: true
253
- }, this.getDisabledAccountName()), hasDisabledAccountLozenge && /*#__PURE__*/_react.default.createElement(_Card.LozengeWrapper, null, /*#__PURE__*/_react.default.createElement(_lozenge.default, {
254
- appearance: "default",
255
- isBold: true
256
- }, status === 'inactive' && /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.inactiveAccountMsg), status === 'closed' && /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.closedAccountMsg))), /*#__PURE__*/_react.default.createElement(_Card.DisabledInfo, null, this.getDisabledAccountDesc()), status === 'inactive' && /*#__PURE__*/_react.default.createElement(_Icon.IconLabel, {
257
- icon: "companyName"
258
- }, companyName));
259
- }
260
- }, {
261
- key: "getDisabledAccountName",
262
- value: function getDisabledAccountName() {
263
- var _this$props4 = this.props,
264
- nickname = _this$props4.nickname,
265
- fullName = _this$props4.fullName,
266
- status = _this$props4.status;
267
-
268
- if (status === 'inactive') {
269
- return fullName || nickname;
270
- } else if (status === 'closed') {
271
- return nickname || /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.disabledAccountDefaultName);
272
- }
273
-
274
- return null;
275
- }
276
- }, {
277
- key: "getDisabledAccountDesc",
278
- value: function getDisabledAccountDesc() {
279
- var _this$props5 = this.props,
280
- _this$props5$status = _this$props5.status,
281
- status = _this$props5$status === void 0 ? 'closed' : _this$props5$status,
282
- statusModifiedDate = _this$props5.statusModifiedDate,
283
- disabledAccountMessage = _this$props5.disabledAccountMessage;
284
- var date = statusModifiedDate ? new Date(statusModifiedDate * 1000) : null;
285
- var relativeDateKey = (0, _relativeDate.default)(date); // consumer does not want to use built-in message
286
-
287
- if (disabledAccountMessage) {
288
- return disabledAccountMessage;
289
- }
290
-
291
- var secondSentence = null;
292
-
293
- if (relativeDateKey) {
294
- secondSentence = /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage // @ts-ignore
295
- , _messages.default["".concat(status, "AccountDescMsgHasDate").concat(relativeDateKey)]);
296
- } else {
297
- secondSentence =
298
- /*#__PURE__*/
299
- // @ts-ignore
300
- _react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default["".concat(status, "AccountDescMsgNoDate")]);
301
- }
302
-
303
- return /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.generalDescMsgForDisabledUser), ' ', secondSentence);
304
- }
305
- }, {
306
- key: "renderFullNameAndPublicName",
307
- value: function renderFullNameAndPublicName(meta) {
308
- var _this$props6 = this.props,
309
- nickname = _this$props6.nickname,
310
- fullName = _this$props6.fullName;
311
-
312
- if (!fullName && !nickname) {
313
- return null;
314
- }
315
-
316
- var displayName = fullName === nickname ? fullName : "".concat(fullName).concat(nickname ? " (".concat(nickname, ") ") : '');
317
- return /*#__PURE__*/_react.default.createElement(_Card.FullNameLabel, {
318
- noMeta: !meta
319
- }, displayName);
320
- } // Pass lozenges as an array rather taking it from the props. This will allow us combine the
321
- // other lozenges (like the "deactivated" lozenge) if we need to.
322
-
323
- }, {
324
- key: "renderCustomLozenges",
325
- value: function renderCustomLozenges(lozenges) {
326
- return lozenges.length > 0 ? /*#__PURE__*/_react.default.createElement(_Card.CustomLozengeContainer, null, lozenges.map(function (_ref, index) {
327
- var text = _ref.text,
328
- otherProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
329
- return /*#__PURE__*/_react.default.createElement(_lozenge.default, (0, _extends2.default)({}, otherProps, {
330
- key: index
331
- }), text);
332
- })) : null;
333
- }
334
- }, {
335
- key: "renderCardDetailsApp",
336
- value: function renderCardDetailsApp() {
337
- return /*#__PURE__*/_react.default.createElement(_Card.DetailsGroup, null, this.renderFullNameAndPublicName(), /*#__PURE__*/_react.default.createElement(_Card.AppTitleLabel, null, "App"));
338
- }
339
- }, {
340
- key: "renderCardDetails",
341
- value: function renderCardDetails() {
342
- var _this$props7 = this.props,
343
- isBot = _this$props7.isBot,
344
- status = _this$props7.status;
345
-
346
- if (isBot) {
347
- return this.renderCardDetailsApp();
348
- }
349
-
350
- if (status === 'inactive' || status === 'closed') {
351
- return this.renderCardDetailsForDisabledAccount();
352
- }
353
-
354
- return this.renderCardDetailsDefault();
355
- }
356
- }, {
357
- key: "render",
358
- value: function render() {
359
- var _this$props8 = this.props,
360
- fullName = _this$props8.fullName,
361
- status = _this$props8.status,
362
- withoutElevation = _this$props8.withoutElevation,
363
- reportingLines = _this$props8.reportingLines;
364
- var cardContent = null; // @FIXME do closed users have empty fullName field?
365
-
366
- var canRender = fullName || status === 'closed';
367
-
368
- if (this.props.hasError) {
369
- this.callAnalytics(_analytics.AnalyticsName.PROFILE_CARD_ERROR, {});
370
- cardContent = this.renderErrorMessage();
371
- } else if (this.props.isLoading) {
372
- cardContent = /*#__PURE__*/_react.default.createElement(_Card.SpinnerContainer, null, /*#__PURE__*/_react.default.createElement(_spinner.default, null));
373
- } else if (canRender) {
374
- var _reportingLines$manag, _reportingLines$repor;
375
-
376
- var isDisabledUser = status === 'inactive' || status === 'closed';
377
- var actions = this.renderActionsButtons();
378
- this.callAnalytics(_analytics.AnalyticsName.PROFILE_CARD_LOADED, {
379
- duration: this.durationSince(this.timeOpen),
380
- managersCount: (reportingLines === null || reportingLines === void 0 ? void 0 : (_reportingLines$manag = reportingLines.managers) === null || _reportingLines$manag === void 0 ? void 0 : _reportingLines$manag.length) || 0,
381
- directReportsCount: (reportingLines === null || reportingLines === void 0 ? void 0 : (_reportingLines$repor = reportingLines.reports) === null || _reportingLines$repor === void 0 ? void 0 : _reportingLines$repor.length) || 0
382
- });
383
- cardContent = /*#__PURE__*/_react.default.createElement(_Card.CardContainer, {
384
- isDisabledUser: isDisabledUser,
385
- withoutElevation: withoutElevation
386
- }, /*#__PURE__*/_react.default.createElement(_Card.ProfileImage, null, /*#__PURE__*/_react.default.createElement(_avatar.default, {
387
- size: "xlarge",
388
- src: this.props.status !== 'closed' ? this.props.avatarUrl : undefined,
389
- borderColor: (0, _tokens.token)('elevation.surface.overlay', _colors.N0)
390
- })), /*#__PURE__*/_react.default.createElement(_Card.CardContent, null, this.renderCardDetails(), actions ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Card.ActionsFlexSpacer, null), actions) : null));
391
- }
392
-
393
- return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, null, cardContent);
394
- }
395
- }]);
396
- return Profilecard;
397
- }(_react.default.PureComponent);
398
-
399
- exports.default = Profilecard;
400
- (0, _defineProperty2.default)(Profilecard, "defaultProps", {
401
- isLoading: false,
402
- hasError: false,
403
- errorType: null,
404
- status: 'active',
405
- isBot: false,
406
- isNotMentionable: false,
407
- actions: [],
408
- hasDisabledAccountLozenge: true,
409
- customLozenges: [],
410
- analytics: function analytics() {
411
- return null;
412
- },
413
- clientFetchProfile: function clientFetchProfile() {
414
- return null;
415
- }
416
- });
247
+ var _default = (0, _analyticsNext.withAnalyticsEvents)()(ProfilecardInternal);
248
+
249
+ exports.default = _default;