@atlaskit/profilecard
Version:
A React component to display a card with user information.
190 lines (189 loc) • 11.1 kB
JavaScript
"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);