mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
206 lines • 10.5 kB
JavaScript
;
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeGetBadgeCountForTeamId = exports.getChannelDrawerBadgeCount = exports.getMyTeamsCount = exports.getMySortedTeamIds = exports.getSortedJoinableTeams = exports.getJoinableTeams = exports.getJoinableTeamIds = exports.getSortedListableTeams = exports.getListableTeams = exports.getListableTeamIds = exports.getTeamMember = exports.getMembersInCurrentTeam = exports.getMyTeamMember = exports.getMyTeams = exports.getCurrentTeamStats = exports.getCurrentRelativeTeamUrl = exports.getCurrentTeamUrl = exports.isCurrentUserCurrentTeamAdmin = exports.getCurrentTeamMembership = exports.getTeam = exports.getCurrentTeam = exports.getTeamsList = exports.getMembersInTeams = exports.getTeamMemberships = exports.getTeamStats = exports.getTeams = exports.getTeamByName = exports.getCurrentTeamId = void 0;
var tslib_1 = require("tslib");
var reselect_1 = require("reselect");
var constants_1 = require("../../constants");
var general_1 = require("./general");
var roles_helpers_1 = require("./roles_helpers");
var helpers_1 = require("../../utils/helpers");
var user_utils_1 = require("../../utils/user_utils");
var team_utils_1 = require("../../utils/team_utils");
function getCurrentTeamId(state) {
return state.entities.teams.currentTeamId;
}
exports.getCurrentTeamId = getCurrentTeamId;
function getTeamByName(state, name) {
var teams = getTeams(state);
return Object.values(teams).find(function (team) { return team.name === name; });
}
exports.getTeamByName = getTeamByName;
function getTeams(state) {
return state.entities.teams.teams;
}
exports.getTeams = getTeams;
function getTeamStats(state) {
return state.entities.teams.stats;
}
exports.getTeamStats = getTeamStats;
function getTeamMemberships(state) {
return state.entities.teams.myMembers;
}
exports.getTeamMemberships = getTeamMemberships;
function getMembersInTeams(state) {
return state.entities.teams.membersInTeam;
}
exports.getMembersInTeams = getMembersInTeams;
exports.getTeamsList = reselect_1.createSelector(getTeams, function (teams) {
return Object.values(teams);
});
exports.getCurrentTeam = reselect_1.createSelector(getTeams, getCurrentTeamId, function (teams, currentTeamId) {
return teams[currentTeamId];
});
function getTeam(state, id) {
var teams = getTeams(state);
return teams[id];
}
exports.getTeam = getTeam;
exports.getCurrentTeamMembership = reselect_1.createSelector(getCurrentTeamId, getTeamMemberships, function (currentTeamId, teamMemberships) {
return teamMemberships[currentTeamId];
});
exports.isCurrentUserCurrentTeamAdmin = reselect_1.createSelector(exports.getCurrentTeamMembership, function (member) {
if (member) {
var roles = member.roles || '';
return user_utils_1.isTeamAdmin(roles);
}
return false;
});
exports.getCurrentTeamUrl = reselect_1.createSelector(general_1.getCurrentUrl, exports.getCurrentTeam, function (state) { return general_1.getConfig(state).SiteURL; }, function (currentURL, currentTeam, siteURL) {
var rootURL = "" + (currentURL || siteURL);
if (!currentTeam) {
return rootURL;
}
return rootURL + "/" + currentTeam.name;
});
exports.getCurrentRelativeTeamUrl = reselect_1.createSelector(exports.getCurrentTeam, function (currentTeam) {
if (!currentTeam) {
return '/';
}
return "/" + currentTeam.name;
});
exports.getCurrentTeamStats = reselect_1.createSelector(getCurrentTeamId, getTeamStats, function (currentTeamId, teamStats) {
return teamStats[currentTeamId];
});
exports.getMyTeams = reselect_1.createSelector(getTeams, getTeamMemberships, function (teams, members) {
return Object.values(teams).filter(function (t) { return members[t.id] && t.delete_at === 0; });
});
exports.getMyTeamMember = reselect_1.createSelector(getTeamMemberships, function (state, teamId) { return teamId; }, function (teamMemberships, teamId) {
return teamMemberships[teamId] || {};
});
exports.getMembersInCurrentTeam = reselect_1.createSelector(getCurrentTeamId, getMembersInTeams, function (currentTeamId, teamMembers) {
return teamMembers[currentTeamId];
});
function getTeamMember(state, teamId, userId) {
var members = getMembersInTeams(state)[teamId];
if (members) {
return members[userId];
}
return null;
}
exports.getTeamMember = getTeamMember;
exports.getListableTeamIds = helpers_1.createIdsSelector(getTeams, getTeamMemberships, function (state) { return roles_helpers_1.haveISystemPermission(state, { permission: constants_1.Permissions.LIST_PUBLIC_TEAMS }); }, function (state) { return roles_helpers_1.haveISystemPermission(state, { permission: constants_1.Permissions.LIST_PRIVATE_TEAMS }); }, general_1.isCompatibleWithJoinViewTeamPermissions, function (teams, myMembers, canListPublicTeams, canListPrivateTeams, compatibleWithJoinViewTeamPermissions) {
return Object.keys(teams).filter(function (id) {
var team = teams[id];
var member = myMembers[id];
var canList = team.allow_open_invite;
if (compatibleWithJoinViewTeamPermissions) {
canList = (canListPrivateTeams && !team.allow_open_invite) || (canListPublicTeams && team.allow_open_invite);
}
return team.delete_at === 0 && canList && !member;
});
});
exports.getListableTeams = reselect_1.createSelector(getTeams, exports.getListableTeamIds, function (teams, listableTeamIds) {
return listableTeamIds.map(function (id) { return teams[id]; });
});
exports.getSortedListableTeams = reselect_1.createSelector(getTeams, exports.getListableTeamIds, function (state, locale) { return locale; }, function (teams, listableTeamIds, locale) {
var e_1, _a;
var listableTeams = {};
try {
for (var listableTeamIds_1 = tslib_1.__values(listableTeamIds), listableTeamIds_1_1 = listableTeamIds_1.next(); !listableTeamIds_1_1.done; listableTeamIds_1_1 = listableTeamIds_1.next()) {
var id = listableTeamIds_1_1.value;
listableTeams[id] = teams[id];
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (listableTeamIds_1_1 && !listableTeamIds_1_1.done && (_a = listableTeamIds_1.return)) _a.call(listableTeamIds_1);
}
finally { if (e_1) throw e_1.error; }
}
return Object.values(listableTeams).sort(team_utils_1.sortTeamsWithLocale(locale));
});
exports.getJoinableTeamIds = helpers_1.createIdsSelector(getTeams, getTeamMemberships, function (state) { return roles_helpers_1.haveISystemPermission(state, { permission: constants_1.Permissions.JOIN_PUBLIC_TEAMS }); }, function (state) { return roles_helpers_1.haveISystemPermission(state, { permission: constants_1.Permissions.JOIN_PRIVATE_TEAMS }); }, general_1.isCompatibleWithJoinViewTeamPermissions, function (teams, myMembers, canJoinPublicTeams, canJoinPrivateTeams, compatibleWithJoinViewTeamPermissions) {
return Object.keys(teams).filter(function (id) {
var team = teams[id];
var member = myMembers[id];
var canJoin = team.allow_open_invite;
if (compatibleWithJoinViewTeamPermissions) {
canJoin = (canJoinPrivateTeams && !team.allow_open_invite) || (canJoinPublicTeams && team.allow_open_invite);
}
return team.delete_at === 0 && canJoin && !member;
});
});
exports.getJoinableTeams = reselect_1.createSelector(getTeams, exports.getJoinableTeamIds, function (teams, joinableTeamIds) {
return joinableTeamIds.map(function (id) { return teams[id]; });
});
exports.getSortedJoinableTeams = reselect_1.createSelector(getTeams, exports.getJoinableTeamIds, function (state, locale) { return locale; }, function (teams, joinableTeamIds, locale) {
var e_2, _a;
var joinableTeams = {};
try {
for (var joinableTeamIds_1 = tslib_1.__values(joinableTeamIds), joinableTeamIds_1_1 = joinableTeamIds_1.next(); !joinableTeamIds_1_1.done; joinableTeamIds_1_1 = joinableTeamIds_1.next()) {
var id = joinableTeamIds_1_1.value;
joinableTeams[id] = teams[id];
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (joinableTeamIds_1_1 && !joinableTeamIds_1_1.done && (_a = joinableTeamIds_1.return)) _a.call(joinableTeamIds_1);
}
finally { if (e_2) throw e_2.error; }
}
return Object.values(joinableTeams).sort(team_utils_1.sortTeamsWithLocale(locale));
});
exports.getMySortedTeamIds = helpers_1.createIdsSelector(exports.getMyTeams, function (state, locale) { return locale; }, function (teams, locale) {
return teams.sort(team_utils_1.sortTeamsWithLocale(locale)).map(function (t) { return t.id; });
});
function getMyTeamsCount(state) {
return exports.getMyTeams(state).length;
}
exports.getMyTeamsCount = getMyTeamsCount;
// returns the badge number to show (excluding the current team)
// > 0 means is returning the mention count
// 0 means that there are no unread messages
// -1 means that there are unread messages but no mentions
exports.getChannelDrawerBadgeCount = reselect_1.createSelector(getCurrentTeamId, getTeamMemberships, function (currentTeamId, teamMembers) {
var mentionCount = 0;
var messageCount = 0;
Object.values(teamMembers).forEach(function (m) {
if (m.team_id !== currentTeamId) {
mentionCount += (m.mention_count || 0);
messageCount += (m.msg_count || 0);
}
});
var badgeCount = 0;
if (mentionCount) {
badgeCount = mentionCount;
}
else if (messageCount) {
badgeCount = -1;
}
return badgeCount;
});
// returns the badge for a team
// > 0 means is returning the mention count
// 0 means that there are no unread messages
// -1 means that there are unread messages but no mentions
function makeGetBadgeCountForTeamId() {
return reselect_1.createSelector(getTeamMemberships, function (state, id) { return id; }, function (members, teamId) {
var member = members[teamId];
var badgeCount = 0;
if (member) {
if (member.mention_count) {
badgeCount = member.mention_count;
}
else if (member.msg_count) {
badgeCount = -1;
}
}
return badgeCount;
});
}
exports.makeGetBadgeCountForTeamId = makeGetBadgeCountForTeamId;
//# sourceMappingURL=teams.js.map