@@ -19,7 +19,7 @@ import {getActiveServer} from '@queries/app/servers';
1919import { prepareMyChannelsForTeam , getChannelById , getChannelByName , getMyChannel , getChannelInfo , queryMyChannelSettingsByIds , getMembersCountByChannelsId , deleteChannelMembership , queryChannelsById } from '@queries/servers/channel' ;
2020import { queryDisplayNamePreferences } from '@queries/servers/preference' ;
2121import { getCommonSystemValues , getConfig , getCurrentChannelId , getCurrentTeamId , getCurrentUserId , getLicense , setCurrentChannelId , setCurrentTeamAndChannelId } from '@queries/servers/system' ;
22- import { getNthLastChannelFromTeam , getMyTeamById , getTeamByName , queryMyTeams , removeChannelFromTeamHistory } from '@queries/servers/team' ;
22+ import { getNthLastChannelFromTeam , getMyTeamById , getTeamByName , queryMyTeams , removeChannelFromTeamHistory , getTeamById } from '@queries/servers/team' ;
2323import { getIsCRTEnabled } from '@queries/servers/thread' ;
2424import { getCurrentUser } from '@queries/servers/user' ;
2525import { dismissAllModalsAndPopToRoot } from '@screens/navigation' ;
@@ -38,7 +38,7 @@ import {fetchPostsForChannel} from './post';
3838import { openChannelIfNeeded , savePreference } from './preference' ;
3939import { fetchRolesIfNeeded } from './role' ;
4040import { forceLogoutIfNecessary } from './session' ;
41- import { addCurrentUserToTeam , fetchTeamByName , removeCurrentUserFromTeam } from './team' ;
41+ import { addCurrentUserToTeam , fetchTeamById , fetchTeamByName , removeCurrentUserFromTeam } from './team' ;
4242import { fetchProfilesInChannel , fetchProfilesInGroupChannels , fetchProfilesPerChannels , fetchUsersByIds , updateUsersNoLongerVisible } from './user' ;
4343
4444import type { Model } from '@nozbe/watermelondb' ;
@@ -763,29 +763,40 @@ export async function unsetActiveChannelOnServer(serverUrl: string) {
763763 }
764764}
765765
766- export async function switchToChannelByName ( serverUrl : string , channelName : string , teamName : string , errorHandler : ( intl : IntlShape ) => void , intl : IntlShape ) {
767- const onError = ( joinedTeam : boolean , teamId ?: string ) => {
766+ export async function joinIfNeededAndSwitchToChannel (
767+ serverUrl : string ,
768+ channelInfo : { id ?: string ; name ?: string } ,
769+ teamInfo : { id ?: string ; name ?: string } | undefined ,
770+ errorHandler : ( intl : IntlShape ) => void ,
771+ intl : IntlShape ,
772+ ) {
773+ const onError = ( joinedTeam : boolean , teamIdToRemove ?: string ) => {
768774 errorHandler ( intl ) ;
769- if ( joinedTeam && teamId ) {
770- removeCurrentUserFromTeam ( serverUrl , teamId , false ) ;
775+ if ( joinedTeam && teamIdToRemove ) {
776+ removeCurrentUserFromTeam ( serverUrl , teamIdToRemove , false ) ;
771777 }
772778 } ;
773779
774780 let joinedTeam = false ;
775- let teamId = '' ;
781+ let teamId = teamInfo ?. id || '' ;
782+ let channelId = channelInfo ?. id || '' ;
783+ const channelName = channelInfo ?. name || '' ;
784+ const teamName = teamInfo ?. name || '' ;
776785
777786 try {
778787 const { database} = DatabaseManager . getServerDatabaseAndOperator ( serverUrl ) ;
779788
780789 if ( teamName === DeepLink . Redirect ) {
781790 teamId = await getCurrentTeamId ( database ) ;
782791 } else {
783- const team = await getTeamByName ( database , teamName ) ;
784- const isTeamMember = team ? await getMyTeamById ( database , team . id ) : false ;
785- teamId = team ?. id || '' ;
792+ const team = teamId ? await getTeamById ( database , teamId ) : await getTeamByName ( database , teamName ) ;
793+ const isTeamMember = team ? Boolean ( await getMyTeamById ( database , team . id ) ) : false ;
794+ if ( ! teamId ) {
795+ teamId = team ?. id || '' ;
796+ }
786797
787798 if ( ! isTeamMember ) {
788- const fetchRequest = await fetchTeamByName ( serverUrl , teamName ) ;
799+ const fetchRequest = teamId ? await fetchTeamById ( serverUrl , teamId ) : await fetchTeamByName ( serverUrl , teamName ) ;
789800 if ( ! fetchRequest . team ) {
790801 onError ( joinedTeam ) ;
791802 return { error : fetchRequest . error || 'no team received' } ;
@@ -800,11 +811,14 @@ export async function switchToChannelByName(serverUrl: string, channelName: stri
800811 }
801812 }
802813
803- const channel = await getChannelByName ( database , teamId , channelName ) ;
814+ const channel = channelId ? await getChannelById ( database , channelId ) : await getChannelByName ( database , teamId , channelName ) ;
804815 const isChannelMember = channel ? await getMyChannel ( database , channel . id ) : false ;
805- let channelId = channel ?. id || '' ;
816+ if ( ! channelId ) {
817+ channelId = channel ?. id || '' ;
818+ }
819+
806820 if ( ! isChannelMember ) {
807- const fetchRequest = await fetchChannelByName ( serverUrl , teamId , channelName , true ) ;
821+ const fetchRequest = channelId ? await fetchChannelById ( serverUrl , channelId ) : await fetchChannelByName ( serverUrl , teamId , channelName , true ) ;
808822 if ( ! fetchRequest . channel ) {
809823 onError ( joinedTeam , teamId ) ;
810824 return { error : fetchRequest . error || 'cannot fetch channel' } ;
@@ -818,7 +832,7 @@ export async function switchToChannelByName(serverUrl: string, channelName: stri
818832 }
819833
820834 logInfo ( 'joining channel' , fetchRequest . channel . display_name , fetchRequest . channel . id ) ;
821- const joinRequest = await joinChannel ( serverUrl , teamId , undefined , channelName , false ) ;
835+ const joinRequest = await joinChannel ( serverUrl , teamId , channelId , channelName , false ) ;
822836 if ( ! joinRequest . channel ) {
823837 onError ( joinedTeam , teamId ) ;
824838 return { error : joinRequest . error || 'no channel returned from join' } ;
@@ -827,7 +841,7 @@ export async function switchToChannelByName(serverUrl: string, channelName: stri
827841 channelId = fetchRequest . channel . id ;
828842 }
829843
830- switchToChannelById ( serverUrl , channelId , teamId ) ;
844+ await switchToChannelById ( serverUrl , channelId , teamId ) ;
831845 return { } ;
832846 } catch ( error ) {
833847 onError ( joinedTeam , teamId ) ;
0 commit comments