box-ui-elements-mlh
Version:
542 lines (494 loc) • 25.3 kB
JavaScript
var _API_TO_USM_ACCESS_LE, _API_TO_USM_PERMISSIO, _USM_TO_API_ACCESS_LE, _USM_TO_API_PERMISSIO, _API_TO_USM_CLASSIFIC;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import { getTypedFileId, getTypedFolderId, isGSuiteExtension } from '../../../utils/file';
import { checkIsExternalUser } from '../../../utils/parseEmails';
import { ACCESS_COLLAB, ACCESS_COMPANY, ACCESS_NONE, ACCESS_OPEN, INVITEE_ROLE_EDITOR, PERMISSION_CAN_DOWNLOAD, PERMISSION_CAN_PREVIEW, STATUS_ACCEPTED, STATUS_INACTIVE, TYPE_FOLDER } from '../../../constants';
import { ALLOWED_ACCESS_LEVELS, ANYONE_IN_COMPANY, ANYONE_WITH_LINK, CAN_VIEW_DOWNLOAD, CAN_VIEW_ONLY, COLLAB_GROUP_TYPE, COLLAB_USER_TYPE, DISABLED_REASON_ACCESS_POLICY, DISABLED_REASON_MALICIOUS_CONTENT, PEOPLE_IN_ITEM } from '../constants';
import { bdlDarkBlue50, bdlGray20, bdlGreenLight50, bdlLightBlue50, bdlOrange50, bdlPurpleRain50, bdlWatermelonRed50, bdlYellow50 } from '../../../styles/variables';
import { CLASSIFICATION_COLOR_ID_0, CLASSIFICATION_COLOR_ID_1, CLASSIFICATION_COLOR_ID_2, CLASSIFICATION_COLOR_ID_3, CLASSIFICATION_COLOR_ID_4, CLASSIFICATION_COLOR_ID_5, CLASSIFICATION_COLOR_ID_6, CLASSIFICATION_COLOR_ID_7 } from '../../classification/constants';
/**
* The following constants are used for converting API requests
* and responses into objects expected by the USM, and vice versa
*/
export var API_TO_USM_ACCESS_LEVEL_MAP = (_API_TO_USM_ACCESS_LE = {}, _defineProperty(_API_TO_USM_ACCESS_LE, ACCESS_COLLAB, PEOPLE_IN_ITEM), _defineProperty(_API_TO_USM_ACCESS_LE, ACCESS_COMPANY, ANYONE_IN_COMPANY), _defineProperty(_API_TO_USM_ACCESS_LE, ACCESS_OPEN, ANYONE_WITH_LINK), _defineProperty(_API_TO_USM_ACCESS_LE, ACCESS_NONE, ''), _API_TO_USM_ACCESS_LE);
export var API_TO_USM_PERMISSION_LEVEL_MAP = (_API_TO_USM_PERMISSIO = {}, _defineProperty(_API_TO_USM_PERMISSIO, PERMISSION_CAN_DOWNLOAD, CAN_VIEW_DOWNLOAD), _defineProperty(_API_TO_USM_PERMISSIO, PERMISSION_CAN_PREVIEW, CAN_VIEW_ONLY), _API_TO_USM_PERMISSIO);
export var USM_TO_API_ACCESS_LEVEL_MAP = (_USM_TO_API_ACCESS_LE = {}, _defineProperty(_USM_TO_API_ACCESS_LE, ANYONE_IN_COMPANY, ACCESS_COMPANY), _defineProperty(_USM_TO_API_ACCESS_LE, ANYONE_WITH_LINK, ACCESS_OPEN), _defineProperty(_USM_TO_API_ACCESS_LE, PEOPLE_IN_ITEM, ACCESS_COLLAB), _USM_TO_API_ACCESS_LE);
export var USM_TO_API_PERMISSION_LEVEL_MAP = (_USM_TO_API_PERMISSIO = {}, _defineProperty(_USM_TO_API_PERMISSIO, CAN_VIEW_DOWNLOAD, PERMISSION_CAN_DOWNLOAD), _defineProperty(_USM_TO_API_PERMISSIO, CAN_VIEW_ONLY, PERMISSION_CAN_PREVIEW), _USM_TO_API_PERMISSIO);
var API_TO_USM_CLASSIFICATION_COLORS_MAP = (_API_TO_USM_CLASSIFIC = {}, _defineProperty(_API_TO_USM_CLASSIFIC, bdlYellow50, CLASSIFICATION_COLOR_ID_0), _defineProperty(_API_TO_USM_CLASSIFIC, bdlOrange50, CLASSIFICATION_COLOR_ID_1), _defineProperty(_API_TO_USM_CLASSIFIC, bdlWatermelonRed50, CLASSIFICATION_COLOR_ID_2), _defineProperty(_API_TO_USM_CLASSIFIC, bdlPurpleRain50, CLASSIFICATION_COLOR_ID_3), _defineProperty(_API_TO_USM_CLASSIFIC, bdlLightBlue50, CLASSIFICATION_COLOR_ID_4), _defineProperty(_API_TO_USM_CLASSIFIC, bdlDarkBlue50, CLASSIFICATION_COLOR_ID_5), _defineProperty(_API_TO_USM_CLASSIFIC, bdlGreenLight50, CLASSIFICATION_COLOR_ID_6), _defineProperty(_API_TO_USM_CLASSIFIC, bdlGray20, CLASSIFICATION_COLOR_ID_7), _API_TO_USM_CLASSIFIC);
var APP_USERS_DOMAIN_REGEXP = new RegExp('boxdevedition.com');
/**
* Convert access levels disabled reasons into USM format.
*
* @param {{ [string]: string }} disabledReasons
* @returns {accessLevelsDisabledReasonType | null}
*/
export var convertAccessLevelsDisabledReasons = function convertAccessLevelsDisabledReasons(disabledReasons) {
if (!disabledReasons) return null;
var convertedReasons = {};
Object.entries(disabledReasons).forEach(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
level = _ref2[0],
reason = _ref2[1];
convertedReasons[API_TO_USM_ACCESS_LEVEL_MAP[level]] = reason;
});
return convertedReasons;
};
/**
* Convert allowed access levels into USM format.
*
* @param {Array<string>} [levelsFromAPI]
* @returns {allowedAccessLevelsType | null}
*/
export var convertAllowedAccessLevels = function convertAllowedAccessLevels(levelsFromAPI) {
if (!levelsFromAPI) return null;
var convertedLevels = {
peopleInThisItem: false,
peopleInYourCompany: false,
peopleWithTheLink: false
};
levelsFromAPI.forEach(function (level) {
convertedLevels[API_TO_USM_ACCESS_LEVEL_MAP[level]] = true;
});
return convertedLevels;
};
/**
* Convert shared link permission into USM format, taking file type limitations into account.
*
* @param {string} effectivePermissionFromAPI
* @param {string} extension
* @returns {permissionLevelType}
*/
export var convertEffectiveSharedLinkPermission = function convertEffectiveSharedLinkPermission(effectivePermissionFromAPI, extension) {
return isGSuiteExtension(extension) ? CAN_VIEW_ONLY : API_TO_USM_PERMISSION_LEVEL_MAP[effectivePermissionFromAPI];
};
/**
* Convert isDownloadSettingAvailable into a value used by the USM, taking into account file type limitations.
*
* @param {boolean} isDownloadSettingAvailableFromAPI
* @param {string} extension
* @returns {boolean}
*/
export var convertIsDownloadSettingAvailable = function convertIsDownloadSettingAvailable(isDownloadSettingAvailableFromAPI, extension) {
if (isDownloadSettingAvailableFromAPI === undefined) {
return undefined;
}
return !isGSuiteExtension(extension) && isDownloadSettingAvailableFromAPI;
};
/**
* Convert a response from the Item API to the object that the USM expects.
*
* @param {BoxItem} itemAPIData
* @returns {ContentSharingItemDataType} Object containing item and shared link information
*/
export var convertItemResponse = function convertItemResponse(itemAPIData) {
var allowed_invitee_roles = itemAPIData.allowed_invitee_roles,
allowed_shared_link_access_levels = itemAPIData.allowed_shared_link_access_levels,
allowed_shared_link_access_levels_disabled_reasons = itemAPIData.allowed_shared_link_access_levels_disabled_reasons,
classification = itemAPIData.classification,
id = itemAPIData.id,
description = itemAPIData.description,
extension = itemAPIData.extension,
name = itemAPIData.name,
_itemAPIData$owned_by = itemAPIData.owned_by,
ownerID = _itemAPIData$owned_by.id,
ownerEmail = _itemAPIData$owned_by.login,
permissions = itemAPIData.permissions,
shared_link = itemAPIData.shared_link,
_itemAPIData$shared_l = itemAPIData.shared_link_features,
isDirectLinkAvailable = _itemAPIData$shared_l.download_url,
isPasswordAvailable = _itemAPIData$shared_l.password,
type = itemAPIData.type;
var isDownloadSettingAvailableFromApi = permissions.can_download,
canInvite = permissions.can_invite_collaborator,
isPreviewAllowed = permissions.can_preview,
canChangeAccessLevel = permissions.can_set_share_access,
itemShare = permissions.can_share; // Convert classification data for the item if available
var classificationData = {};
if (classification) {
var color = classification.color,
definition = classification.definition,
classificationName = classification.name;
classificationData = {
bannerPolicy: {
body: definition,
colorID: API_TO_USM_CLASSIFICATION_COLORS_MAP[color]
},
classification: classificationName
};
}
var isEditAllowed = allowed_invitee_roles.indexOf(INVITEE_ROLE_EDITOR) !== -1; // The "canInvite" property is necessary even if the item does not have a shared link,
// because it allows users to invite individual collaborators.
var sharedLink = {
canInvite: !!canInvite
};
if (shared_link) {
var directLink = shared_link.download_url,
effective_access = shared_link.effective_access,
effective_permission = shared_link.effective_permission,
isPasswordEnabled = shared_link.is_password_enabled,
password = shared_link.password,
expirationTimestamp = shared_link.unshared_at,
url = shared_link.url,
vanityName = shared_link.vanity_name;
var isDownloadSettingAvailable = convertIsDownloadSettingAvailable(isDownloadSettingAvailableFromApi, extension);
var accessLevel = effective_access ? API_TO_USM_ACCESS_LEVEL_MAP[effective_access] : '';
var permissionLevel = effective_permission ? convertEffectiveSharedLinkPermission(effective_permission, extension) : null;
var isDownloadAllowed = permissionLevel === API_TO_USM_PERMISSION_LEVEL_MAP.can_download;
var canChangeDownload = canChangeAccessLevel && isDownloadSettingAvailable && effective_access !== ACCESS_COLLAB; // access must be "company" or "open"
var canChangePassword = canChangeAccessLevel && isPasswordAvailable;
var canChangeExpiration = canChangeAccessLevel && isEditAllowed;
sharedLink = {
accessLevel: accessLevel,
accessLevelsDisabledReason: convertAccessLevelsDisabledReasons(allowed_shared_link_access_levels_disabled_reasons) || {},
allowedAccessLevels: convertAllowedAccessLevels(allowed_shared_link_access_levels) || ALLOWED_ACCESS_LEVELS,
// show all access levels by default
canChangeAccessLevel: canChangeAccessLevel,
canChangeDownload: canChangeDownload,
canChangeExpiration: canChangeExpiration,
canChangePassword: canChangePassword,
canChangeVanityName: false,
// vanity URLs cannot be set via the API
canInvite: !!canInvite,
directLink: directLink,
expirationTimestamp: expirationTimestamp ? new Date(expirationTimestamp).getTime() : null,
// convert to milliseconds
isDirectLinkAvailable: isDirectLinkAvailable,
isDownloadAllowed: isDownloadAllowed,
isDownloadAvailable: isDownloadSettingAvailable,
isDownloadEnabled: isDownloadAllowed,
isDownloadSettingAvailable: isDownloadSettingAvailable,
isEditAllowed: isEditAllowed,
isNewSharedLink: false,
isPasswordAvailable: isPasswordAvailable,
isPasswordEnabled: isPasswordEnabled,
isPreviewAllowed: isPreviewAllowed,
password: password,
permissionLevel: permissionLevel,
url: url,
vanityName: vanityName || ''
};
}
return {
item: _objectSpread({
canUserSeeClassification: !!classification,
description: description,
extension: extension,
grantedPermissions: {
itemShare: !!itemShare
},
hideCollaborators: false,
// to do: connect to Collaborations API
id: id,
name: name,
ownerEmail: ownerEmail,
// the owner email is used to determine whether collaborators are external
ownerID: ownerID,
// the owner ID is used to determine whether external collaborator badges should be shown
permissions: permissions,
// the original permissions are necessary for PUT requests to the Item API
type: type,
typedID: type === TYPE_FOLDER ? getTypedFolderId(id) : getTypedFileId(id)
}, classificationData),
sharedLink: sharedLink
};
};
/**
* Convert a response from the User API into the object that the USM expects.
*
* @param {User} userAPIData
* @returns {ContentSharingUserDataType} Object containing user and enterprise information
*/
export var convertUserResponse = function convertUserResponse(userAPIData) {
var enterprise = userAPIData.enterprise,
hostname = userAPIData.hostname,
id = userAPIData.id;
return {
id: id,
userEnterpriseData: {
enterpriseName: enterprise ? enterprise.name : '',
serverURL: hostname ? "".concat(hostname, "v/") : ''
}
};
};
/**
* Create a shared link permissions object for the API based on a USM permission level.
*
* @param {string} newSharedLinkPermissionLevel
* @returns {$Shape<BoxItemPermission>} Object containing shared link permissions
*/
export var convertSharedLinkPermissions = function convertSharedLinkPermissions(newSharedLinkPermissionLevel) {
var sharedLinkPermissions = {};
Object.keys(USM_TO_API_PERMISSION_LEVEL_MAP).forEach(function (level) {
if (level === newSharedLinkPermissionLevel) {
sharedLinkPermissions[USM_TO_API_PERMISSION_LEVEL_MAP[level]] = true;
} else {
sharedLinkPermissions[USM_TO_API_PERMISSION_LEVEL_MAP[level]] = false;
}
});
return sharedLinkPermissions;
};
/**
* Convert a shared link settings object from the USM into the format that the API expects.
* This function compares the provided access level to both API and internal USM access level constants, to accommodate two potential flows:
* - Changing the settings for a shared link right after the shared link has been created. The access level is saved directly from the data
* returned by the API, so it is in API format.
* - Changing the settings for a shared link in any other scenario. The access level is saved from the initial calls to the Item API and
* convertItemResponse, so it is in internal USM format.
*
* @param {SharedLinkSettingsOptions} newSettings
* @param {accessLevel} string
* @param {serverURL} string
* @returns {$Shape<SharedLink>}
*/
export var convertSharedLinkSettings = function convertSharedLinkSettings(newSettings, accessLevel, isDownloadAvailable, serverURL) {
var expirationTimestamp = newSettings.expirationTimestamp,
can_download = newSettings.isDownloadEnabled,
isExpirationEnabled = newSettings.isExpirationEnabled,
isPasswordEnabled = newSettings.isPasswordEnabled,
password = newSettings.password,
vanityName = newSettings.vanityName;
var convertedSettings = {
unshared_at: expirationTimestamp && isExpirationEnabled ? new Date(expirationTimestamp).toISOString() : null,
vanity_url: serverURL && vanityName ? "".concat(serverURL).concat(vanityName) : ''
}; // Download permissions can only be set on "company" or "open" shared links.
if (![ACCESS_COLLAB, PEOPLE_IN_ITEM].includes(accessLevel)) {
var permissions = {
can_preview: !can_download
};
if (isDownloadAvailable) {
permissions.can_download = can_download;
}
convertedSettings.permissions = permissions;
}
/**
* This block covers the following cases:
* - Setting a new password: "isPasswordEnabled" is true, and "password" is a non-empty string.
* - Removing a password: "isPasswordEnabled" is false, and "password" is an empty string.
* The API only accepts non-empty strings and null values, so the empty string must be converted to null.
*
* Other notes:
* - Passwords can only be set on "open" shared links.
* - Attempting to set the password field on any other type of shared link will throw a 400 error.
* - When other settings are updated, and a password has already been set, the SharedLinkSettingsModal
* returns password = '' and isPasswordEnabled = true. In these cases, the password should *not*
* be converted to null, because that would remove the existing password.
*/
if ([ANYONE_WITH_LINK, ACCESS_OPEN].includes(accessLevel)) {
if (isPasswordEnabled && !!password) {
convertedSettings.password = password;
} else if (!isPasswordEnabled) {
convertedSettings.password = null;
}
}
return convertedSettings;
};
/**
* Convert a collaborator.
* Note: We do not retrieve the avatar URL of collaborators right after inviting them,
* so the avatar fields (hasCustomAvatar and imageURL) are not set in that case.
*
* @param {ConvertCollabOptions} options
* @returns {collaboratorType | null} Object containing a collaborator
*/
export var convertCollab = function convertCollab(_ref3) {
var collab = _ref3.collab,
avatarURLMap = _ref3.avatarURLMap,
ownerEmail = _ref3.ownerEmail,
_ref3$isCurrentUserOw = _ref3.isCurrentUserOwner,
isCurrentUserOwner = _ref3$isCurrentUserOw === void 0 ? false : _ref3$isCurrentUserOw;
if (!collab || collab.status !== STATUS_ACCEPTED) return null;
var ownerEmailDomain = ownerEmail && /@/.test(ownerEmail) ? ownerEmail.split('@')[1] : null;
var _collab$accessible_by = collab.accessible_by,
userID = _collab$accessible_by.id,
email = _collab$accessible_by.login,
name = _collab$accessible_by.name,
type = _collab$accessible_by.type,
collabID = collab.id,
executeAt = collab.expires_at,
role = collab.role;
var avatarURL = avatarURLMap ? avatarURLMap[userID] : undefined;
var convertedCollab = {
collabID: parseInt(collabID, 10),
email: email,
hasCustomAvatar: !!avatarURL,
imageURL: avatarURL,
isExternalCollab: checkIsExternalUser(isCurrentUserOwner, ownerEmailDomain, email),
name: name,
translatedRole: "".concat(role[0].toUpperCase()).concat(role.slice(1)),
// capitalize the user's role
type: type,
userID: parseInt(userID, 10)
};
if (executeAt) {
convertedCollab.expiration = {
executeAt: executeAt
};
}
return convertedCollab;
};
/**
* Convert a response from the Item Collaborations API into the object that the USM expects.
*
* @param {Collaborations} collabsAPIData
* @param {AvatarURLMap | null} avatarURLMap
* @param {string | null | undefined} ownerEmail
* @param {boolean} isCurrentUserOwner
* @returns {collaboratorsListType} Object containing an array of collaborators
*/
export var convertCollabsResponse = function convertCollabsResponse(collabsAPIData, avatarURLMap, ownerEmail, isCurrentUserOwner) {
var _collabsAPIData$entri = collabsAPIData.entries,
entries = _collabsAPIData$entri === void 0 ? [] : _collabsAPIData$entri;
if (!entries.length) return {
collaborators: []
};
var collaborators = [];
entries // Only show accepted collaborations
.filter(function (collab) {
return collab.status === STATUS_ACCEPTED;
}).forEach(function (collab) {
var convertedCollab = convertCollab({
collab: collab,
avatarURLMap: avatarURLMap,
ownerEmail: ownerEmail,
isCurrentUserOwner: isCurrentUserOwner
});
if (convertedCollab) {
// Necessary for Flow checking
collaborators.push(convertedCollab);
}
});
return {
collaborators: collaborators
};
};
/**
* Convert a request from the USM (specifically the Invite Collaborators Modal) into the format expected by the Collaborations API.
* ContentSharing/USM will only call this function when at least one properly-formatted email is entered into the "Invite People" field.
* Within the context of this feature, groups are identified by IDs, whereas users are identified by their emails.
*
* @param {InviteCollaboratorsRequest} collabRequest
* @returns {ContentSharingCollaborationsRequest}
*/
export var convertCollabsRequest = function convertCollabsRequest(collabRequest) {
var emails = collabRequest.emails,
groupIDs = collabRequest.groupIDs,
permission = collabRequest.permission;
var emailArray = emails ? emails.split(',') : [];
var groupIDArray = groupIDs ? groupIDs.split(',') : [];
var roleSettings = {
role: permission.toLowerCase() // USM permissions are identical to API roles, except for the casing
};
var groups = groupIDArray.map(function (groupID) {
return _objectSpread({
accessible_by: {
id: groupID,
type: COLLAB_GROUP_TYPE
}
}, roleSettings);
});
var users = emailArray.map(function (email) {
return _objectSpread({
accessible_by: {
login: email,
type: COLLAB_USER_TYPE
}
}, roleSettings);
});
return {
groups: groups,
users: users
};
};
var sortByName = function sortByName(_ref4, _ref5) {
var _ref4$name = _ref4.name,
nameA = _ref4$name === void 0 ? '' : _ref4$name;
var _ref5$name = _ref5.name,
nameB = _ref5$name === void 0 ? '' : _ref5$name;
return nameA.localeCompare(nameB);
};
/**
* Convert an enterprise users API response into an array of internal USM contacts.
*
* @param {UserCollection} contactsAPIData
* @param {string|null} currentUserID
* @returns {Array<contactType>} Array of USM contacts
*/
export var convertUserContactsResponse = function convertUserContactsResponse(contactsAPIData, currentUserID) {
var _contactsAPIData$entr = contactsAPIData.entries,
entries = _contactsAPIData$entr === void 0 ? [] : _contactsAPIData$entr; // Return all active users except for the current user and app users
return entries.filter(function (_ref6) {
var id = _ref6.id,
email = _ref6.login,
status = _ref6.status;
return id !== currentUserID && email && !APP_USERS_DOMAIN_REGEXP.test(email) && status && status !== STATUS_INACTIVE;
}).map(function (contact) {
var id = contact.id,
email = contact.login,
name = contact.name,
type = contact.type;
return {
id: id,
email: email,
name: name,
type: type
};
}).sort(sortByName);
};
/**
* Convert an enterprise users API response into an object of internal USM contacts, keyed by email, which is
* then passed to the mergeContacts function.
*
* @param {UserCollection} contactsAPIData
* @returns { [string]: contactType } Object of USM contacts
*/
export var convertUserContactsByEmailResponse = function convertUserContactsByEmailResponse(contactsAPIData) {
var _contactsAPIData$entr2 = contactsAPIData.entries,
entries = _contactsAPIData$entr2 === void 0 ? [] : _contactsAPIData$entr2;
var contactsMap = {};
entries.forEach(function (contact) {
var id = contact.id,
_contact$login = contact.login,
email = _contact$login === void 0 ? '' : _contact$login,
name = contact.name,
type = contact.type;
contactsMap[email] = {
id: id,
email: email,
name: name,
type: type
};
});
return contactsMap;
};
/**
* Convert an enterprise groups API response into an array of internal USM contacts.
*
* @param {GroupCollection} contactsAPIData
* @returns {Array<contactType>} Array of USM contacts
*/
export var convertGroupContactsResponse = function convertGroupContactsResponse(contactsAPIData) {
var _contactsAPIData$entr3 = contactsAPIData.entries,
entries = _contactsAPIData$entr3 === void 0 ? [] : _contactsAPIData$entr3; // Only return groups with the correct permissions
return entries.filter(function (_ref7) {
var permissions = _ref7.permissions;
return permissions && permissions.can_invite_as_collaborator;
}).map(function (contact) {
var id = contact.id,
name = contact.name,
type = contact.type;
return {
id: id,
name: name,
type: type
};
}).sort(sortByName);
};
//# sourceMappingURL=convertData.js.map