@@ -453,10 +453,29 @@ export const filterMessageListParams = (
453
453
} ;
454
454
455
455
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 ) {
457
477
return false ;
458
478
}
459
- const searchFilter = params ?. searchFilter ;
460
479
if ( searchFilter ?. query && ( searchFilter ?. fields ?. length ?? 0 ) > 0 ) {
461
480
const searchQuery = searchFilter . query ;
462
481
const searchFields = searchFilter . fields ;
@@ -478,7 +497,6 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
478
497
}
479
498
}
480
499
}
481
- const userIdsFilter = params ?. userIdsFilter ;
482
500
if ( userIdsFilter ?. userIds ?. length > 0 ) {
483
501
const { includeMode, queryType } = userIdsFilter ;
484
502
const userIds : string [ ] = userIdsFilter . userIds ;
@@ -513,32 +531,32 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
513
531
}
514
532
}
515
533
}
516
- if ( params ?. includeEmpty === false && channel ?. lastMessage === null ) {
534
+ if ( includeEmpty === false && channel ?. lastMessage === null ) {
517
535
return false ;
518
536
}
519
- if ( params ?. includeFrozen === false && channel ?. isFrozen === true ) {
537
+ if ( includeFrozen === false && channel ?. isFrozen === true ) {
520
538
return false ;
521
539
}
522
- if ( params ?. customTypesFilter ?. length > 0 && ! params . customTypesFilter . includes ( channel ?. customType ) ) {
540
+ if ( customTypesFilter && ! customTypesFilter . includes ( channel ?. customType ) ) {
523
541
return false ;
524
542
}
525
- if ( params ?. customTypeStartsWithFilter && ! new RegExp ( `^${ params . customTypeStartsWithFilter } ` ) . test ( channel ?. customType ) ) {
543
+ if ( customTypeStartsWithFilter && ! new RegExp ( `^${ customTypeStartsWithFilter } ` ) . test ( channel ?. customType ) ) {
526
544
return false ;
527
545
}
528
- if ( params ?. channelNameContainsFilter && ! channel ?. name ?. toLowerCase ( ) . includes ( params . channelNameContainsFilter . toLowerCase ( ) ) ) {
546
+ if ( channelNameContainsFilter && ! channel ?. name ?. toLowerCase ( ) . includes ( channelNameContainsFilter . toLowerCase ( ) ) ) {
529
547
return false ;
530
548
}
531
- if ( params ?. nicknameContainsFilter ) {
532
- const lowerCasedSubString = params . nicknameContainsFilter . toLowerCase ( ) ;
549
+ if ( nicknameContainsFilter ) {
550
+ const lowerCasedSubString = nicknameContainsFilter . toLowerCase ( ) ;
533
551
if ( channel ?. members ?. every ( ( member : Member ) => ! member . nickname . toLowerCase ( ) . includes ( lowerCasedSubString ) ) ) {
534
552
return false ;
535
553
}
536
554
}
537
- if ( params ?. channelUrlsFilter ?. length > 0 && ! params . channelUrlsFilter . includes ( channel ?. url ) ) {
555
+ if ( channelUrlsFilter && ! channelUrlsFilter . includes ( channel ?. url ) ) {
538
556
return false ;
539
557
}
540
- if ( params ?. myMemberStateFilter ) {
541
- switch ( params . myMemberStateFilter ) {
558
+ if ( myMemberStateFilter ) {
559
+ switch ( myMemberStateFilter ) {
542
560
case 'joined_only' :
543
561
if ( channel ?. myMemberState !== 'joined' ) {
544
562
return false ;
@@ -561,8 +579,8 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
561
579
break ;
562
580
}
563
581
}
564
- if ( params ?. hiddenChannelFilter ) {
565
- switch ( params . hiddenChannelFilter ) {
582
+ if ( hiddenChannelFilter ) {
583
+ switch ( hiddenChannelFilter ) {
566
584
case 'unhidden_only' :
567
585
if ( channel ?. isHidden || channel ?. hiddenState !== 'unhidden' ) {
568
586
return false ;
@@ -585,17 +603,17 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
585
603
break ;
586
604
}
587
605
}
588
- if ( params ?. unreadChannelFilter ) {
589
- switch ( params . unreadChannelFilter ) {
606
+ if ( unreadChannelFilter ) {
607
+ switch ( unreadChannelFilter ) {
590
608
case 'unread_message' :
591
609
if ( channel ?. unreadMessageCount === 0 ) {
592
610
return false ;
593
611
}
594
612
break ;
595
613
}
596
614
}
597
- if ( params ?. publicChannelFilter ) {
598
- switch ( params . publicChannelFilter ) {
615
+ if ( publicChannelFilter ) {
616
+ switch ( publicChannelFilter ) {
599
617
case 'public' :
600
618
if ( ! channel ?. isPublic ) {
601
619
return false ;
@@ -608,8 +626,8 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
608
626
break ;
609
627
}
610
628
}
611
- if ( params ?. superChannelFilter ) {
612
- switch ( params . superChannelFilter ) {
629
+ if ( superChannelFilter ) {
630
+ switch ( superChannelFilter ) {
613
631
case 'super' :
614
632
if ( ! channel ?. isSuper ) {
615
633
return false ;
@@ -622,6 +640,19 @@ export const filterChannelListParams = (params: GroupChannelListQuery, channel:
622
640
break ;
623
641
}
624
642
}
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
+ }
625
656
return true ;
626
657
} ;
627
658
0 commit comments