* Login entry point * feedback review * sort imports * Fix model relations * Handle when no current team or current channel has been selected * Fix MFA unit test * update prepareCommonSystemValues arguments
36 lines
1.7 KiB
TypeScript
36 lines
1.7 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {General, Permissions} from '@constants';
|
|
import {DEFAULT_LOCALE} from '@i18n';
|
|
import {hasPermission} from '@utils/role';
|
|
|
|
export function selectDefaultChannelForTeam(channels: Channel[], memberships: ChannelMembership[], teamId: string, roles?: Role[], locale = DEFAULT_LOCALE) {
|
|
let channel: Channel|undefined;
|
|
let canIJoinPublicChannelsInTeam = false;
|
|
|
|
if (roles) {
|
|
canIJoinPublicChannelsInTeam = hasPermission(roles, Permissions.JOIN_PUBLIC_CHANNELS, true);
|
|
}
|
|
const defaultChannel = channels?.find((c) => c.name === General.DEFAULT_CHANNEL);
|
|
const iAmMemberOfTheTeamDefaultChannel = Boolean(defaultChannel && memberships?.find((m) => m.channel_id === defaultChannel.id));
|
|
const myFirstTeamChannel = channels?.filter((c) => c.team_id === teamId && c.type === General.OPEN_CHANNEL && Boolean(memberships?.find((m) => c.id === m.channel_id))).
|
|
sort(sortChannelsByDisplayName.bind(null, locale))[0];
|
|
|
|
if (iAmMemberOfTheTeamDefaultChannel || canIJoinPublicChannelsInTeam) {
|
|
channel = defaultChannel;
|
|
} else {
|
|
channel = myFirstTeamChannel || defaultChannel;
|
|
}
|
|
|
|
return channel;
|
|
}
|
|
|
|
export function sortChannelsByDisplayName(locale: string, a: Channel, b: Channel): number {
|
|
// if both channels have the display_name defined
|
|
if (a.display_name && b.display_name && a.display_name !== b.display_name) {
|
|
return a.display_name.toLowerCase().localeCompare(b.display_name.toLowerCase(), locale, {numeric: true});
|
|
}
|
|
|
|
return a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locale, {numeric: true});
|
|
}
|