@atlaskit/profilecard 19.7.15 → 19.9.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 +20 -0
- package/afm-cc/tsconfig.json +3 -0
- package/dist/cjs/client/getTeamFromAGG.js +1 -1
- package/dist/cjs/components/User/ProfileCard.js +17 -5
- package/dist/cjs/components/User/ProfileCardTrigger.js +7 -2
- package/dist/cjs/components/User/ProfileCardTriggerNext.js +347 -0
- package/dist/cjs/i18n/en.js +1 -0
- package/dist/cjs/i18n/en_GB.js +1 -0
- package/dist/cjs/i18n/en_ZZ.js +1 -0
- package/dist/cjs/util/analytics.js +1 -1
- package/dist/es2019/client/getTeamFromAGG.js +1 -1
- package/dist/es2019/components/User/ProfileCard.js +18 -6
- package/dist/es2019/components/User/ProfileCardTrigger.js +6 -1
- package/dist/es2019/components/User/ProfileCardTriggerNext.js +266 -0
- package/dist/es2019/i18n/en.js +1 -0
- package/dist/es2019/i18n/en_GB.js +1 -0
- package/dist/es2019/i18n/en_ZZ.js +1 -0
- package/dist/es2019/util/analytics.js +1 -1
- package/dist/esm/client/getTeamFromAGG.js +1 -1
- package/dist/esm/components/User/ProfileCard.js +18 -6
- package/dist/esm/components/User/ProfileCardTrigger.js +6 -1
- package/dist/esm/components/User/ProfileCardTriggerNext.js +337 -0
- package/dist/esm/i18n/en.js +1 -0
- package/dist/esm/i18n/en_GB.js +1 -0
- package/dist/esm/i18n/en_ZZ.js +1 -0
- package/dist/esm/util/analytics.js +1 -1
- package/dist/types/components/User/ProfileCardTrigger.d.ts +3 -4
- package/dist/types/components/User/ProfileCardTriggerNext.d.ts +3 -0
- package/dist/types/i18n/en.d.ts +1 -0
- package/dist/types/i18n/en_GB.d.ts +1 -0
- package/dist/types/i18n/en_ZZ.d.ts +1 -0
- package/dist/types/types.d.ts +4 -1
- package/dist/types-ts4.5/components/User/ProfileCardTrigger.d.ts +3 -4
- package/dist/types-ts4.5/components/User/ProfileCardTriggerNext.d.ts +3 -0
- package/dist/types-ts4.5/i18n/en.d.ts +1 -0
- package/dist/types-ts4.5/i18n/en_GB.d.ts +1 -0
- package/dist/types-ts4.5/i18n/en_ZZ.d.ts +1 -0
- package/dist/types-ts4.5/types.d.ts +4 -1
- package/package.json +12 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/profilecard
|
|
2
2
|
|
|
3
|
+
## 19.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#70817](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/70817) [`bc59c17947b6`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/bc59c17947b6) - Add focus to view profile button when Profile card display
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
|
|
13
|
+
## 19.8.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- [#68345](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/68345) [`c769c4488d20`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c769c4488d20) - Add aria label to trigger & add ProfilecardTriggerNext
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
|
|
3
23
|
## 19.7.15
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/afm-cc/tsconfig.json
CHANGED
|
@@ -57,7 +57,7 @@ var addHeaders = exports.addHeaders = function addHeaders(headers) {
|
|
|
57
57
|
headers.append('X-ExperimentalApi', 'teams-beta');
|
|
58
58
|
headers.append('X-ExperimentalApi', 'team-members-beta');
|
|
59
59
|
headers.append('atl-client-name', "@atlaskit/profilecard");
|
|
60
|
-
headers.append('atl-client-version', "19.
|
|
60
|
+
headers.append('atl-client-version', "19.9.0");
|
|
61
61
|
return headers;
|
|
62
62
|
};
|
|
63
63
|
function getTeamFromAGG(_x, _x2, _x3) {
|
|
@@ -131,12 +131,14 @@ var ProfilecardInternal = exports.ProfilecardInternal = function ProfilecardInte
|
|
|
131
131
|
fireAnalyticsWithDuration: fireAnalyticsWithDuration
|
|
132
132
|
})), realActions && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Card.ActionsFlexSpacer, null), /*#__PURE__*/_react.default.createElement(Actions, {
|
|
133
133
|
actions: realActions,
|
|
134
|
-
fireAnalyticsWithDuration: fireAnalyticsWithDuration
|
|
134
|
+
fireAnalyticsWithDuration: fireAnalyticsWithDuration,
|
|
135
|
+
isTriggeredUsingKeyboard: props.isTriggeredUsingKeyboard
|
|
135
136
|
})))));
|
|
136
137
|
};
|
|
137
138
|
var Actions = function Actions(_ref) {
|
|
138
139
|
var actions = _ref.actions,
|
|
139
|
-
fireAnalyticsWithDuration = _ref.fireAnalyticsWithDuration
|
|
140
|
+
fireAnalyticsWithDuration = _ref.fireAnalyticsWithDuration,
|
|
141
|
+
isTriggeredUsingKeyboard = _ref.isTriggeredUsingKeyboard;
|
|
140
142
|
var onActionClick = (0, _react.useCallback)(function (action, args, event, index) {
|
|
141
143
|
fireAnalyticsWithDuration(function (duration) {
|
|
142
144
|
return (0, _analytics.actionClicked)('user', {
|
|
@@ -152,6 +154,12 @@ var Actions = function Actions(_ref) {
|
|
|
152
154
|
action.callback.apply(action, [event].concat((0, _toConsumableArray2.default)(args)));
|
|
153
155
|
}
|
|
154
156
|
}, [fireAnalyticsWithDuration]);
|
|
157
|
+
var buttonRef = (0, _react.useRef)(null);
|
|
158
|
+
(0, _react.useEffect)(function () {
|
|
159
|
+
if (actions.length > 0 && buttonRef.current && isTriggeredUsingKeyboard) {
|
|
160
|
+
buttonRef.current.focus();
|
|
161
|
+
}
|
|
162
|
+
}, [isTriggeredUsingKeyboard, actions.length]);
|
|
155
163
|
if (!actions || actions.length === 0) {
|
|
156
164
|
return null;
|
|
157
165
|
}
|
|
@@ -162,7 +170,8 @@ var Actions = function Actions(_ref) {
|
|
|
162
170
|
}, regularActions.map(function (action, index) {
|
|
163
171
|
var isKudos = action.id === GIVE_KUDOS_ACTION_ID;
|
|
164
172
|
var button = /*#__PURE__*/_react.default.createElement(_focusRing.default, {
|
|
165
|
-
isInset: true
|
|
173
|
+
isInset: true,
|
|
174
|
+
key: "profile-card-action-focus-ring_".concat(action.id || index)
|
|
166
175
|
}, /*#__PURE__*/_react.default.createElement(_customThemeButton.default, {
|
|
167
176
|
appearance: "default",
|
|
168
177
|
key: action.id || index,
|
|
@@ -172,10 +181,13 @@ var Actions = function Actions(_ref) {
|
|
|
172
181
|
}
|
|
173
182
|
return onActionClick(action, args, event, index);
|
|
174
183
|
},
|
|
175
|
-
href: action.link
|
|
184
|
+
href: action.link,
|
|
185
|
+
ref: index === 0 ? buttonRef : undefined
|
|
176
186
|
}, action.label, isKudos && /*#__PURE__*/_react.default.createElement(_Card.AnimationWrapper, null, /*#__PURE__*/_react.default.createElement(_Card.KudosBlobAnimation, null))));
|
|
177
187
|
if (isKudos) {
|
|
178
|
-
return /*#__PURE__*/_react.default.createElement(_Card.AnimatedKudosButton,
|
|
188
|
+
return /*#__PURE__*/_react.default.createElement(_Card.AnimatedKudosButton, {
|
|
189
|
+
key: "profile-card-action-kudos_".concat(action.id || index)
|
|
190
|
+
}, button);
|
|
179
191
|
}
|
|
180
192
|
return button;
|
|
181
193
|
}), overflowActions && /*#__PURE__*/_react.default.createElement(_OverflowProfileCardButtons.OverflowProfileCardButtons, {
|
|
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.default =
|
|
8
|
+
exports.default = ProfilecardTriggerSwitch;
|
|
9
9
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
11
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
@@ -19,6 +19,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
19
19
|
var _react = _interopRequireWildcard(require("react"));
|
|
20
20
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
21
21
|
var _giveKudos = require("@atlaskit/give-kudos");
|
|
22
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
22
23
|
var _popup = _interopRequireDefault(require("@atlaskit/popup"));
|
|
23
24
|
var _constants = require("@atlaskit/theme/constants");
|
|
24
25
|
var _filterActions2 = _interopRequireDefault(require("../../internal/filterActions"));
|
|
@@ -26,6 +27,7 @@ var _Card = require("../../styled/Card");
|
|
|
26
27
|
var _analytics = require("../../util/analytics");
|
|
27
28
|
var _config = require("../../util/config");
|
|
28
29
|
var _lazyProfileCard = require("./lazyProfileCard");
|
|
30
|
+
var _ProfileCardTriggerNext = _interopRequireDefault(require("./ProfileCardTriggerNext"));
|
|
29
31
|
var _UserLoadingState = _interopRequireDefault(require("./UserLoadingState"));
|
|
30
32
|
var _excluded = ["ref"];
|
|
31
33
|
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); }
|
|
@@ -325,4 +327,7 @@ var ProfilecardTrigger = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
325
327
|
trigger: 'hover',
|
|
326
328
|
position: 'bottom-start'
|
|
327
329
|
});
|
|
328
|
-
var
|
|
330
|
+
var ProfilecardTriggerLegacy = (0, _analyticsNext.withAnalyticsEvents)()(ProfilecardTrigger);
|
|
331
|
+
function ProfilecardTriggerSwitch(props) {
|
|
332
|
+
return (0, _platformFeatureFlags.getBooleanFF)('platform.profile-card-trigger-next') ? /*#__PURE__*/_react.default.createElement(_ProfileCardTriggerNext.default, props) : /*#__PURE__*/_react.default.createElement(ProfilecardTriggerLegacy, props);
|
|
333
|
+
}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = ProfilecardTriggerNext;
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
18
|
+
var _giveKudos = require("@atlaskit/give-kudos");
|
|
19
|
+
var _popup = _interopRequireDefault(require("@atlaskit/popup"));
|
|
20
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
21
|
+
var _filterActions = _interopRequireDefault(require("../../internal/filterActions"));
|
|
22
|
+
var _Card = require("../../styled/Card");
|
|
23
|
+
var _analytics = require("../../util/analytics");
|
|
24
|
+
var _config = require("../../util/config");
|
|
25
|
+
var _lazyProfileCard = require("./lazyProfileCard");
|
|
26
|
+
var _UserLoadingState = _interopRequireDefault(require("./UserLoadingState"));
|
|
27
|
+
var _excluded = ["ref"];
|
|
28
|
+
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); }
|
|
29
|
+
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; }
|
|
30
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
31
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
32
|
+
function ProfilecardTriggerNext(_ref) {
|
|
33
|
+
var _ref$trigger = _ref.trigger,
|
|
34
|
+
trigger = _ref$trigger === void 0 ? 'hover' : _ref$trigger,
|
|
35
|
+
userId = _ref.userId,
|
|
36
|
+
cloudId = _ref.cloudId,
|
|
37
|
+
resourceClient = _ref.resourceClient,
|
|
38
|
+
_ref$actions = _ref.actions,
|
|
39
|
+
actions = _ref$actions === void 0 ? [] : _ref$actions,
|
|
40
|
+
_ref$position = _ref.position,
|
|
41
|
+
position = _ref$position === void 0 ? 'bottom-start' : _ref$position,
|
|
42
|
+
children = _ref.children,
|
|
43
|
+
testId = _ref.testId,
|
|
44
|
+
addFlag = _ref.addFlag,
|
|
45
|
+
onReportingLinesClick = _ref.onReportingLinesClick,
|
|
46
|
+
ariaLabel = _ref.ariaLabel,
|
|
47
|
+
ariaLabelledBy = _ref.ariaLabelledBy;
|
|
48
|
+
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
49
|
+
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
50
|
+
var _useState = (0, _react.useState)(false),
|
|
51
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
52
|
+
isMounted = _useState2[0],
|
|
53
|
+
setIsMounted = _useState2[1];
|
|
54
|
+
var showDelay = trigger === 'click' ? 0 : _config.DELAY_MS_SHOW;
|
|
55
|
+
var hideDelay = trigger === 'click' ? 0 : _config.DELAY_MS_HIDE;
|
|
56
|
+
var _useState3 = (0, _react.useState)(0),
|
|
57
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
58
|
+
showTimer = _useState4[0],
|
|
59
|
+
setShowTimer = _useState4[1];
|
|
60
|
+
var _useState5 = (0, _react.useState)(0),
|
|
61
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
62
|
+
hideTimer = _useState6[0],
|
|
63
|
+
setHideTimer = _useState6[1];
|
|
64
|
+
var _useState7 = (0, _react.useState)(false),
|
|
65
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
66
|
+
visible = _useState8[0],
|
|
67
|
+
setVisible = _useState8[1];
|
|
68
|
+
var _useState9 = (0, _react.useState)(undefined),
|
|
69
|
+
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
70
|
+
isLoading = _useState10[0],
|
|
71
|
+
setIsLoading = _useState10[1];
|
|
72
|
+
var _useState11 = (0, _react.useState)(false),
|
|
73
|
+
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
74
|
+
hasError = _useState12[0],
|
|
75
|
+
setHasError = _useState12[1];
|
|
76
|
+
var _useState13 = (0, _react.useState)(null),
|
|
77
|
+
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
78
|
+
error = _useState14[0],
|
|
79
|
+
setError = _useState14[1];
|
|
80
|
+
var _useState15 = (0, _react.useState)(null),
|
|
81
|
+
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
82
|
+
data = _useState16[0],
|
|
83
|
+
setData = _useState16[1];
|
|
84
|
+
var _useState17 = (0, _react.useState)(undefined),
|
|
85
|
+
_useState18 = (0, _slicedToArray2.default)(_useState17, 2),
|
|
86
|
+
reportingLinesData = _useState18[0],
|
|
87
|
+
setReportingLinesData = _useState18[1];
|
|
88
|
+
var _useState19 = (0, _react.useState)(false),
|
|
89
|
+
_useState20 = (0, _slicedToArray2.default)(_useState19, 2),
|
|
90
|
+
shouldShowGiveKudos = _useState20[0],
|
|
91
|
+
setShouldShowGiveKudos = _useState20[1];
|
|
92
|
+
var _useState21 = (0, _react.useState)(undefined),
|
|
93
|
+
_useState22 = (0, _slicedToArray2.default)(_useState21, 2),
|
|
94
|
+
teamCentralBaseUrl = _useState22[0],
|
|
95
|
+
setTeamCentralBaseUrl = _useState22[1];
|
|
96
|
+
var _useState23 = (0, _react.useState)(false),
|
|
97
|
+
_useState24 = (0, _slicedToArray2.default)(_useState23, 2),
|
|
98
|
+
kudosDrawerOpen = _useState24[0],
|
|
99
|
+
setKudosDrawerOpen = _useState24[1];
|
|
100
|
+
var _useState25 = (0, _react.useState)(false),
|
|
101
|
+
_useState26 = (0, _slicedToArray2.default)(_useState25, 2),
|
|
102
|
+
isTriggeredUsingKeyboard = _useState26[0],
|
|
103
|
+
setTriggeredUsingKeyboard = _useState26[1];
|
|
104
|
+
var triggerRef = (0, _react.useRef)(null);
|
|
105
|
+
(0, _react.useEffect)(function () {
|
|
106
|
+
setIsMounted(true);
|
|
107
|
+
return function () {
|
|
108
|
+
setIsMounted(false);
|
|
109
|
+
clearTimeout(showTimer);
|
|
110
|
+
clearTimeout(hideTimer);
|
|
111
|
+
};
|
|
112
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
113
|
+
}, []);
|
|
114
|
+
(0, _react.useEffect)(function () {
|
|
115
|
+
// Reset state when the userId changes
|
|
116
|
+
setIsLoading(undefined);
|
|
117
|
+
setHasError(false);
|
|
118
|
+
setError(null);
|
|
119
|
+
setData(null);
|
|
120
|
+
setReportingLinesData(undefined);
|
|
121
|
+
setShouldShowGiveKudos(false);
|
|
122
|
+
setTeamCentralBaseUrl(undefined);
|
|
123
|
+
}, [userId]);
|
|
124
|
+
var fireAnalytics = (0, _react.useCallback)(function (payload) {
|
|
125
|
+
// Don't fire any analytics if the component is unmounted
|
|
126
|
+
if (!isMounted) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
(0, _analytics.fireEvent)(createAnalyticsEvent, payload);
|
|
130
|
+
}, [createAnalyticsEvent, isMounted]);
|
|
131
|
+
var hideProfilecard = (0, _react.useCallback)(function () {
|
|
132
|
+
clearTimeout(showTimer);
|
|
133
|
+
clearTimeout(hideTimer);
|
|
134
|
+
if (!isTriggeredUsingKeyboard) {
|
|
135
|
+
setHideTimer(window.setTimeout(function () {
|
|
136
|
+
setVisible(false);
|
|
137
|
+
}, hideDelay));
|
|
138
|
+
}
|
|
139
|
+
setTriggeredUsingKeyboard(false);
|
|
140
|
+
}, [hideDelay, hideTimer, showTimer, isTriggeredUsingKeyboard]);
|
|
141
|
+
var handleKeyboardClose = (0, _react.useCallback)(function (event) {
|
|
142
|
+
if (event.key !== 'Escape') {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (triggerRef.current) {
|
|
146
|
+
triggerRef.current.focus();
|
|
147
|
+
}
|
|
148
|
+
setTriggeredUsingKeyboard(false);
|
|
149
|
+
setVisible(false);
|
|
150
|
+
}, [setTriggeredUsingKeyboard, setVisible]);
|
|
151
|
+
var handleClientSuccess = (0, _react.useCallback)(function (profileData, reportingLinesData, shouldShowGiveKudos) {
|
|
152
|
+
if (!isMounted) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
setIsLoading(false);
|
|
156
|
+
setHasError(false);
|
|
157
|
+
setData(profileData);
|
|
158
|
+
setReportingLinesData(reportingLinesData);
|
|
159
|
+
setShouldShowGiveKudos(shouldShowGiveKudos);
|
|
160
|
+
}, [isMounted, setHasError, setIsLoading, setData, setReportingLinesData, setShouldShowGiveKudos]);
|
|
161
|
+
var handleClientError = (0, _react.useCallback)(function (err) {
|
|
162
|
+
if (!isMounted) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
setIsLoading(false);
|
|
166
|
+
setHasError(true);
|
|
167
|
+
setError(err);
|
|
168
|
+
}, [isMounted, setHasError, setIsLoading, setError]);
|
|
169
|
+
var clientFetchProfile = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
170
|
+
var requests, responses;
|
|
171
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
172
|
+
while (1) switch (_context.prev = _context.next) {
|
|
173
|
+
case 0:
|
|
174
|
+
if (!(isLoading === true)) {
|
|
175
|
+
_context.next = 2;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
return _context.abrupt("return");
|
|
179
|
+
case 2:
|
|
180
|
+
setTeamCentralBaseUrl(resourceClient.getTeamCentralBaseUrl());
|
|
181
|
+
setIsLoading(true);
|
|
182
|
+
setHasError(false);
|
|
183
|
+
setError(null);
|
|
184
|
+
setData(null);
|
|
185
|
+
_context.prev = 7;
|
|
186
|
+
requests = Promise.all([resourceClient.getProfile(cloudId || '', userId, fireAnalytics), resourceClient.getReportingLines(userId), resourceClient.shouldShowGiveKudos()]);
|
|
187
|
+
_context.next = 11;
|
|
188
|
+
return requests;
|
|
189
|
+
case 11:
|
|
190
|
+
responses = _context.sent;
|
|
191
|
+
handleClientSuccess.apply(void 0, (0, _toConsumableArray2.default)(responses));
|
|
192
|
+
_context.next = 18;
|
|
193
|
+
break;
|
|
194
|
+
case 15:
|
|
195
|
+
_context.prev = 15;
|
|
196
|
+
_context.t0 = _context["catch"](7);
|
|
197
|
+
handleClientError(_context.t0);
|
|
198
|
+
case 18:
|
|
199
|
+
case "end":
|
|
200
|
+
return _context.stop();
|
|
201
|
+
}
|
|
202
|
+
}, _callee, null, [[7, 15]]);
|
|
203
|
+
})), [cloudId, fireAnalytics, isLoading, resourceClient, userId, handleClientSuccess, handleClientError]);
|
|
204
|
+
var showProfilecard = (0, _react.useCallback)(function () {
|
|
205
|
+
clearTimeout(hideTimer);
|
|
206
|
+
clearTimeout(showTimer);
|
|
207
|
+
setShowTimer(window.setTimeout(function () {
|
|
208
|
+
if (!visible) {
|
|
209
|
+
void clientFetchProfile();
|
|
210
|
+
setVisible(true);
|
|
211
|
+
}
|
|
212
|
+
}, showDelay));
|
|
213
|
+
}, [hideTimer, showDelay, showTimer, visible, clientFetchProfile]);
|
|
214
|
+
var onClick = (0, _react.useCallback)(function (event) {
|
|
215
|
+
// If the user clicks on the trigger then we don't want that click event to
|
|
216
|
+
// propagate out to parent containers. For example when clicking a mention
|
|
217
|
+
// lozenge in an inline-edit.
|
|
218
|
+
event.stopPropagation();
|
|
219
|
+
showProfilecard();
|
|
220
|
+
if (!visible) {
|
|
221
|
+
fireAnalytics((0, _analytics.cardTriggered)('user', 'click'));
|
|
222
|
+
}
|
|
223
|
+
}, [fireAnalytics, showProfilecard, visible]);
|
|
224
|
+
var onMouseEnter = (0, _react.useCallback)(function () {
|
|
225
|
+
showProfilecard();
|
|
226
|
+
if (!visible) {
|
|
227
|
+
fireAnalytics((0, _analytics.cardTriggered)('user', 'hover'));
|
|
228
|
+
}
|
|
229
|
+
}, [fireAnalytics, showProfilecard, visible]);
|
|
230
|
+
var onKeyPress = (0, _react.useCallback)(function (event) {
|
|
231
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
232
|
+
event.preventDefault();
|
|
233
|
+
setTriggeredUsingKeyboard(true);
|
|
234
|
+
showProfilecard();
|
|
235
|
+
if (!visible) {
|
|
236
|
+
fireAnalytics((0, _analytics.cardTriggered)('user', 'click'));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}, [fireAnalytics, showProfilecard, visible]);
|
|
240
|
+
var onFocus = (0, _react.useCallback)(function () {
|
|
241
|
+
showProfilecard();
|
|
242
|
+
}, [showProfilecard]);
|
|
243
|
+
var containerListeners = (0, _react.useMemo)(function () {
|
|
244
|
+
return trigger === 'hover' ? {
|
|
245
|
+
onMouseEnter: onMouseEnter,
|
|
246
|
+
onMouseLeave: hideProfilecard,
|
|
247
|
+
onBlur: hideProfilecard,
|
|
248
|
+
onKeyPress: onKeyPress
|
|
249
|
+
} : {
|
|
250
|
+
onClick: onClick,
|
|
251
|
+
onKeyPress: onKeyPress
|
|
252
|
+
};
|
|
253
|
+
}, [hideProfilecard, onClick, onKeyPress, onMouseEnter, trigger]);
|
|
254
|
+
var filterActions = (0, _react.useCallback)(function () {
|
|
255
|
+
return (0, _filterActions.default)(actions, data);
|
|
256
|
+
}, [actions, data]);
|
|
257
|
+
var openKudosDrawer = function openKudosDrawer() {
|
|
258
|
+
hideProfilecard();
|
|
259
|
+
setKudosDrawerOpen(true);
|
|
260
|
+
};
|
|
261
|
+
var closeKudosDrawer = function closeKudosDrawer() {
|
|
262
|
+
setKudosDrawerOpen(false);
|
|
263
|
+
};
|
|
264
|
+
var showLoading = isLoading === true || isLoading === undefined;
|
|
265
|
+
var wrapperProps = (0, _react.useMemo)(function () {
|
|
266
|
+
return trigger === 'hover' ? {
|
|
267
|
+
onMouseEnter: onMouseEnter,
|
|
268
|
+
onMouseLeave: hideProfilecard,
|
|
269
|
+
onFocus: onFocus
|
|
270
|
+
} : {};
|
|
271
|
+
}, [hideProfilecard, onFocus, onMouseEnter, trigger]);
|
|
272
|
+
var profilecardProps = _objectSpread(_objectSpread({
|
|
273
|
+
userId: userId,
|
|
274
|
+
isCurrentUser: data === null || data === void 0 ? void 0 : data.isCurrentUser,
|
|
275
|
+
clientFetchProfile: clientFetchProfile
|
|
276
|
+
}, data), {}, {
|
|
277
|
+
reportingLines: reportingLinesData,
|
|
278
|
+
onReportingLinesClick: onReportingLinesClick,
|
|
279
|
+
isKudosEnabled: shouldShowGiveKudos,
|
|
280
|
+
teamCentralBaseUrl: teamCentralBaseUrl,
|
|
281
|
+
cloudId: cloudId,
|
|
282
|
+
openKudosDrawer: openKudosDrawer,
|
|
283
|
+
isTriggeredUsingKeyboard: isTriggeredUsingKeyboard
|
|
284
|
+
});
|
|
285
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_popup.default, {
|
|
286
|
+
isOpen: !!visible,
|
|
287
|
+
onClose: function onClose(event) {
|
|
288
|
+
hideProfilecard();
|
|
289
|
+
handleKeyboardClose(event);
|
|
290
|
+
},
|
|
291
|
+
placement: position,
|
|
292
|
+
content: function content() {
|
|
293
|
+
return showLoading ? /*#__PURE__*/_react.default.createElement(LoadingView, {
|
|
294
|
+
fireAnalytics: fireAnalytics
|
|
295
|
+
}) : /*#__PURE__*/_react.default.createElement("div", wrapperProps, visible && /*#__PURE__*/_react.default.createElement(_react.Suspense, {
|
|
296
|
+
fallback: null
|
|
297
|
+
}, /*#__PURE__*/_react.default.createElement(_lazyProfileCard.ProfileCardLazy, (0, _extends2.default)({}, profilecardProps, {
|
|
298
|
+
actions: filterActions(),
|
|
299
|
+
hasError: hasError,
|
|
300
|
+
errorType: error,
|
|
301
|
+
withoutElevation: true
|
|
302
|
+
}))));
|
|
303
|
+
},
|
|
304
|
+
trigger: function trigger(triggerProps) {
|
|
305
|
+
var callbackRef = triggerProps.ref,
|
|
306
|
+
innerProps = (0, _objectWithoutProperties2.default)(triggerProps, _excluded);
|
|
307
|
+
var ref = function ref(element) {
|
|
308
|
+
triggerRef.current = element;
|
|
309
|
+
if (typeof callbackRef === 'function') {
|
|
310
|
+
callbackRef(element);
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
return /*#__PURE__*/_react.default.createElement("span", (0, _extends2.default)({}, innerProps, containerListeners, {
|
|
314
|
+
ref: ref,
|
|
315
|
+
"data-testid": testId,
|
|
316
|
+
role: "button",
|
|
317
|
+
tabIndex: 0,
|
|
318
|
+
"aria-label": ariaLabel,
|
|
319
|
+
"aria-labelledby": ariaLabelledBy
|
|
320
|
+
}), children);
|
|
321
|
+
},
|
|
322
|
+
zIndex: _constants.layers.modal(),
|
|
323
|
+
shouldUseCaptureOnOutsideClick: true,
|
|
324
|
+
autoFocus: trigger === 'click'
|
|
325
|
+
}), shouldShowGiveKudos && /*#__PURE__*/_react.default.createElement(_react.Suspense, {
|
|
326
|
+
fallback: null
|
|
327
|
+
}, /*#__PURE__*/_react.default.createElement(_giveKudos.GiveKudosLauncherLazy, {
|
|
328
|
+
isOpen: kudosDrawerOpen,
|
|
329
|
+
recipient: {
|
|
330
|
+
type: _giveKudos.KudosType.INDIVIDUAL,
|
|
331
|
+
recipientId: userId
|
|
332
|
+
},
|
|
333
|
+
analyticsSource: "profile-card",
|
|
334
|
+
teamCentralBaseUrl: teamCentralBaseUrl,
|
|
335
|
+
cloudId: cloudId,
|
|
336
|
+
addFlag: addFlag,
|
|
337
|
+
onClose: closeKudosDrawer
|
|
338
|
+
})));
|
|
339
|
+
}
|
|
340
|
+
var LoadingView = function LoadingView(_ref3) {
|
|
341
|
+
var fireAnalytics = _ref3.fireAnalytics;
|
|
342
|
+
return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, {
|
|
343
|
+
"data-testId": "profilecard.profilecardtrigger.loading"
|
|
344
|
+
}, /*#__PURE__*/_react.default.createElement(_UserLoadingState.default, {
|
|
345
|
+
fireAnalytics: fireAnalytics
|
|
346
|
+
}));
|
|
347
|
+
};
|
package/dist/cjs/i18n/en.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.default = void 0;
|
|
|
13
13
|
*/
|
|
14
14
|
//
|
|
15
15
|
var _default = exports.default = {
|
|
16
|
+
'profilecard.user.trigger.aria-label': 'More information about {fullName}',
|
|
16
17
|
'pt.profile-card.closed.account': 'Account deleted',
|
|
17
18
|
'pt.profile-card.closed.account.has.date.a.few.months': 'Their account has been deleted for a few months.',
|
|
18
19
|
'pt.profile-card.closed.account.has.date.last.month': 'Their account was deleted last month.',
|
package/dist/cjs/i18n/en_GB.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.default = void 0;
|
|
|
13
13
|
*/
|
|
14
14
|
//English (United Kingdom)
|
|
15
15
|
var _default = exports.default = {
|
|
16
|
+
'profilecard.user.trigger.aria-label': 'More information about {fullName}',
|
|
16
17
|
'pt.profile-card.closed.account': 'Account deleted',
|
|
17
18
|
'pt.profile-card.closed.account.has.date.a.few.months': 'Their account has been deleted for a few months.',
|
|
18
19
|
'pt.profile-card.closed.account.has.date.last.month': 'Their account was deleted last month.',
|
package/dist/cjs/i18n/en_ZZ.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.default = void 0;
|
|
|
13
13
|
*/
|
|
14
14
|
//
|
|
15
15
|
var _default = exports.default = {
|
|
16
|
+
'profilecard.user.trigger.aria-label': 'More information about {fullName}',
|
|
16
17
|
'pt.profile-card.closed.account': 'Account deleted',
|
|
17
18
|
'pt.profile-card.closed.account.has.date.a.few.months': 'Their account has been deleted for a few months.',
|
|
18
19
|
'pt.profile-card.closed.account.has.date.last.month': 'Their account was deleted last month.',
|
|
@@ -44,7 +44,7 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
|
|
|
44
44
|
actionSubjectId: actionSubjectId,
|
|
45
45
|
attributes: _objectSpread(_objectSpread({
|
|
46
46
|
packageName: "@atlaskit/profilecard",
|
|
47
|
-
packageVersion: "19.
|
|
47
|
+
packageVersion: "19.9.0"
|
|
48
48
|
}, attributes), {}, {
|
|
49
49
|
firedAt: Math.round((0, _performance.getPageTime)())
|
|
50
50
|
})
|
|
@@ -67,7 +67,7 @@ export const addHeaders = headers => {
|
|
|
67
67
|
headers.append('X-ExperimentalApi', 'teams-beta');
|
|
68
68
|
headers.append('X-ExperimentalApi', 'team-members-beta');
|
|
69
69
|
headers.append('atl-client-name', "@atlaskit/profilecard");
|
|
70
|
-
headers.append('atl-client-version', "19.
|
|
70
|
+
headers.append('atl-client-version', "19.9.0");
|
|
71
71
|
return headers;
|
|
72
72
|
};
|
|
73
73
|
export async function getTeamFromAGG(url, teamId, siteId) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import { FormattedMessage } from 'react-intl-next';
|
|
4
4
|
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
5
5
|
import Avatar from '@atlaskit/avatar';
|
|
@@ -118,12 +118,14 @@ export const ProfilecardInternal = props => {
|
|
|
118
118
|
fireAnalyticsWithDuration: fireAnalyticsWithDuration
|
|
119
119
|
})), realActions && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ActionsFlexSpacer, null), /*#__PURE__*/React.createElement(Actions, {
|
|
120
120
|
actions: realActions,
|
|
121
|
-
fireAnalyticsWithDuration: fireAnalyticsWithDuration
|
|
121
|
+
fireAnalyticsWithDuration: fireAnalyticsWithDuration,
|
|
122
|
+
isTriggeredUsingKeyboard: props.isTriggeredUsingKeyboard
|
|
122
123
|
})))));
|
|
123
124
|
};
|
|
124
125
|
const Actions = ({
|
|
125
126
|
actions,
|
|
126
|
-
fireAnalyticsWithDuration
|
|
127
|
+
fireAnalyticsWithDuration,
|
|
128
|
+
isTriggeredUsingKeyboard
|
|
127
129
|
}) => {
|
|
128
130
|
const onActionClick = useCallback((action, args, event, index) => {
|
|
129
131
|
fireAnalyticsWithDuration(duration => actionClicked('user', {
|
|
@@ -138,6 +140,12 @@ const Actions = ({
|
|
|
138
140
|
action.callback(event, ...args);
|
|
139
141
|
}
|
|
140
142
|
}, [fireAnalyticsWithDuration]);
|
|
143
|
+
const buttonRef = useRef(null);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
if (actions.length > 0 && buttonRef.current && isTriggeredUsingKeyboard) {
|
|
146
|
+
buttonRef.current.focus();
|
|
147
|
+
}
|
|
148
|
+
}, [isTriggeredUsingKeyboard, actions.length]);
|
|
141
149
|
if (!actions || actions.length === 0) {
|
|
142
150
|
return null;
|
|
143
151
|
}
|
|
@@ -148,15 +156,19 @@ const Actions = ({
|
|
|
148
156
|
}, regularActions.map((action, index) => {
|
|
149
157
|
const isKudos = action.id === GIVE_KUDOS_ACTION_ID;
|
|
150
158
|
const button = /*#__PURE__*/React.createElement(FocusRing, {
|
|
151
|
-
isInset: true
|
|
159
|
+
isInset: true,
|
|
160
|
+
key: `profile-card-action-focus-ring_${action.id || index}`
|
|
152
161
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
153
162
|
appearance: "default",
|
|
154
163
|
key: action.id || index,
|
|
155
164
|
onClick: (event, ...args) => onActionClick(action, args, event, index),
|
|
156
|
-
href: action.link
|
|
165
|
+
href: action.link,
|
|
166
|
+
ref: index === 0 ? buttonRef : undefined
|
|
157
167
|
}, action.label, isKudos && /*#__PURE__*/React.createElement(AnimationWrapper, null, /*#__PURE__*/React.createElement(KudosBlobAnimation, null))));
|
|
158
168
|
if (isKudos) {
|
|
159
|
-
return /*#__PURE__*/React.createElement(AnimatedKudosButton,
|
|
169
|
+
return /*#__PURE__*/React.createElement(AnimatedKudosButton, {
|
|
170
|
+
key: `profile-card-action-kudos_${action.id || index}`
|
|
171
|
+
}, button);
|
|
160
172
|
}
|
|
161
173
|
return button;
|
|
162
174
|
}), overflowActions && /*#__PURE__*/React.createElement(OverflowProfileCardButtons, {
|
|
@@ -3,6 +3,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
3
3
|
import React, { Suspense } from 'react';
|
|
4
4
|
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
5
5
|
import { GiveKudosLauncherLazy, KudosType } from '@atlaskit/give-kudos';
|
|
6
|
+
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
6
7
|
import Popup from '@atlaskit/popup';
|
|
7
8
|
import { layers } from '@atlaskit/theme/constants';
|
|
8
9
|
import filterActions from '../../internal/filterActions';
|
|
@@ -10,6 +11,7 @@ import { CardWrapper } from '../../styled/Card';
|
|
|
10
11
|
import { cardTriggered, fireEvent } from '../../util/analytics';
|
|
11
12
|
import { DELAY_MS_HIDE, DELAY_MS_SHOW } from '../../util/config';
|
|
12
13
|
import { ProfileCardLazy } from './lazyProfileCard';
|
|
14
|
+
import ProfilecardTriggerNext from './ProfileCardTriggerNext';
|
|
13
15
|
import UserLoadingState from './UserLoadingState';
|
|
14
16
|
class ProfilecardTrigger extends React.PureComponent {
|
|
15
17
|
constructor(...args) {
|
|
@@ -276,4 +278,7 @@ _defineProperty(ProfilecardTrigger, "defaultProps", {
|
|
|
276
278
|
trigger: 'hover',
|
|
277
279
|
position: 'bottom-start'
|
|
278
280
|
});
|
|
279
|
-
|
|
281
|
+
const ProfilecardTriggerLegacy = withAnalyticsEvents()(ProfilecardTrigger);
|
|
282
|
+
export default function ProfilecardTriggerSwitch(props) {
|
|
283
|
+
return getBooleanFF('platform.profile-card-trigger-next') ? /*#__PURE__*/React.createElement(ProfilecardTriggerNext, props) : /*#__PURE__*/React.createElement(ProfilecardTriggerLegacy, props);
|
|
284
|
+
}
|