UNPKG

@atlaskit/profilecard

Version:

A React component to display a card with user information.

190 lines (189 loc) 11.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.modifyResponse = exports.default = exports.buildAggUserQuery = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); 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 _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _graphql = require("graphql"); var _graphqlTag = _interopRequireDefault(require("graphql-tag")); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var _analytics = require("../util/analytics"); var _date = require("../util/date"); var _performance = require("../util/performance"); var _CachingClient2 = _interopRequireDefault(require("./CachingClient")); var _errorUtils = require("./errorUtils"); var _graphqlUtils = require("./graphqlUtils"); var _templateObject; 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; })(); } 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; } /** * Transform response from GraphQL * - Prefix `timestring` with `remoteWeekdayString` depending on `remoteWeekdayIndex` * - Remove properties which will be not used later * @ignore * @param {object} response * @return {object} */ var modifyResponse = exports.modifyResponse = function modifyResponse(response) { var data = _objectSpread({}, response.User); var localWeekdayIndex = new Date().getDay().toString(); if (data.remoteWeekdayIndex && data.remoteWeekdayIndex !== localWeekdayIndex) { data.remoteTimeString = "".concat(data.remoteWeekdayString, " ").concat(data.remoteTimeString); } return { isBot: data.isBot, isCurrentUser: data.isCurrentUser, status: data.status, statusModifiedDate: data.statusModifiedDate || undefined, avatarUrl: data.avatarUrl || undefined, email: data.email || undefined, fullName: data.fullName || undefined, location: data.location || undefined, meta: data.meta || undefined, nickname: data.nickname || undefined, companyName: data.companyName || undefined, timestring: data.remoteTimeString || undefined, accountType: data.accountType || undefined }; }; var aggUserQuery = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n\tquery user($userId: ID!) {\n\t\tuser(accountId: $userId) {\n\t\t\tid\n\t\t\tname\n\t\t\tpicture\n\t\t\taccountStatus\n\t\t\t__typename\n\t\t\t... on AtlassianAccountUser {\n\t\t\t\temail\n\t\t\t\tnickname\n\t\t\t\tzoneinfo\n\t\t\t\textendedProfile {\n\t\t\t\t\tjobTitle\n\t\t\t\t\torganization\n\t\t\t\t\tlocation\n\t\t\t\t\tclosedDate\n\t\t\t\t\tinactiveDate\n\t\t\t\t}\n\t\t\t}\n\t\t\t... on CustomerUser {\n\t\t\t\temail\n\t\t\t\tzoneinfo\n\t\t\t}\n\t\t\t... on AppUser {\n\t\t\t\tappType\n\t\t\t}\n\t\t}\n\t}\n"]))); var aggUserQueryString = "query user($userId: ID!) {\n\t\tuser(accountId: $userId) {\n\t\t\tid\n\t\t\tname\n\t\t\tpicture\n\t\t\taccountStatus\n\t\t\t__typename\n\t\t\t... on AtlassianAccountUser {\n\t\t\t\temail\n\t\t\t\tnickname\n\t\t\t\tzoneinfo\n\t\t\t\textendedProfile {\n\t\t\t\t\tjobTitle\n\t\t\t\t\torganization\n\t\t\t\t\tlocation\n\t\t\t\t\tclosedDate\n\t\t\t\t\tinactiveDate\n\t\t\t\t}\n\t\t\t}\n\t\t\t... on CustomerUser {\n\t\t\t\temail\n\t\t\t\tzoneinfo\n\t\t\t}\n\t\t\t... on AppUser {\n \t\t\tappType\n \t\t}\n\t\t}\n\t}"; var buildAggUserQuery = exports.buildAggUserQuery = function buildAggUserQuery(userId) { return { query: (0, _platformFeatureFlags.fg)('platform_agg_user_query_doc_change') ? (0, _graphql.print)(aggUserQuery) : aggUserQueryString, variables: { userId: userId } }; }; var queryAGGUser = /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url, userId) { var query, _yield$AGGQuery, user; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: query = buildAggUserQuery(userId); _context.next = 3; return (0, _graphqlUtils.AGGQuery)(url, query); case 3: _yield$AGGQuery = _context.sent; user = _yield$AGGQuery.user; return _context.abrupt("return", user); case 6: case "end": return _context.stop(); } }, _callee); })); return function queryAGGUser(_x, _x2) { return _ref.apply(this, arguments); }; }(); var UserProfileCardClient = exports.default = /*#__PURE__*/function (_CachingClient) { function UserProfileCardClient(options) { var _this; (0, _classCallCheck2.default)(this, UserProfileCardClient); _this = _callSuper(this, UserProfileCardClient, [options]); _this.options = options; return _this; } (0, _inherits2.default)(UserProfileCardClient, _CachingClient); return (0, _createClass2.default)(UserProfileCardClient, [{ key: "makeRequest", value: function () { var _makeRequest = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(cloudId, userId) { var _user$extendedProfile, _user$extendedProfile2, _user$extendedProfile3, _user$extendedProfile4, _user$extendedProfile5; var gatewayGraphqlUrl, urlWithOperationName, userQueryPromise, user, timestring, localWeekdayIndex; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: gatewayGraphqlUrl = this.options.gatewayGraphqlUrl || '/gateway/api/graphql'; urlWithOperationName = "".concat(gatewayGraphqlUrl, "?operationName=aggUserQuery"); userQueryPromise = queryAGGUser(urlWithOperationName, userId); _context2.next = 5; return userQueryPromise; case 5: user = _context2.sent; localWeekdayIndex = new Date().getDay().toString(); if (user.zoneinfo) { if ((0, _date.localTime)(user.zoneinfo, 'i') === localWeekdayIndex) { timestring = (0, _date.localTime)(user.zoneinfo, 'h:mmbbb') || undefined; } else { timestring = (0, _date.localTime)(user.zoneinfo, 'eee h:mmbbb') || undefined; } } return _context2.abrupt("return", _objectSpread(_objectSpread({}, user), {}, { isBot: user.__typename === 'AppUser', isAgent: user.appType === 'agent', status: user.accountStatus, statusModifiedDate: ((_user$extendedProfile = user.extendedProfile) === null || _user$extendedProfile === void 0 ? void 0 : _user$extendedProfile.closedDate) || ((_user$extendedProfile2 = user.extendedProfile) === null || _user$extendedProfile2 === void 0 ? void 0 : _user$extendedProfile2.inactiveDate), avatarUrl: user.picture, email: user.email, fullName: user.name, location: (_user$extendedProfile3 = user.extendedProfile) === null || _user$extendedProfile3 === void 0 ? void 0 : _user$extendedProfile3.location, meta: (_user$extendedProfile4 = user.extendedProfile) === null || _user$extendedProfile4 === void 0 ? void 0 : _user$extendedProfile4.jobTitle, nickname: user.nickname, companyName: (_user$extendedProfile5 = user.extendedProfile) === null || _user$extendedProfile5 === void 0 ? void 0 : _user$extendedProfile5.organization, timestring: timestring })); case 9: case "end": return _context2.stop(); } }, _callee2, this); })); function makeRequest(_x3, _x4) { return _makeRequest.apply(this, arguments); } return makeRequest; }() }, { key: "getProfile", value: function getProfile(cloudId, userId, analytics) { var _this2 = this; if (!userId) { return Promise.reject(new Error('userId missing')); } var cacheIdentifier = "".concat(cloudId, "/").concat(userId); var cache = this.getCachedProfile(cacheIdentifier); if (cache) { return Promise.resolve(cache); } return new Promise(function (resolve, reject) { var startTime = (0, _performance.getPageTime)(); if (analytics) { analytics((0, _analytics.userRequestAnalytics)('triggered')); } _this2.makeRequest(cloudId, userId).then(function (data) { if (_this2.cache) { _this2.setCachedProfile(cacheIdentifier, data); } if (analytics) { analytics((0, _analytics.userRequestAnalytics)('succeeded', { duration: (0, _performance.getPageTime)() - startTime })); } resolve(data); }).catch(function (error) { if (analytics) { analytics((0, _analytics.userRequestAnalytics)('failed', _objectSpread({ duration: (0, _performance.getPageTime)() - startTime }, (0, _errorUtils.getErrorAttributes)(error)))); } reject(error); }); }); } }]); }(_CachingClient2.default);