summaryrefslogtreecommitdiffstats
path: root/webapp/utils/channel_utils.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/utils/channel_utils.jsx')
-rw-r--r--webapp/utils/channel_utils.jsx325
1 files changed, 0 insertions, 325 deletions
diff --git a/webapp/utils/channel_utils.jsx b/webapp/utils/channel_utils.jsx
deleted file mode 100644
index d9887ff89..000000000
--- a/webapp/utils/channel_utils.jsx
+++ /dev/null
@@ -1,325 +0,0 @@
-
-import Constants from 'utils/constants.jsx';
-const Preferences = Constants.Preferences;
-
-import * as Utils from 'utils/utils.jsx';
-
-import UserStore from 'stores/user_store.jsx';
-import ChannelStore from 'stores/channel_store.jsx';
-import TeamStore from 'stores/team_store.jsx';
-import PreferenceStore from 'stores/preference_store.jsx';
-import LocalizationStore from 'stores/localization_store.jsx';
-
-/**
- * Returns list of sorted channels grouped by type. Favorites here is considered as separated type.
- *
- * Example: {
- * publicChannels: [...],
- * privateChannels: [...],
- * directAndGroupChannels: [...],
- * favoriteChannels: [...]
- * }
- */
-export function buildDisplayableChannelList(persistentChannels) {
- const missingDirectChannels = createMissingDirectChannels(persistentChannels);
-
- const channels = persistentChannels.
- concat(missingDirectChannels).
- map(completeDirectChannelInfo).
- filter(isNotDeletedChannel).
- sort(sortChannelsByDisplayName);
-
- const favoriteChannels = channels.filter(isFavoriteChannel);
- const notFavoriteChannels = channels.filter(not(isFavoriteChannel));
- const directAndGroupChannels = notFavoriteChannels.filter(orX(andX(isGroupChannel, isGroupChannelVisible), andX(isDirectChannel, isDirectChannelVisible)));
-
- return {
- favoriteChannels,
- publicChannels: notFavoriteChannels.filter(isOpenChannel),
- privateChannels: notFavoriteChannels.filter(isPrivateChannel),
- directAndGroupChannels
- };
-}
-
-export function isFavoriteChannel(channel) {
- return PreferenceStore.getBool(Preferences.CATEGORY_FAVORITE_CHANNEL, channel.id);
-}
-
-export function isFavoriteChannelId(channelId) {
- return PreferenceStore.getBool(Preferences.CATEGORY_FAVORITE_CHANNEL, channelId);
-}
-
-export function isNotDeletedChannel(channel) {
- return channel.delete_at === 0;
-}
-
-export function isOpenChannel(channel) {
- return channel.type === Constants.OPEN_CHANNEL;
-}
-
-export function isPrivateChannel(channel) {
- return channel.type === Constants.PRIVATE_CHANNEL;
-}
-
-export function isGroupChannel(channel) {
- return channel.type === Constants.GM_CHANNEL;
-}
-
-export function isGroupChannelVisible(channel) {
- return PreferenceStore.getBool(Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channel.id);
-}
-
-export function isDirectChannel(channel) {
- return channel.type === Constants.DM_CHANNEL;
-}
-
-export function isDirectChannelVisible(channel) {
- const channelId = Utils.getUserIdFromChannelName(channel);
-
- return PreferenceStore.getBool(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, channelId);
-}
-
-export function completeDirectChannelInfo(channel) {
- if (!isDirectChannel(channel)) {
- return channel;
- }
-
- const dmChannelClone = JSON.parse(JSON.stringify(channel));
- const teammateId = Utils.getUserIdFromChannelName(channel);
-
- return Object.assign(dmChannelClone, {
- display_name: Utils.displayUsername(teammateId),
- teammate_id: teammateId,
- status: UserStore.getStatus(teammateId) || 'offline'
- });
-}
-
-const defaultPrefix = 'D'; // fallback for future types
-const typeToPrefixMap = {[Constants.OPEN_CHANNEL]: 'A', [Constants.PRIVATE_CHANNEL]: 'B', [Constants.DM_CHANNEL]: 'C', [Constants.GM_CHANNEL]: 'C'};
-
-export function sortChannelsByDisplayName(a, b) {
- const locale = LocalizationStore.getLocale();
-
- if (a.type !== b.type && typeToPrefixMap[a.type] !== typeToPrefixMap[b.type]) {
- return (typeToPrefixMap[a.type] || defaultPrefix).localeCompare((typeToPrefixMap[b.type] || defaultPrefix), locale);
- }
-
- const aDisplayName = getChannelDisplayName(a);
- const bDisplayName = getChannelDisplayName(b);
-
- if (aDisplayName !== null && bDisplayName !== null && aDisplayName !== bDisplayName) {
- return aDisplayName.localeCompare(bDisplayName, locale, {numeric: true});
- }
-
- return a.name.localeCompare(b.name, locale, {numeric: true});
-}
-
-const MAX_CHANNEL_NAME_LENGTH = 64;
-
-export function getChannelDisplayName(channel) {
- if (channel.type !== Constants.GM_CHANNEL) {
- return channel.display_name;
- }
-
- const currentUser = UserStore.getCurrentUser();
-
- if (currentUser) {
- let displayName = channel.display_name;
- if (displayName.length >= MAX_CHANNEL_NAME_LENGTH) {
- displayName += '...';
- }
- displayName = displayName.replace(currentUser.username + ', ', '').replace(currentUser.username, '').trim();
- if (displayName[displayName.length - 1] === ',') {
- return displayName.slice(0, -1);
- }
- return displayName;
- }
-
- return channel.display_name;
-}
-
-export function showCreateOption(channelType, isTeamAdmin, isSystemAdmin) {
- if (global.window.mm_license.IsLicensed !== 'true') {
- return true;
- }
-
- if (channelType === Constants.OPEN_CHANNEL) {
- if (global.window.mm_config.RestrictPublicChannelCreation === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
- return false;
- } else if (global.window.mm_config.RestrictPublicChannelCreation === Constants.PERMISSIONS_TEAM_ADMIN && !(isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- } else if (channelType === Constants.PRIVATE_CHANNEL) {
- if (global.window.mm_config.RestrictPrivateChannelCreation === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
- return false;
- } else if (global.window.mm_config.RestrictPrivateChannelCreation === Constants.PERMISSIONS_TEAM_ADMIN && !(isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- }
-
- return true;
-}
-
-export function showManagementOptions(channel, isChannelAdmin, isTeamAdmin, isSystemAdmin) {
- if (global.window.mm_license.IsLicensed !== 'true') {
- // policies are only enforced in enterprise editions
- return true;
- }
-
- if (channel.type === Constants.OPEN_CHANNEL) {
- if (global.window.mm_config.RestrictPublicChannelManagement === Constants.PERMISSIONS_CHANNEL_ADMIN && !(isChannelAdmin || isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPublicChannelManagement === Constants.PERMISSIONS_TEAM_ADMIN && !(isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPublicChannelManagement === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
- return false;
- }
- } else if (channel.type === Constants.PRIVATE_CHANNEL) {
- if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_CHANNEL_ADMIN && !(isChannelAdmin || isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_TEAM_ADMIN && !(isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
- return false;
- }
- }
-
- return true;
-}
-
-export function showDeleteOptionForCurrentUser(channel, isChannelAdmin, isTeamAdmin, isSystemAdmin) {
- if (global.window.mm_license.IsLicensed !== 'true') {
- // policies are only enforced in enterprise editions
- return true;
- }
-
- if (ChannelStore.isDefault(channel)) {
- // can't delete default channels, no matter who you are
- return false;
- }
-
- if (channel.type === Constants.OPEN_CHANNEL) {
- if (global.window.mm_config.RestrictPublicChannelDeletion === Constants.PERMISSIONS_CHANNEL_ADMIN && !(isChannelAdmin || isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPublicChannelDeletion === Constants.PERMISSIONS_TEAM_ADMIN && !(isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPublicChannelDeletion === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
- return false;
- }
- } else if (channel.type === Constants.PRIVATE_CHANNEL) {
- if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_CHANNEL_ADMIN && !(isChannelAdmin || isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_TEAM_ADMIN && !(isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
- return false;
- }
- }
-
- return true;
-}
-
-export function canManageMembers(channel, isChannelAdmin, isTeamAdmin, isSystemAdmin) {
- if (global.window.mm_license.IsLicensed !== 'true') {
- return true;
- }
-
- if (channel.type === Constants.PRIVATE_CHANNEL) {
- if (global.window.mm_config.RestrictPrivateChannelManageMembers === Constants.PERMISSIONS_CHANNEL_ADMIN && !(isChannelAdmin || isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPrivateChannelManageMembers === Constants.PERMISSIONS_TEAM_ADMIN && !(isTeamAdmin || isSystemAdmin)) {
- return false;
- }
- if (global.window.mm_config.RestrictPrivateChannelManageMembers === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
- return false;
- }
- }
-
- return true;
-}
-
-export function buildGroupChannelName(channelId) {
- const profiles = UserStore.getProfileListInChannel(channelId, true);
- let displayName = '';
- for (let i = 0; i < profiles.length; i++) {
- displayName += Utils.displayUsernameForUser(profiles[i]);
- if (i !== profiles.length - 1) {
- displayName += ', ';
- }
- }
-
- return displayName;
-}
-
-export function getCountsStateFromStores(team = TeamStore.getCurrent(), teamMembers = TeamStore.getMyTeamMembers(), unreadCounts = ChannelStore.getUnreadCounts()) {
- let mentionCount = 0;
- let messageCount = 0;
-
- teamMembers.forEach((member) => {
- if (member.team_id !== TeamStore.getCurrentId()) {
- mentionCount += (member.mention_count || 0);
- messageCount += (member.msg_count || 0);
- }
- });
-
- Object.keys(unreadCounts).forEach((chId) => {
- const channel = ChannelStore.get(chId);
-
- if (channel && (channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL || channel.team_id === team.id)) {
- messageCount += unreadCounts[chId].msgs;
- mentionCount += unreadCounts[chId].mentions;
- }
- });
-
- return {mentionCount, messageCount};
-}
-
-/*
- * not exported helpers
- */
-
-function createMissingDirectChannels(channels) {
- const directChannelsDisplayPreferences = PreferenceStore.getCategory(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW);
-
- return Array.
- from(directChannelsDisplayPreferences).
- filter((entry) => entry[1] === 'true').
- map((entry) => entry[0]).
- filter((teammateId) => !channels.some(Utils.isDirectChannelForUser.bind(null, teammateId))).
- map(createFakeChannelCurried(UserStore.getCurrentId()));
-}
-
-function createFakeChannel(userId, otherUserId) {
- return {
- name: Utils.getDirectChannelName(userId, otherUserId),
- last_post_at: 0,
- total_msg_count: 0,
- type: Constants.DM_CHANNEL,
- fake: true
- };
-}
-
-function createFakeChannelCurried(userId) {
- return (otherUserId) => createFakeChannel(userId, otherUserId);
-}
-
-function not(f) {
- return (...args) => !f(...args);
-}
-
-function orX(...fns) {
- return (...args) => fns.some((f) => f(...args));
-}
-
-function andX(...fns) {
- return (...args) => fns.every((f) => f(...args));
-}