mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
218 lines • 10.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyRolesFilters = exports.sortByUsername = exports.filterProfilesMatchingWithTerm = exports.filterProfilesStartingWithTerm = exports.nameSuggestionsForUser = exports.getSuggestionsSplitByMultiple = exports.getSuggestionsSplitBy = exports.removeUserFromList = exports.profileListToMap = exports.hasPostAllPublicRole = exports.hasPostAllRole = exports.hasUserAccessTokenRole = exports.isChannelAdmin = exports.includesAnAdminRole = exports.isSystemAdmin = exports.isTeamAdmin = exports.isGuest = exports.isAdmin = exports.spaceSeparatedStringIncludes = exports.displayUsername = exports.getFullName = void 0;
var tslib_1 = require("tslib");
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
var constants_1 = require("../constants");
var i18n_utils_1 = require("./i18n_utils");
function getFullName(user) {
if (user.first_name && user.last_name) {
return user.first_name + ' ' + user.last_name;
}
else if (user.first_name) {
return user.first_name;
}
else if (user.last_name) {
return user.last_name;
}
return '';
}
exports.getFullName = getFullName;
function displayUsername(user, teammateNameDisplay, useFallbackUsername) {
if (useFallbackUsername === void 0) { useFallbackUsername = true; }
var name = useFallbackUsername ? i18n_utils_1.localizeMessage('channel_loader.someone', 'Someone') : '';
if (user) {
if (teammateNameDisplay === constants_1.Preferences.DISPLAY_PREFER_NICKNAME) {
name = user.nickname || getFullName(user);
}
else if (teammateNameDisplay === constants_1.Preferences.DISPLAY_PREFER_FULL_NAME) {
name = getFullName(user);
}
else {
name = user.username;
}
if (!name || name.trim().length === 0) {
name = user.username;
}
}
return name;
}
exports.displayUsername = displayUsername;
function spaceSeparatedStringIncludes(spaceSeparated, item) {
var items = spaceSeparated.split(' ');
return items.includes(item);
}
exports.spaceSeparatedStringIncludes = spaceSeparatedStringIncludes;
function isAdmin(roles) {
return isSystemAdmin(roles) || isTeamAdmin(roles);
}
exports.isAdmin = isAdmin;
function isGuest(roles) {
return spaceSeparatedStringIncludes(roles, 'system_guest');
}
exports.isGuest = isGuest;
function isTeamAdmin(roles) {
return spaceSeparatedStringIncludes(roles, constants_1.General.TEAM_ADMIN_ROLE);
}
exports.isTeamAdmin = isTeamAdmin;
function isSystemAdmin(roles) {
return spaceSeparatedStringIncludes(roles, constants_1.General.SYSTEM_ADMIN_ROLE);
}
exports.isSystemAdmin = isSystemAdmin;
function includesAnAdminRole(roles) {
var rolesArray = roles.split(' ');
return [
constants_1.General.SYSTEM_ADMIN_ROLE,
constants_1.General.SYSTEM_USER_MANAGER_ROLE,
constants_1.General.SYSTEM_READ_ONLY_ADMIN_ROLE,
constants_1.General.SYSTEM_MANAGER_ROLE,
].some(function (el) { return rolesArray.includes(el); });
}
exports.includesAnAdminRole = includesAnAdminRole;
function isChannelAdmin(roles) {
return spaceSeparatedStringIncludes(roles, constants_1.General.CHANNEL_ADMIN_ROLE);
}
exports.isChannelAdmin = isChannelAdmin;
function hasUserAccessTokenRole(roles) {
return spaceSeparatedStringIncludes(roles, constants_1.General.SYSTEM_USER_ACCESS_TOKEN_ROLE);
}
exports.hasUserAccessTokenRole = hasUserAccessTokenRole;
function hasPostAllRole(roles) {
return spaceSeparatedStringIncludes(roles, constants_1.General.SYSTEM_POST_ALL_ROLE);
}
exports.hasPostAllRole = hasPostAllRole;
function hasPostAllPublicRole(roles) {
return spaceSeparatedStringIncludes(roles, constants_1.General.SYSTEM_POST_ALL_PUBLIC_ROLE);
}
exports.hasPostAllPublicRole = hasPostAllPublicRole;
function profileListToMap(profileList) {
var profiles = {};
for (var i = 0; i < profileList.length; i++) {
profiles[profileList[i].id] = profileList[i];
}
return profiles;
}
exports.profileListToMap = profileListToMap;
function removeUserFromList(userId, list) {
for (var i = list.length - 1; i >= 0; i--) {
if (list[i].id === userId) {
list.splice(i, 1);
return list;
}
}
return list;
}
exports.removeUserFromList = removeUserFromList;
// Splits the term by a splitStr and composes a list of the parts of
// the split concatenated with the rest, forming a set of suggesitons
// matchable with startsWith
//
// E.g.: for "one.two.three" by "." it would yield
// ["one.two.three", ".two.three", "two.three", ".three", "three"]
function getSuggestionsSplitBy(term, splitStr) {
var splitTerm = term.split(splitStr);
var initialSuggestions = splitTerm.map(function (st, i) { return splitTerm.slice(i).join(splitStr); });
var suggestions = [];
if (splitStr === ' ') {
suggestions = initialSuggestions;
}
else {
suggestions = initialSuggestions.reduce(function (acc, val) {
if (acc.length === 0) {
acc.push(val);
}
else {
acc.push(splitStr + val, val);
}
return acc;
}, []);
}
return suggestions;
}
exports.getSuggestionsSplitBy = getSuggestionsSplitBy;
function getSuggestionsSplitByMultiple(term, splitStrs) {
var suggestions = splitStrs.reduce(function (acc, val) {
getSuggestionsSplitBy(term, val).forEach(function (suggestion) { return acc.add(suggestion); });
return acc;
}, new Set());
return tslib_1.__spread(suggestions);
}
exports.getSuggestionsSplitByMultiple = getSuggestionsSplitByMultiple;
function nameSuggestionsForUser(user) {
var profileSuggestions = [];
var usernameSuggestions = getSuggestionsSplitByMultiple((user.username || '').toLowerCase(), constants_1.General.AUTOCOMPLETE_SPLIT_CHARACTERS);
profileSuggestions.push.apply(profileSuggestions, tslib_1.__spread(usernameSuggestions));
var first = (user.first_name || '').toLowerCase();
var last = (user.last_name || '').toLowerCase();
var full = first + ' ' + last;
profileSuggestions.push(first, last, full);
profileSuggestions.push((user.nickname || '').toLowerCase());
profileSuggestions.push((user.position || '').toLowerCase());
var email = (user.email || '').toLowerCase();
profileSuggestions.push(email);
var split = email.split('@');
if (split.length > 1) {
profileSuggestions.push(split[1]);
}
return profileSuggestions;
}
exports.nameSuggestionsForUser = nameSuggestionsForUser;
function filterProfilesStartingWithTerm(users, term) {
var lowercasedTerm = term.toLowerCase();
var trimmedTerm = lowercasedTerm;
if (trimmedTerm.startsWith('@')) {
trimmedTerm = trimmedTerm.substr(1);
}
return users.filter(function (user) {
if (!user) {
return false;
}
var profileSuggestions = nameSuggestionsForUser(user);
return profileSuggestions.filter(function (suggestion) { return suggestion !== ''; }).some(function (suggestion) { return suggestion.startsWith(trimmedTerm); });
});
}
exports.filterProfilesStartingWithTerm = filterProfilesStartingWithTerm;
function filterProfilesMatchingWithTerm(users, term) {
var lowercasedTerm = term.toLowerCase();
var trimmedTerm = lowercasedTerm;
if (trimmedTerm.startsWith('@')) {
trimmedTerm = trimmedTerm.substr(1);
}
return users.filter(function (user) {
if (!user) {
return false;
}
var profileSuggestions = nameSuggestionsForUser(user);
return profileSuggestions.filter(function (suggestion) { return suggestion !== ''; }).some(function (suggestion) { return suggestion.includes(trimmedTerm); });
});
}
exports.filterProfilesMatchingWithTerm = filterProfilesMatchingWithTerm;
function sortByUsername(a, b) {
var nameA = a.username;
var nameB = b.username;
return nameA.localeCompare(nameB);
}
exports.sortByUsername = sortByUsername;
function checkUserHasRole(user, userIsNotAdminOrGuest, membership, role) {
var isSystemRole = role.includes('system');
return ((
// If role is system user then user cannot have system admin or system guest roles
isSystemRole && user.roles.includes(role) && ((role === constants_1.General.SYSTEM_USER_ROLE && userIsNotAdminOrGuest) ||
role !== constants_1.General.SYSTEM_USER_ROLE)) || (
// If user is a system admin or a system guest then ignore team and channel memberships
!isSystemRole && userIsNotAdminOrGuest && ((role === constants_1.General.TEAM_ADMIN_ROLE && (membership === null || membership === void 0 ? void 0 : membership.scheme_admin)) ||
(role === constants_1.General.CHANNEL_ADMIN_ROLE && (membership === null || membership === void 0 ? void 0 : membership.scheme_admin)) ||
(role === constants_1.General.TEAM_USER_ROLE && (membership === null || membership === void 0 ? void 0 : membership.scheme_user) && !(membership === null || membership === void 0 ? void 0 : membership.scheme_admin)) ||
(role === constants_1.General.CHANNEL_USER_ROLE && (membership === null || membership === void 0 ? void 0 : membership.scheme_user) && !(membership === null || membership === void 0 ? void 0 : membership.scheme_admin)))));
}
function applyRolesFilters(user, filterRoles, excludeRoles, membership) {
var userIsNotAdminOrGuest = !(user.roles.includes(constants_1.General.SYSTEM_ADMIN_ROLE) || user.roles.includes(constants_1.General.SYSTEM_GUEST_ROLE));
var userHasExcludedRole = excludeRoles.some(checkUserHasRole.bind(this, user, userIsNotAdminOrGuest, membership));
if (userHasExcludedRole) {
return false;
}
return filterRoles.length === 0 || filterRoles.some(checkUserHasRole.bind(this, user, userIsNotAdminOrGuest, membership));
}
exports.applyRolesFilters = applyRolesFilters;
//# sourceMappingURL=user_utils.js.map