Skip to content

Commit 9eacadc

Browse files
authored
fix: Apply metadata to the ChannelListQuery (#723)
#### Issue There was an issue report that some of the ChannelListQuery properties are not applied even though they are set. A customer set the metadataKey and metadataValues, but we have not applied the filter props. #### Fix fix: apply metadataKey, metadataValues, and metadataStartsWith to the Channel.queries.channelListQuery #### How to use > The values are just an example ```javascript <Channel or ChannelProvider queries={{ channelListQuery: { metadataKey: 'isMatching', metadataValues: ['true'], } }} /> ``` [CLNP-687](https://sendbird.atlassian.net/browse/CLNP-687)
1 parent d83d149 commit 9eacadc

File tree

1 file changed

+52
-21
lines changed

1 file changed

+52
-21
lines changed

src/utils/index.ts

+52-21
Original file line numberDiff line numberDiff line change
@@ -453,10 +453,29 @@ export const filterMessageListParams = (
453453
};
454454

455455
export const filterChannelListParams = (params: GroupChannelListQuery, channel: GroupChannel, currentUserId: string): boolean => {
456-
if (!params?.includeEmpty && channel?.lastMessage === null) {
456+
const {
457+
includeEmpty,
458+
includeFrozen,
459+
searchFilter,
460+
userIdsFilter,
461+
customTypesFilter,
462+
channelUrlsFilter,
463+
customTypeStartsWithFilter,
464+
channelNameContainsFilter,
465+
nicknameContainsFilter,
466+
myMemberStateFilter,
467+
hiddenChannelFilter,
468+
unreadChannelFilter,
469+
publicChannelFilter,
470+
superChannelFilter,
471+
metadataKey = '',
472+
metadataValues = ['a', 'b'],
473+
metadataValueStartsWith,
474+
} = params;
475+
476+
if (!includeEmpty && channel?.lastMessage === null) {
457477
return false;
458478
}
459-
const searchFilter = params?.searchFilter;
460479
if (searchFilter?.query && (searchFilter?.fields?.length ?? 0) > 0) {
461480
const searchQuery = searchFilter.query;
462481
const searchFields = searchFilter.fields;
@@ -478,7 +497,6 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
478497
}
479498
}
480499
}
481-
const userIdsFilter = params?.userIdsFilter;
482500
if (userIdsFilter?.userIds?.length > 0) {
483501
const { includeMode, queryType } = userIdsFilter;
484502
const userIds: string[] = userIdsFilter.userIds;
@@ -513,32 +531,32 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
513531
}
514532
}
515533
}
516-
if (params?.includeEmpty === false && channel?.lastMessage === null) {
534+
if (includeEmpty === false && channel?.lastMessage === null) {
517535
return false;
518536
}
519-
if (params?.includeFrozen === false && channel?.isFrozen === true) {
537+
if (includeFrozen === false && channel?.isFrozen === true) {
520538
return false;
521539
}
522-
if (params?.customTypesFilter?.length > 0 && !params.customTypesFilter.includes(channel?.customType)) {
540+
if (customTypesFilter && !customTypesFilter.includes(channel?.customType)) {
523541
return false;
524542
}
525-
if (params?.customTypeStartsWithFilter && !new RegExp(`^${params.customTypeStartsWithFilter}`).test(channel?.customType)) {
543+
if (customTypeStartsWithFilter && !new RegExp(`^${customTypeStartsWithFilter}`).test(channel?.customType)) {
526544
return false;
527545
}
528-
if (params?.channelNameContainsFilter && !channel?.name?.toLowerCase().includes(params.channelNameContainsFilter.toLowerCase())) {
546+
if (channelNameContainsFilter && !channel?.name?.toLowerCase().includes(channelNameContainsFilter.toLowerCase())) {
529547
return false;
530548
}
531-
if (params?.nicknameContainsFilter) {
532-
const lowerCasedSubString = params.nicknameContainsFilter.toLowerCase();
549+
if (nicknameContainsFilter) {
550+
const lowerCasedSubString = nicknameContainsFilter.toLowerCase();
533551
if (channel?.members?.every((member: Member) => !member.nickname.toLowerCase().includes(lowerCasedSubString))) {
534552
return false;
535553
}
536554
}
537-
if (params?.channelUrlsFilter?.length > 0 && !params.channelUrlsFilter.includes(channel?.url)) {
555+
if (channelUrlsFilter && !channelUrlsFilter.includes(channel?.url)) {
538556
return false;
539557
}
540-
if (params?.myMemberStateFilter) {
541-
switch (params.myMemberStateFilter) {
558+
if (myMemberStateFilter) {
559+
switch (myMemberStateFilter) {
542560
case 'joined_only':
543561
if (channel?.myMemberState !== 'joined') {
544562
return false;
@@ -561,8 +579,8 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
561579
break;
562580
}
563581
}
564-
if (params?.hiddenChannelFilter) {
565-
switch (params.hiddenChannelFilter) {
582+
if (hiddenChannelFilter) {
583+
switch (hiddenChannelFilter) {
566584
case 'unhidden_only':
567585
if (channel?.isHidden || channel?.hiddenState !== 'unhidden') {
568586
return false;
@@ -585,17 +603,17 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
585603
break;
586604
}
587605
}
588-
if (params?.unreadChannelFilter) {
589-
switch (params.unreadChannelFilter) {
606+
if (unreadChannelFilter) {
607+
switch (unreadChannelFilter) {
590608
case 'unread_message':
591609
if (channel?.unreadMessageCount === 0) {
592610
return false;
593611
}
594612
break;
595613
}
596614
}
597-
if (params?.publicChannelFilter) {
598-
switch (params.publicChannelFilter) {
615+
if (publicChannelFilter) {
616+
switch (publicChannelFilter) {
599617
case 'public':
600618
if (!channel?.isPublic) {
601619
return false;
@@ -608,8 +626,8 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
608626
break;
609627
}
610628
}
611-
if (params?.superChannelFilter) {
612-
switch (params.superChannelFilter) {
629+
if (superChannelFilter) {
630+
switch (superChannelFilter) {
613631
case 'super':
614632
if (!channel?.isSuper) {
615633
return false;
@@ -622,6 +640,19 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
622640
break;
623641
}
624642
}
643+
const { cachedMetaData = {} } = channel;
644+
if (metadataKey && (metadataValues || metadataValueStartsWith)) {
645+
const metadataValue: string = cachedMetaData[metadataKey];
646+
if (!metadataValue) {
647+
return false;
648+
}
649+
if (metadataValues && !metadataValues.every(value => metadataValue.includes(value))) {
650+
return false;
651+
}
652+
if (metadataValueStartsWith && !metadataValue.startsWith(metadataValueStartsWith)) {
653+
return false;
654+
}
655+
}
625656
return true;
626657
};
627658

0 commit comments

Comments
 (0)