@@ -101,7 +101,7 @@ export function UserAdminPanel() {
101101 const [ managedUser , setManagedUser ] = useState < CloudUser | null > ( null ) ;
102102 const [ managedNameDraft , setManagedNameDraft ] = useState ( "" ) ;
103103 const [ managedEmailDraft , setManagedEmailDraft ] = useState ( "" ) ;
104- const [ userFilter , setUserFilter ] = useState < "all" | "pending" | "approved" > ( "all" ) ;
104+ const [ userFilter , setUserFilter ] = useState < "all" | "pending" | "approved" | "revoked" > ( "all" ) ;
105105 const [ userSearch , setUserSearch ] = useState ( "" ) ;
106106 const [ dismissedNotifications , setDismissedNotifications ] = useState < Set < string > > ( ( ) =>
107107 typeof window === "undefined" ? new Set ( ) : readDismissedNotificationIds ( ) ,
@@ -211,12 +211,21 @@ export function UserAdminPanel() {
211211 } , [ canAdmin ] ) ;
212212
213213 const userRows = useMemo ( ( ) => users . filter ( ( user ) => user . id !== me ?. id ) , [ users , me ?. id ] ) ;
214- const pendingUserCount = useMemo ( ( ) => userRows . filter ( ( user ) => ! user . isApproved ) . length , [ userRows ] ) ;
214+ const pendingUserCount = useMemo (
215+ ( ) => userRows . filter ( ( user ) => ( user . accountState ?? ( user . isApproved ? "approved" : "pending" ) ) === "pending" ) . length ,
216+ [ userRows ] ,
217+ ) ;
218+ const revokedUserCount = useMemo (
219+ ( ) => userRows . filter ( ( user ) => ( user . accountState ?? ( user . isApproved ? "approved" : "pending" ) ) === "revoked" ) . length ,
220+ [ userRows ] ,
221+ ) ;
215222 const filteredUserRows = useMemo ( ( ) => {
216223 const q = userSearch . trim ( ) . toLowerCase ( ) ;
217224 return userRows . filter ( ( user ) => {
218- if ( userFilter === "pending" && user . isApproved ) return false ;
219- if ( userFilter === "approved" && ! user . isApproved ) return false ;
225+ const state = user . accountState ?? ( user . isApproved ? "approved" : "pending" ) ;
226+ if ( userFilter === "pending" && state !== "pending" ) return false ;
227+ if ( userFilter === "approved" && state !== "approved" ) return false ;
228+ if ( userFilter === "revoked" && state !== "revoked" ) return false ;
220229 if ( ! q ) return true ;
221230 return (
222231 user . username . toLowerCase ( ) . includes ( q ) ||
@@ -595,14 +604,19 @@ export function UserAdminPanel() {
595604 < div className = "user-manager-list" >
596605 < div className = "section-heading" >
597606 < p className = "field-help" > Users: open a profile to review and moderate.</ p >
598- < p className = "field-help" > Pending: { pendingUserCount } </ p >
607+ < p className = "field-help" > Pending: { pendingUserCount } | Revoked: { revokedUserCount } </ p >
599608 </ div >
600609 < label className = "field-grid user-field-grid" >
601610 < span > Filter</ span >
602- < select className = "locale-select" onChange = { ( event ) => setUserFilter ( event . target . value as "all" | "pending" | "approved" ) } value = { userFilter } >
611+ < select
612+ className = "locale-select"
613+ onChange = { ( event ) => setUserFilter ( event . target . value as "all" | "pending" | "approved" | "revoked" ) }
614+ value = { userFilter }
615+ >
603616 < option value = "all" > All users</ option >
604617 < option value = "pending" > Pending only</ option >
605618 < option value = "approved" > Approved only</ option >
619+ < option value = "revoked" > Revoked only</ option >
606620 </ select >
607621 </ label >
608622 < label className = "field-grid user-field-grid" >
@@ -617,6 +631,13 @@ export function UserAdminPanel() {
617631 < p className = "field-help" >
618632 < strong > { user . username } </ strong >
619633 </ p >
634+ < p className = "field-help" >
635+ { user . accountState === "revoked"
636+ ? "Revoked"
637+ : user . isApproved
638+ ? "Approved"
639+ : "Pending" }
640+ </ p >
620641 < p className = "field-help" > { user . email ?? "-" } </ p >
621642 </ div >
622643 </ div >
0 commit comments