@@ -453,10 +453,29 @@ export const filterMessageListParams = (
453453} ;
454454
455455export 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