UNPKG

@atlaskit/profilecard

Version:

A React component to display a card with user information.

225 lines (224 loc) 11.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.ProfilecardInternal = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _reactIntlNext = require("react-intl-next"); var _analyticsNext = require("@atlaskit/analytics-next"); var _avatar = _interopRequireDefault(require("@atlaskit/avatar")); var _button = _interopRequireDefault(require("@atlaskit/button")); var _new = require("@atlaskit/button/new"); var _focusRing = _interopRequireDefault(require("@atlaskit/focus-ring")); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var _spinner = _interopRequireDefault(require("@atlaskit/spinner")); var _colors = require("@atlaskit/theme/colors"); var _messages = _interopRequireDefault(require("../../messages")); var _Card = require("../../styled/Card"); var _analytics = require("../../util/analytics"); var _click = require("../../util/click"); var _performance = require("../../util/performance"); var _Error = require("../Error"); var _OverflowProfileCardButtons = require("./OverflowProfileCardButtons"); var _ProfileCardDetails = require("./ProfileCardDetails"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } var GIVE_KUDOS_ACTION_ID = 'give-kudos'; var useKudos = function useKudos(cloudId, userId, teamCentralBaseUrl, openKudosDrawer) { var kudosUrl = (0, _react.useMemo)(function () { var recipientId = userId ? "&recipientId=".concat(userId) : ''; var cloudIdParam = cloudId ? "&cloudId=".concat(cloudId) : ''; return "".concat(teamCentralBaseUrl || '', "/kudos/give?type=individual").concat(recipientId).concat(cloudIdParam); }, [cloudId, teamCentralBaseUrl, userId]); var kudosButtonCallback = (0, _react.useCallback)(function () { if (openKudosDrawer) { openKudosDrawer(); } else { window.open(kudosUrl); } }, [kudosUrl, openKudosDrawer]); var kudosAction = (0, _react.useMemo)(function () { return { label: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.default.giveKudosButton), id: GIVE_KUDOS_ACTION_ID, callback: kudosButtonCallback, link: kudosUrl }; }, [kudosButtonCallback, kudosUrl]); return { kudosAction: kudosAction, kudosButtonCallback: kudosButtonCallback, kudosUrl: kudosUrl }; }; var Wrapper = function Wrapper(props) { return /*#__PURE__*/_react.default.createElement(_Card.CardWrapper, { testId: "profilecard", role: "dialog", labelledBy: "profilecard-name-label" }, props.children); }; var ProfilecardInternal = exports.ProfilecardInternal = function ProfilecardInternal(props) { var _useState = (0, _react.useState)((0, _performance.getPageTime)()), _useState2 = (0, _slicedToArray2.default)(_useState, 1), openTime = _useState2[0]; var createAnalyticsEvent = props.createAnalyticsEvent; var fireAnalytics = (0, _react.useCallback)(function (payload) { if (createAnalyticsEvent) { (0, _analytics.fireEvent)(createAnalyticsEvent, payload); } }, [createAnalyticsEvent]); var fireAnalyticsWithDuration = (0, _react.useCallback)(function (generator) { var elapsed = (0, _performance.getPageTime)() - openTime; var event = generator(elapsed); fireAnalytics(event); }, [fireAnalytics, openTime]); var _useKudos = useKudos(props.cloudId, props.userId, props.teamCentralBaseUrl, props.openKudosDrawer), kudosAction = _useKudos.kudosAction; var _props$actions = props.actions, actions = _props$actions === void 0 ? [] : _props$actions, isCurrentUser = props.isCurrentUser, isKudosEnabled = props.isKudosEnabled, _props$status = props.status, status = _props$status === void 0 ? 'active' : _props$status; var realActions = (0, _react.useMemo)(function () { if (isCurrentUser || !isKudosEnabled || status !== 'active') { return actions; } return actions.concat([kudosAction]); }, [actions, isCurrentUser, isKudosEnabled, kudosAction, status]); var isLoading = props.isLoading, fullName = props.fullName, hasError = props.hasError; var canRender = !hasError && !isLoading && !!(fullName || status === 'closed'); (0, _react.useEffect)(function () { if (canRender) { fireAnalyticsWithDuration(function (duration) { return (0, _analytics.profileCardRendered)('user', 'content', { duration: duration, numActions: realActions.length }); }); } }, [canRender, fireAnalyticsWithDuration, realActions]); if (hasError) { return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(_Error.ErrorMessage, { reload: props.clientFetchProfile, errorType: props.errorType || null, fireAnalytics: fireAnalytics })); } if (isLoading) { return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(LoadingView, { fireAnalyticsWithDuration: fireAnalyticsWithDuration })); } if (!canRender) { return null; } var isDisabledUser = status === 'inactive' || status === 'closed'; return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(_Card.CardContainer, { isDisabledUser: isDisabledUser, withoutElevation: props.withoutElevation }, /*#__PURE__*/_react.default.createElement(_Card.ProfileImage, null, /*#__PURE__*/_react.default.createElement(_avatar.default, { size: "xlarge", src: status !== 'closed' ? props.avatarUrl : undefined, borderColor: "var(--ds-shadow-overlay, ".concat(_colors.N0, ")") })), /*#__PURE__*/_react.default.createElement(_Card.CardContent, null, /*#__PURE__*/_react.default.createElement(_ProfileCardDetails.ProfileCardDetails, (0, _extends2.default)({}, props, { status: status, fireAnalyticsWithDuration: fireAnalyticsWithDuration })), realActions && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Card.ActionsFlexSpacer, null), /*#__PURE__*/_react.default.createElement(Actions, { actions: realActions, fireAnalyticsWithDuration: fireAnalyticsWithDuration, isTriggeredUsingKeyboard: props.isTriggeredUsingKeyboard }))))); }; var Actions = function Actions(_ref) { var actions = _ref.actions, fireAnalyticsWithDuration = _ref.fireAnalyticsWithDuration, isTriggeredUsingKeyboard = _ref.isTriggeredUsingKeyboard; var onActionClick = (0, _react.useCallback)(function (action, args, event, index) { fireAnalyticsWithDuration(function (duration) { return (0, _analytics.actionClicked)('user', { duration: duration, hasHref: !!action.link, hasOnClick: !!action.callback, index: index, actionId: action.id || 'no-id-specified' }); }); if (action.callback && (0, _click.isBasicClick)(event)) { event.preventDefault(); action.callback.apply(action, [event].concat((0, _toConsumableArray2.default)(args))); } }, [fireAnalyticsWithDuration]); if (!actions || actions.length === 0) { return null; } var regularActions = actions.slice(0, _OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD); var overflowActions = actions.length > _OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD ? actions.slice(_OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD) : undefined; return /*#__PURE__*/_react.default.createElement(_Card.ActionButtonGroup, { testId: "profilecard-actions" }, regularActions.map(function (action, index) { var isKudos = action.id === GIVE_KUDOS_ACTION_ID; var button = /*#__PURE__*/_react.default.createElement(_focusRing.default, { isInset: true, key: "profile-card-action-focus-ring_".concat(action.id || index) }, (0, _platformFeatureFlags.fg)('ptc_migrate_buttons') ? /*#__PURE__*/_react.default.createElement(_new.LinkButton, { appearance: "default", key: action.id || index, onClick: function onClick(event) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return onActionClick(action, args, event, index); }, href: action.link || '', autoFocus: index === 0 && isTriggeredUsingKeyboard, id: "action-button-".concat(action.id), "aria-labelledby": (0, _platformFeatureFlags.fg)('enable_userprofilecard_arialabelfix') ? "action-button-".concat(action.id, " profilecard-name-label") : '' }, action.label, isKudos && /*#__PURE__*/_react.default.createElement(_Card.AnimationWrapper, null, /*#__PURE__*/_react.default.createElement(_Card.KudosBlobAnimation, null))) : /*#__PURE__*/_react.default.createElement(_button.default, { appearance: "default", key: action.id || index, onClick: function onClick(event) { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } return onActionClick(action, args, event, index); }, href: action.link, autoFocus: index === 0 && isTriggeredUsingKeyboard }, action.label, isKudos && /*#__PURE__*/_react.default.createElement(_Card.AnimationWrapper, null, /*#__PURE__*/_react.default.createElement(_Card.KudosBlobAnimation, null)))); if (isKudos) { return /*#__PURE__*/_react.default.createElement(_Card.AnimatedKudosButton, { key: "profile-card-action-kudos_".concat(action.id || index) }, button); } return button; }), overflowActions && /*#__PURE__*/_react.default.createElement(_OverflowProfileCardButtons.OverflowProfileCardButtons, { actions: overflowActions, fireAnalyticsWithDuration: fireAnalyticsWithDuration, onItemClick: function onItemClick(action, args, event, index) { return onActionClick(action, args, event, index + _OverflowProfileCardButtons.ACTION_OVERFLOW_THRESHOLD); } })); }; var LoadingView = function LoadingView(_ref2) { var fireAnalyticsWithDuration = _ref2.fireAnalyticsWithDuration; (0, _react.useEffect)(function () { fireAnalyticsWithDuration(function (duration) { return (0, _analytics.profileCardRendered)('user', 'spinner', { duration: duration }); }); }, [fireAnalyticsWithDuration]); return /*#__PURE__*/_react.default.createElement(_Card.SpinnerContainer, { testId: "profilecard-spinner-container" }, /*#__PURE__*/_react.default.createElement(_spinner.default, null)); }; var _default = exports.default = (0, _analyticsNext.withAnalyticsEvents)()(ProfilecardInternal);