diff --git a/app/screens/find_channels/filtered_list/index.ts b/app/screens/find_channels/filtered_list/index.ts index ce6d5c060..e887cb4ce 100644 --- a/app/screens/find_channels/filtered_list/index.ts +++ b/app/screens/find_channels/filtered_list/index.ts @@ -12,7 +12,7 @@ import {observeConfigValue, observeCurrentTeamId} from '@queries/servers/system' import {queryJoinedTeams} from '@queries/servers/team'; import {observeIsCRTEnabled} from '@queries/servers/thread'; import {observeTeammateNameDisplay} from '@queries/servers/user'; -import {retrieveChannels} from '@screens/find_channels/utils'; +import {removeChannelsFromArchivedTeams, retrieveChannels} from '@screens/find_channels/utils'; import FilteredList, {MAX_RESULTS} from './filtered_list'; @@ -37,11 +37,14 @@ const enhanced = withObservables(['term'], ({database, term}: EnhanceProps) => { switchMap((matchStart) => { return retrieveChannels(database, matchStart.flat(), true); }), + switchMap((myChannels) => removeChannelsFromArchivedTeams(myChannels, teamIds)), ); const channelsMatch = joinedChannelsMatch.pipe( combineLatestWith(directChannelsMatch), switchMap((matched) => retrieveChannels(database, matched.flat(), true)), + switchMap((myChannels) => removeChannelsFromArchivedTeams(myChannels, teamIds)), + ); const archivedChannels = observeArchiveChannelsByTerm(database, term, MAX_RESULTS).pipe( diff --git a/app/screens/find_channels/unfiltered_list/index.ts b/app/screens/find_channels/unfiltered_list/index.ts index e094d6df3..cf5407cd9 100644 --- a/app/screens/find_channels/unfiltered_list/index.ts +++ b/app/screens/find_channels/unfiltered_list/index.ts @@ -3,12 +3,12 @@ import {withDatabase} from '@nozbe/watermelondb/DatabaseProvider'; import withObservables from '@nozbe/with-observables'; -import {of as of$} from 'rxjs'; +import {Observable, of as of$} from 'rxjs'; import {switchMap} from 'rxjs/operators'; import {queryMyRecentChannels} from '@queries/servers/channel'; import {queryJoinedTeams} from '@queries/servers/team'; -import {retrieveChannels} from '@screens/find_channels/utils'; +import {removeChannelsFromArchivedTeams, retrieveChannels} from '@screens/find_channels/utils'; import UnfilteredList from './unfiltered_list'; @@ -18,10 +18,15 @@ const MAX_CHANNELS = 20; const enhanced = withObservables([], ({database}: WithDatabaseArgs) => { const teamsCount = queryJoinedTeams(database).observeCount(); + const teamIds: Observable> = queryJoinedTeams(database).observe().pipe( + // eslint-disable-next-line max-nested-callbacks + switchMap((teams) => of$(new Set(teams.map((t) => t.id)))), + ); const recentChannels = queryMyRecentChannels(database, MAX_CHANNELS). observeWithColumns(['last_viewed_at']).pipe( switchMap((myChannels) => retrieveChannels(database, myChannels, true)), + switchMap((myChannels) => removeChannelsFromArchivedTeams(myChannels, teamIds)), ); return { diff --git a/app/screens/find_channels/utils.ts b/app/screens/find_channels/utils.ts index 11f504bbe..5065ac411 100644 --- a/app/screens/find_channels/utils.ts +++ b/app/screens/find_channels/utils.ts @@ -2,7 +2,7 @@ // See LICENSE.txt for license information. import {Database, Q} from '@nozbe/watermelondb'; -import {of as of$} from 'rxjs'; +import {Observable, of as of$, switchMap} from 'rxjs'; import {MM_TABLES} from '@constants/database'; @@ -25,3 +25,18 @@ export const retrieveChannels = (database: Database, myChannels: MyChannelModel[ return of$([]); }; + +export const removeChannelsFromArchivedTeams = (recentChannels: ChannelModel[], teamIds: Observable>) => { + return teamIds.pipe( + // eslint-disable-next-line max-nested-callbacks + switchMap((teamIdsSet) => + // eslint-disable-next-line max-nested-callbacks + of$(recentChannels.filter((channel) => { + if (!channel.teamId) { + return true; + } + return teamIdsSet.has(channel.teamId); + })), + ), + ); +};