mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
MM-53609 - remove channels from archived teams during search (#24053)
* MM-53609 - remove channels from archived teams during search * filter channels after the channels from server are fetched * filter only channels, not DM or GM * add unit tests; prevent blinking when searching for terms
This commit is contained in:
parent
aa88f8bf59
commit
ef3aec40ac
@ -43,7 +43,9 @@ jest.mock('mattermost-redux/actions/channels', () => ({
|
|||||||
name: 'other_user',
|
name: 'other_user',
|
||||||
display_name: 'other_user',
|
display_name: 'other_user',
|
||||||
delete_at: 0,
|
delete_at: 0,
|
||||||
}],
|
team_id: 'currentTeamId',
|
||||||
|
},
|
||||||
|
],
|
||||||
})),
|
})),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@ -119,6 +121,7 @@ describe('components/SwitchChannelProvider', () => {
|
|||||||
id: 'currentTeamId',
|
id: 'currentTeamId',
|
||||||
display_name: 'test',
|
display_name: 'test',
|
||||||
type: 'O',
|
type: 'O',
|
||||||
|
delete_at: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -827,6 +830,59 @@ describe('components/SwitchChannelProvider', () => {
|
|||||||
expect(results.terms).toEqual(expectedOrder);
|
expect(results.terms).toEqual(expectedOrder);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should filter out channels belonging to archived teams', async () => {
|
||||||
|
const modifiedState = {
|
||||||
|
...defaultState,
|
||||||
|
entities: {
|
||||||
|
...defaultState.entities,
|
||||||
|
channels: {
|
||||||
|
...defaultState.entities.channels,
|
||||||
|
myMembers: {
|
||||||
|
channel_1: {},
|
||||||
|
channel_2: {},
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
channel_1: {
|
||||||
|
id: 'channel_1',
|
||||||
|
type: 'O',
|
||||||
|
name: 'channel_1',
|
||||||
|
display_name: 'channel 1',
|
||||||
|
delete_at: 0,
|
||||||
|
team_id: 'currentTeamId',
|
||||||
|
},
|
||||||
|
channel_2: {
|
||||||
|
id: 'channel_2',
|
||||||
|
type: 'O',
|
||||||
|
name: 'channel_2',
|
||||||
|
display_name: 'channel 2',
|
||||||
|
delete_at: 0,
|
||||||
|
team_id: 'archivedTeam',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
getState.mockClear();
|
||||||
|
|
||||||
|
const switchProvider = new SwitchChannelProvider();
|
||||||
|
const store = mockStore(modifiedState);
|
||||||
|
|
||||||
|
getState.mockImplementation(store.getState);
|
||||||
|
const searchText = 'chan';
|
||||||
|
const resultsCallback = jest.fn();
|
||||||
|
|
||||||
|
switchProvider.startNewRequest();
|
||||||
|
await switchProvider.fetchUsersAndChannels(searchText, resultsCallback);
|
||||||
|
const channelsFromActiveTeams = [
|
||||||
|
'channel_1',
|
||||||
|
];
|
||||||
|
|
||||||
|
expect(resultsCallback).toBeCalledWith(expect.objectContaining({
|
||||||
|
terms: channelsFromActiveTeams,
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
it('Should show threads as the first item in the list if search term matches', async () => {
|
it('Should show threads as the first item in the list if search term matches', async () => {
|
||||||
const modifiedState = {
|
const modifiedState = {
|
||||||
...defaultState,
|
...defaultState,
|
||||||
|
@ -31,6 +31,7 @@ import {
|
|||||||
import {getMyPreferences, isGroupChannelManuallyVisible, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';
|
import {getMyPreferences, isGroupChannelManuallyVisible, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';
|
||||||
import {getConfig} from 'mattermost-redux/selectors/entities/general';
|
import {getConfig} from 'mattermost-redux/selectors/entities/general';
|
||||||
import {
|
import {
|
||||||
|
getActiveTeamsList,
|
||||||
getCurrentTeamId,
|
getCurrentTeamId,
|
||||||
getMyTeams,
|
getMyTeams,
|
||||||
getTeam,
|
getTeam,
|
||||||
@ -441,7 +442,8 @@ export default class SwitchChannelProvider extends Provider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dispatch suggestions for local data (filter out deleted and archived channels from local store data)
|
// Dispatch suggestions for local data (filter out deleted and archived channels from local store data)
|
||||||
const channels = getChannelsInAllTeams(getState()).concat(getDirectAndGroupChannels(getState())).filter((c) => c.delete_at === 0);
|
let channels = getChannelsInAllTeams(getState()).concat(getDirectAndGroupChannels(getState())).filter((c) => c.delete_at === 0);
|
||||||
|
channels = this.removeChannelsFromArchivedTeams(channels);
|
||||||
const users = searchProfilesMatchingWithTerm(getState(), channelPrefix, false);
|
const users = searchProfilesMatchingWithTerm(getState(), channelPrefix, false);
|
||||||
const formattedData = this.formatList(channelPrefix, [ThreadsChannel, ...channels], users, true, true);
|
const formattedData = this.formatList(channelPrefix, [ThreadsChannel, ...channels], users, true, true);
|
||||||
if (formattedData) {
|
if (formattedData) {
|
||||||
@ -494,10 +496,13 @@ export default class SwitchChannelProvider extends Provider {
|
|||||||
const currentUserId = getCurrentUserId(state);
|
const currentUserId = getCurrentUserId(state);
|
||||||
|
|
||||||
// filter out deleted and archived channels from local store data
|
// filter out deleted and archived channels from local store data
|
||||||
const localChannelData = getChannelsInAllTeams(state).concat(getDirectAndGroupChannels(state)).filter((c) => c.delete_at === 0) || [];
|
let localChannelData = getChannelsInAllTeams(state).concat(getDirectAndGroupChannels(state)).filter((c) => c.delete_at === 0) || [];
|
||||||
|
localChannelData = this.removeChannelsFromArchivedTeams(localChannelData);
|
||||||
const localUserData = searchProfilesMatchingWithTerm(state, channelPrefix, false);
|
const localUserData = searchProfilesMatchingWithTerm(state, channelPrefix, false);
|
||||||
const localFormattedData = this.formatList(channelPrefix, [ThreadsChannel, ...localChannelData], localUserData);
|
const localFormattedData = this.formatList(channelPrefix, [ThreadsChannel, ...localChannelData], localUserData);
|
||||||
const remoteChannelData = channelsFromServer.concat(getGroupChannels(state)) || [];
|
let remoteChannelData = channelsFromServer.concat(getGroupChannels(state)) || [];
|
||||||
|
remoteChannelData = this.removeChannelsFromArchivedTeams(remoteChannelData);
|
||||||
|
|
||||||
const remoteUserData = usersFromServer.users || [];
|
const remoteUserData = usersFromServer.users || [];
|
||||||
const remoteFormattedData = this.formatList(channelPrefix, remoteChannelData, remoteUserData, false);
|
const remoteFormattedData = this.formatList(channelPrefix, remoteChannelData, remoteUserData, false);
|
||||||
|
|
||||||
@ -689,9 +694,22 @@ export default class SwitchChannelProvider extends Provider {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removeChannelsFromArchivedTeams(channels: Channel[]) {
|
||||||
|
const state = getState();
|
||||||
|
const activeTeams = getActiveTeamsList(state).map((team: Team) => team.id);
|
||||||
|
const newChannels = channels.filter((channel: Channel) => {
|
||||||
|
if (!channel.team_id) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return activeTeams.includes(channel.team_id);
|
||||||
|
});
|
||||||
|
return newChannels;
|
||||||
|
}
|
||||||
|
|
||||||
fetchAndFormatRecentlyViewedChannels(resultsCallback: ResultsCallback<WrappedChannel>) {
|
fetchAndFormatRecentlyViewedChannels(resultsCallback: ResultsCallback<WrappedChannel>) {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const recentChannels = getChannelsInAllTeams(state).concat(getDirectAndGroupChannels(state));
|
let recentChannels = getChannelsInAllTeams(state).concat(getDirectAndGroupChannels(state));
|
||||||
|
recentChannels = this.removeChannelsFromArchivedTeams(recentChannels);
|
||||||
const wrappedRecentChannels = this.wrapChannels(recentChannels, Constants.MENTION_RECENT_CHANNELS);
|
const wrappedRecentChannels = this.wrapChannels(recentChannels, Constants.MENTION_RECENT_CHANNELS);
|
||||||
const unreadChannels = getSortedAllTeamsUnreadChannels(state);
|
const unreadChannels = getSortedAllTeamsUnreadChannels(state);
|
||||||
const myMembers = getMyChannelMemberships(state);
|
const myMembers = getMyChannelMemberships(state);
|
||||||
|
Loading…
Reference in New Issue
Block a user