diff --git a/app/actions/remote/entry/common.ts b/app/actions/remote/entry/common.ts index a57a9eb87e..684781d990 100644 --- a/app/actions/remote/entry/common.ts +++ b/app/actions/remote/entry/common.ts @@ -65,6 +65,12 @@ export type EntryResponse = { const FETCH_MISSING_DM_TIMEOUT = 2500; export const FETCH_UNREADS_TIMEOUT = 2500; +export const getRemoveTeamIds = async (database: Database, teamData: MyTeamsRequest) => { + const myTeams = await queryMyTeams(database).fetch(); + const joinedTeams = new Set(teamData.memberships?.filter((m) => m.delete_at === 0).map((m) => m.team_id)); + return myTeams.filter((m) => !joinedTeams.has(m.id)).map((m) => m.id); +}; + export const teamsToRemove = async (serverUrl: string, removeTeamIds?: string[]) => { const operator = DatabaseManager.serverDatabases[serverUrl]?.operator; if (!operator) { @@ -162,7 +168,6 @@ export const fetchAppEntryData = async (serverUrl: string, sinceArg: number, ini fetchMe(serverUrl, fetchOnly), ]; - const removeTeamIds: string[] = []; const resolution = await Promise.all(promises); const [teamData, , meData] = resolution; let [, chData] = resolution; @@ -179,10 +184,7 @@ export const fetchAppEntryData = async (serverUrl: string, sinceArg: number, ini } } - const removedFromTeam = teamData.memberships?.filter((m) => m.delete_at > 0); - if (removedFromTeam?.length) { - removeTeamIds.push(...removedFromTeam.map((m) => m.team_id)); - } + const removeTeamIds = await getRemoveTeamIds(database, teamData); let data: AppEntryData = { initialTeamId, @@ -195,10 +197,6 @@ export const fetchAppEntryData = async (serverUrl: string, sinceArg: number, ini }; if (teamData.teams?.length === 0 && !teamData.error) { - // User is no longer a member of any team - const myTeams = await queryMyTeams(database).fetch(); - removeTeamIds.push(...(myTeams.map((myTeam) => myTeam.id) || [])); - return { ...data, initialTeamId: '', diff --git a/app/actions/remote/entry/gql_common.ts b/app/actions/remote/entry/gql_common.ts index 9de797bde7..316e563025 100644 --- a/app/actions/remote/entry/gql_common.ts +++ b/app/actions/remote/entry/gql_common.ts @@ -19,16 +19,14 @@ import {queryAllChannels, queryAllChannelsForTeam} from '@queries/servers/channe import {prepareModels, truncateCrtRelatedTables} from '@queries/servers/entry'; import {getHasCRTChanged} from '@queries/servers/preference'; import {getConfig} from '@queries/servers/system'; -import {queryMyTeams} from '@queries/servers/team'; import {filterAndTransformRoles, getMemberChannelsFromGQLQuery, getMemberTeamsFromGQLQuery, gqlToClientChannelMembership, gqlToClientPreference, gqlToClientSidebarCategory, gqlToClientTeamMembership, gqlToClientUser} from '@utils/graphql'; import {logDebug} from '@utils/log'; import {processIsCRTEnabled} from '@utils/thread'; -import {teamsToRemove, FETCH_UNREADS_TIMEOUT, entryRest, EntryResponse, entryInitialChannelId, restDeferredAppEntryActions} from './common'; +import {teamsToRemove, FETCH_UNREADS_TIMEOUT, entryRest, EntryResponse, entryInitialChannelId, restDeferredAppEntryActions, getRemoveTeamIds} from './common'; import type ClientError from '@client/rest/error'; import type ChannelModel from '@typings/database/models/servers/channel'; -import type TeamModel from '@typings/database/models/servers/team'; export async function deferredAppEntryGraphQLActions( serverUrl: string, @@ -227,23 +225,9 @@ export const entryGQL = async (serverUrl: string, currentTeamId?: string, curren const roles = filterAndTransformRoles(gqlRoles); const initialChannelId = await entryInitialChannelId(database, currentChannelId, currentTeamId, initialTeamId, meData.user.id, chData?.channels, chData?.memberships); - let removeTeams: TeamModel[] = []; const removeChannels = await getRemoveChannels(database, chData, initialTeamId, true); - - const removeTeamIds = []; - - const removedFromTeam = teamData.memberships?.filter((m) => m.delete_at > 0); - if (removedFromTeam?.length) { - removeTeamIds.push(...removedFromTeam.map((m) => m.team_id)); - } - - if (teamData.teams?.length === 0) { - // User is no longer a member of any team - const myTeams = await queryMyTeams(database).fetch(); - removeTeamIds.push(...(myTeams?.map((myTeam) => myTeam.id) || [])); - } - - removeTeams = await teamsToRemove(serverUrl, removeTeamIds); + const removeTeamIds = await getRemoveTeamIds(database, teamData); + const removeTeams = await teamsToRemove(serverUrl, removeTeamIds); const modelPromises = await prepareModels({operator, initialTeamId, removeTeams, removeChannels, teamData, chData, prefData, meData}, true); if (roles.length) {