Skip to content

Commit 70e8b92

Browse files
authored
fix: Migrate the outdated ChannelListQuery interface (#393)
* Issue: A customer said the `userIdsFilter` of ChannelListQuery doesn't work when receiving messages There's been an internal channel filtering logic with custom channelListQuery, but it's broken because we've used the outdated interface of Chat SDK. * Fix: We migrated the outdated interface `_searchFilter` and `_userIdsFilter` to new things `searchFilter` and `userIdsFilter`
1 parent 410b35b commit 70e8b92

File tree

4 files changed

+25
-35
lines changed

4 files changed

+25
-35
lines changed

src/smart-components/App/stories/index.stories.js

-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,6 @@ export const user1 = () => fitPageSize(
260260
showSearchIcon
261261
allowProfileEdit
262262
config={{ logLevel: 'all' }}
263-
queries={{}}
264263
replyType="QUOTE_REPLY"
265264
isReactionEnabled
266265
isMentionEnabled

src/smart-components/ChannelList/context/ChannelListProvider.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
GroupChannelCreateParams,
1313
GroupChannelHandler,
1414
SendbirdGroupChat,
15-
GroupChannelListQuery as GroupChannelListQuerySb
15+
GroupChannelListQuery as GroupChannelListQuerySb,
16+
GroupChannelUserIdsFilter,
1617
} from '@sendbird/chat/groupChannel';
1718

1819
import { RenderUserProfileProps } from '../../../types';
@@ -59,6 +60,7 @@ interface GroupChannelListQuery {
5960
hiddenChannelFilter?: 'unhidden_only' | 'hidden_only' | 'hidden_allow_auto_unhide' | 'hidden_prevent_auto_unhide';
6061
unreadChannelFilter?: 'all' | 'unread_message';
6162
includeFrozen?: boolean;
63+
userIdsFilter?: GroupChannelUserIdsFilter;
6264
}
6365

6466
interface ChannelListQueries {

src/smart-components/ChannelList/dux/__tests__/reducers.spec.js

+15-15
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,11 @@ describe('Channels-Reducers', () => {
137137

138138
it('should set channelListQuery for filter', () => {
139139
const channelListQuery = {
140-
_searchFilter: {
140+
searchFilter: {
141141
search_fields: ['channel_name', 'member_nicknames'],
142142
search_query: 'abcd',
143143
},
144-
_userIdsFilter: {
144+
userIdsFilter: {
145145
userIds: ['hoon001', 'hoon002'],
146146
includeMode: false,
147147
queryType: 'AND',
@@ -163,11 +163,11 @@ describe('Channels-Reducers', () => {
163163
payload: { currentUserId: user1.userId, channelListQuery: channelListQuery },
164164
});
165165
const appliedQuery = appliedParamsState.channelListQuery;
166-
expect(appliedQuery._searchFilter.search_fields).toEqual(channelListQuery._searchFilter.search_fields);
167-
expect(appliedQuery._searchFilter.search_query).toEqual(channelListQuery._searchFilter.search_query);
168-
expect(appliedQuery._userIdsFilter.userIds).toEqual(channelListQuery._userIdsFilter.userIds);
169-
expect(appliedQuery._userIdsFilter.includeMode).toEqual(channelListQuery._userIdsFilter.includeMode);
170-
expect(appliedQuery._userIdsFilter.queryType).toEqual(channelListQuery._userIdsFilter.queryType);
166+
expect(appliedQuery.searchFilter.search_fields).toEqual(channelListQuery.searchFilter.search_fields);
167+
expect(appliedQuery.searchFilter.search_query).toEqual(channelListQuery.searchFilter.search_query);
168+
expect(appliedQuery.userIdsFilter.userIds).toEqual(channelListQuery.userIdsFilter.userIds);
169+
expect(appliedQuery.userIdsFilter.includeMode).toEqual(channelListQuery.userIdsFilter.includeMode);
170+
expect(appliedQuery.userIdsFilter.queryType).toEqual(channelListQuery.userIdsFilter.queryType);
171171
expect(appliedQuery.nicknameContainsFilter).toEqual(channelListQuery.nicknameContainsFilter);
172172
expect(appliedQuery.channelNameContainsFilter).toEqual(channelListQuery.channelNameContainsFilter);
173173
expect(appliedQuery.memberStateFilter).toEqual(channelListQuery.memberStateFilter);
@@ -187,14 +187,14 @@ describe('Channels-Reducers', () => {
187187
* > target member join > change search_field to channel_name > another member join > change channel name
188188
*/
189189
const channelListQuery = {
190-
_searchFilter: { search_fields: ['member_nickname'], search_query: user1.nickname },
190+
searchFilter: { fields: ['member_nickname'], query: user1.nickname },
191191
};
192192
const newChannel = { ...creatingChannel };
193193
const appliedParamsState = reducers(mockData, {
194194
type: actionTypes.CHANNEL_LIST_PARAMS_UPDATED,
195195
payload: { currentUserId: user1.userId, channelListQuery },
196196
});
197-
expect(appliedParamsState.channelListQuery._searchFilter.search_query).toEqual(user1.nickname);
197+
expect(appliedParamsState.channelListQuery.searchFilter.query).toEqual(user1.nickname);
198198
expect(appliedParamsState.allChannels[0].url).not.toEqual(newChannel.url);
199199
const createdChannelState = reducers(appliedParamsState, {
200200
type: actionTypes.CREATE_CHANNEL,
@@ -221,11 +221,11 @@ describe('Channels-Reducers', () => {
221221
type: actionTypes.CHANNEL_LIST_PARAMS_UPDATED,
222222
payload: {
223223
currentUserId: user1.userId,
224-
channelListQuery: { _searchFilter: { ...channelListQuery._searchFilter, search_fields: ['channel_name'] } },
224+
channelListQuery: { searchFilter: { ...channelListQuery.searchFilter, fields: ['channel_name'] } },
225225
},
226226
});
227-
expect(paramsWithChannelNameState.channelListQuery._searchFilter.search_fields).toEqual(['channel_name']);
228-
expect(paramsWithChannelNameState.channelListQuery._searchFilter.search_query).toEqual(user1.nickname);
227+
expect(paramsWithChannelNameState.channelListQuery.searchFilter.fields).toEqual(['channel_name']);
228+
expect(paramsWithChannelNameState.channelListQuery.searchFilter.query).toEqual(user1.nickname);
229229
const anotherUserJoinedState = reducers(paramsWithChannelNameState, {
230230
type: actionTypes.ON_USER_JOINED,
231231
payload: { ...newChannel, members: [user1, user2, user3] },
@@ -247,7 +247,7 @@ describe('Channels-Reducers', () => {
247247
payload: {
248248
currentUserId: user1.userId,
249249
channelListQuery: {
250-
_userIdsFilter: { userIds: [user1.userId, user2.userId], includeMode: false },
250+
userIdsFilter: { userIds: [user1.userId, user2.userId], includeMode: false },
251251
},
252252
}
253253
});
@@ -257,7 +257,7 @@ describe('Channels-Reducers', () => {
257257
payload: {
258258
currentUserId: user1.userId,
259259
channelListQuery: {
260-
_userIdsFilter: {
260+
userIdsFilter: {
261261
userIds: [user1.userId, user2.userId],
262262
includeMode: true,
263263
queryType: 'OR',
@@ -271,7 +271,7 @@ describe('Channels-Reducers', () => {
271271
payload: {
272272
currentUserId: user1.userId,
273273
channelListQuery: {
274-
_userIdsFilter: {
274+
userIdsFilter: {
275275
userIds: [user1.userId, user2.userId],
276276
includeMode: true,
277277
queryType: 'AND',

src/utils/index.ts

+7-18
Original file line numberDiff line numberDiff line change
@@ -339,25 +339,14 @@ export const filterMessageListParams = (params: MessageListParams, message: User
339339
return true;
340340
};
341341

342-
interface SDKChannelListParamsPrivateProps extends GroupChannelListQuery {
343-
_searchFilter: {
344-
search_query: string,
345-
search_fields: Array<'member_nickname' | 'channel_name'>,
346-
};
347-
_userIdsFilter: {
348-
userIds: Array<string>,
349-
includeMode: boolean,
350-
queryType: 'AND' | 'OR',
351-
};
352-
}
353-
export const filterChannelListParams = (params: SDKChannelListParamsPrivateProps, channel: GroupChannel, currentUserId: string): boolean => {
342+
export const filterChannelListParams = (params: GroupChannelListQuery, channel: GroupChannel, currentUserId: string): boolean => {
354343
if (!params?.includeEmpty && channel?.lastMessage === null) {
355344
return false;
356345
}
357-
if (params?._searchFilter?.search_query && params._searchFilter.search_fields?.length > 0) {
358-
const searchFilter = params._searchFilter;
359-
const searchQuery = searchFilter.search_query;
360-
const searchFields = searchFilter.search_fields;
346+
const searchFilter = params?.searchFilter;
347+
if (searchFilter?.query && searchFilter.fields?.length > 0) {
348+
const searchQuery = searchFilter.query;
349+
const searchFields = searchFilter.fields;
361350
if (searchQuery && searchFields && searchFields.length > 0) {
362351
if (!searchFields.some((searchField) => {
363352
switch (searchField) {
@@ -376,8 +365,8 @@ export const filterChannelListParams = (params: SDKChannelListParamsPrivateProps
376365
}
377366
}
378367
}
379-
if (params?._userIdsFilter?.userIds?.length > 0) {
380-
const userIdsFilter = params._userIdsFilter;
368+
const userIdsFilter = params?.userIdsFilter;
369+
if (userIdsFilter?.userIds?.length > 0) {
381370
const { includeMode, queryType } = userIdsFilter;
382371
const userIds: string[] = userIdsFilter.userIds;
383372
const memberIds = channel?.members?.map((member: Member) => member.userId);

0 commit comments

Comments
 (0)