@@ -51,9 +51,13 @@ export const listUsers = query({
5151 page : v . optional ( v . number ( ) ) ,
5252 } ) ,
5353 emailFilter : v . optional ( v . string ( ) ) ,
54+ nameFilter : v . optional ( v . string ( ) ) ,
5455 capabilityFilter : v . optional (
55- v . union ( v . literal ( 'admin' ) , v . literal ( 'disableAds' ) , v . literal ( 'builder' ) )
56+ v . array (
57+ v . union ( v . literal ( 'admin' ) , v . literal ( 'disableAds' ) , v . literal ( 'builder' ) )
58+ )
5659 ) ,
60+ noCapabilitiesFilter : v . optional ( v . boolean ( ) ) ,
5761 adsDisabledFilter : v . optional ( v . boolean ( ) ) ,
5862 interestedInHidingAdsFilter : v . optional ( v . boolean ( ) ) ,
5963 } ,
@@ -81,10 +85,29 @@ export const listUsers = query({
8185 candidates . sort ( ( a : any , b : any ) => b . _creationTime - a . _creationTime )
8286
8387 const filtered = candidates . filter ( ( user : any ) => {
84- if ( args . capabilityFilter ) {
88+ // Name filter (in-memory search on name and displayUsername)
89+ if ( args . nameFilter && args . nameFilter . length > 0 ) {
90+ const name = ( user . name || user . displayUsername || '' ) . toLowerCase ( )
91+ const searchTerm = args . nameFilter . toLowerCase ( )
92+ if ( ! name . includes ( searchTerm ) ) {
93+ return false
94+ }
95+ }
96+
97+ // No capabilities filter
98+ if ( args . noCapabilitiesFilter === true ) {
99+ if (
100+ ! Array . isArray ( user . capabilities ) ||
101+ user . capabilities . length > 0
102+ ) {
103+ return false
104+ }
105+ }
106+
107+ if ( args . capabilityFilter && args . capabilityFilter . length > 0 ) {
85108 if (
86109 ! Array . isArray ( user . capabilities ) ||
87- ! user . capabilities . includes ( args . capabilityFilter )
110+ ! args . capabilityFilter . some ( ( cap ) => user . capabilities . includes ( cap ) )
88111 ) {
89112 return false
90113 }
0 commit comments