@atlaskit/profilecard
Version:
A React component to display a card with user information.
239 lines (238 loc) • 11.9 kB
JavaScript
"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.ProfileCardResourcedInternal = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _giveKudos = require("@atlaskit/give-kudos");
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _teamsAppInternalAnalytics = require("@atlaskit/teams-app-internal-analytics");
var _filterActions = _interopRequireDefault(require("../../internal/filterActions"));
var _UserTrigger = require("../../styled/UserTrigger");
var _Error = require("../Error");
var _ProfileCard = _interopRequireDefault(require("./ProfileCard"));
var _UserLoadingState = _interopRequireDefault(require("./UserLoadingState"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
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; }
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; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var ProfileCardResourced = /*#__PURE__*/function (_React$PureComponent) {
function ProfileCardResourced() {
var _this;
(0, _classCallCheck2.default)(this, ProfileCardResourced);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, ProfileCardResourced, [].concat(args));
(0, _defineProperty2.default)(_this, "_isMounted", false);
(0, _defineProperty2.default)(_this, "state", {
visible: false,
isLoading: undefined,
hasError: false,
error: null,
data: null,
reportingLinesData: undefined,
isKudosEnabled: false,
kudosDrawerOpen: false,
teamCentralBaseUrl: undefined
});
(0, _defineProperty2.default)(_this, "fireAnalytics", function (eventKey) {
// Don't fire analytics if the component is unmounted
if (!_this._isMounted) {
return;
}
if (_this.props.fireEvent) {
var _this$props;
for (var _len2 = arguments.length, attributes = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
attributes[_key2 - 1] = arguments[_key2];
}
(_this$props = _this.props).fireEvent.apply(_this$props, [eventKey].concat(attributes));
}
});
(0, _defineProperty2.default)(_this, "clientFetchProfile", function () {
var _this$props2 = _this.props,
cloudId = _this$props2.cloudId,
userId = _this$props2.userId;
var isLoading = _this.state.isLoading;
if (isLoading === true) {
// don't fetch data when fetching is in process
return;
}
_this.setState({
isLoading: true,
hasError: false,
data: null
}, function () {
var shouldHideReportingLines = (0, _platformFeatureFlags.fg)('jira_ai_profilecard_hide_reportinglines') && _this.props.hideReportingLines;
var requests = Promise.all([_this.props.resourceClient.getProfile(cloudId, userId, _this.fireAnalytics), shouldHideReportingLines ? Promise.resolve({
managers: [],
reports: []
}) : _this.props.resourceClient.getReportingLines(userId), _this.props.resourceClient.shouldShowGiveKudos(), _this.props.resourceClient.getTeamCentralBaseUrl({
withOrgContext: true,
withSiteContext: true
})]);
requests.then(function (res) {
var _this2;
return (_this2 = _this).handleClientSuccess.apply(_this2, (0, _toConsumableArray2.default)(res));
}, function (err) {
return _this.handleClientError(err);
}).catch(function (err) {
return _this.handleClientError(err);
});
});
});
(0, _defineProperty2.default)(_this, "filterActions", function () {
return (0, _filterActions.default)(_this.props.actions, _this.state.data);
});
(0, _defineProperty2.default)(_this, "openKudosDrawer", function () {
_this.setState({
kudosDrawerOpen: true
});
});
(0, _defineProperty2.default)(_this, "closeKudosDrawer", function () {
_this.setState({
kudosDrawerOpen: false
});
});
return _this;
}
(0, _inherits2.default)(ProfileCardResourced, _React$PureComponent);
return (0, _createClass2.default)(ProfileCardResourced, [{
key: "componentDidMount",
value: function componentDidMount() {
this._isMounted = true;
this.clientFetchProfile();
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
var _this$props3 = this.props,
userId = _this$props3.userId,
cloudId = _this$props3.cloudId,
resourceClient = _this$props3.resourceClient;
if (userId !== prevProps.userId || cloudId !== prevProps.cloudId || resourceClient !== prevProps.resourceClient) {
this.setState({
isLoading: undefined
}, this.clientFetchProfile);
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this._isMounted = false;
}
}, {
key: "handleClientSuccess",
value: function handleClientSuccess(profileData, reportingLinesData, shouldShowGiveKudos, teamCentralBaseUrl) {
if (!this._isMounted) {
return;
}
this.setState({
isLoading: false,
hasError: false,
data: profileData,
reportingLinesData: reportingLinesData,
isKudosEnabled: shouldShowGiveKudos,
teamCentralBaseUrl: teamCentralBaseUrl
});
}
}, {
key: "handleClientError",
value: function handleClientError(err) {
if (!this._isMounted) {
return;
}
this.setState({
isLoading: false,
hasError: true,
error: err
});
}
}, {
key: "render",
value: function render() {
var _this$state = this.state,
isLoading = _this$state.isLoading,
hasError = _this$state.hasError,
error = _this$state.error,
data = _this$state.data,
reportingLinesData = _this$state.reportingLinesData,
isKudosEnabled = _this$state.isKudosEnabled,
teamCentralBaseUrl = _this$state.teamCentralBaseUrl;
var _this$props4 = this.props,
onReportingLinesClick = _this$props4.onReportingLinesClick,
cloudId = _this$props4.cloudId,
userId = _this$props4.userId,
addFlag = _this$props4.addFlag,
hideReportingLines = _this$props4.hideReportingLines;
var isFetchingOrNotStartToFetchYet = isLoading === true || isLoading === undefined;
if (isFetchingOrNotStartToFetchYet) {
return /*#__PURE__*/_react.default.createElement(_UserTrigger.CardWrapper, null, /*#__PURE__*/_react.default.createElement(_UserLoadingState.default, {
fireAnalytics: this.fireAnalytics
}));
} else if (hasError) {
return /*#__PURE__*/_react.default.createElement(_UserTrigger.CardWrapper, {
testId: "profile-card-resourced-error-state"
}, /*#__PURE__*/_react.default.createElement(_Error.ErrorMessage, {
errorType: error,
reload: this.clientFetchProfile,
fireAnalytics: this.fireAnalytics
}));
}
var newProps = _objectSpread(_objectSpread({
hasError: hasError,
errorType: error,
clientFetchProfile: this.clientFetchProfile,
reportingLines: reportingLinesData,
onReportingLinesClick: onReportingLinesClick,
cloudId: cloudId,
userId: userId,
addFlag: addFlag
}, data), {}, {
isKudosEnabled: isKudosEnabled,
teamCentralBaseUrl: teamCentralBaseUrl,
openKudosDrawer: this.openKudosDrawer,
hideReportingLines: (0, _platformFeatureFlags.fg)('jira_ai_profilecard_hide_reportinglines') && hideReportingLines
});
return /*#__PURE__*/_react.default.createElement(_UserTrigger.CardWrapper, null, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isKudosEnabled && newProps.teamCentralBaseUrl && /*#__PURE__*/_react.default.createElement(_react.Suspense, {
fallback: null
}, /*#__PURE__*/_react.default.createElement(_giveKudos.GiveKudosLauncherLazy, {
isOpen: this.state.kudosDrawerOpen,
recipient: {
type: _giveKudos.KudosType.INDIVIDUAL,
recipientId: this.props.userId
},
analyticsSource: "profile-card",
teamCentralBaseUrl: newProps.teamCentralBaseUrl,
cloudId: this.props.cloudId,
addFlag: this.props.addFlag,
onClose: this.closeKudosDrawer
})), /*#__PURE__*/_react.default.createElement(_ProfileCard.default, (0, _extends2.default)({}, newProps, {
actions: this.filterActions()
}))));
}
}]);
}(_react.default.PureComponent);
(0, _defineProperty2.default)(ProfileCardResourced, "defaultProps", {
actions: []
});
var ProfileCardResourcedInternal = exports.ProfileCardResourcedInternal = ProfileCardResourced;
var ProfileCardResourcedWithAnalytics = function ProfileCardResourcedWithAnalytics(props) {
var _useAnalyticsEvents = (0, _teamsAppInternalAnalytics.useAnalyticsEvents)(),
fireEvent = _useAnalyticsEvents.fireEvent;
return /*#__PURE__*/_react.default.createElement(ProfileCardResourced, (0, _extends2.default)({
fireEvent: fireEvent
}, props));
};
var _default = exports.default = ProfileCardResourcedWithAnalytics;