1
- import { GroupRoleInfo , GroupUser , OrgGroup , TacoRoles } from "constants/orgConstants" ;
1
+ import { GroupRoleInfo , GroupUser , OrgGroup , TacoRoles , RoleIdType } from "constants/orgConstants" ;
2
2
import { User } from "constants/userConstants" ;
3
- import { AddIcon , ArrowIcon , CustomSelect , PackUpIcon , Search , SuperUserIcon } from "lowcoder-design" ;
3
+ import { AddIcon , ArrowIcon , CustomSelect , Dropdown , PackUpIcon , Search , SuperUserIcon } from "lowcoder-design" ;
4
4
import { trans } from "i18n" ;
5
5
import ProfileImage from "pages/common/profileImage" ;
6
6
import React , { useCallback , useEffect , useMemo , useState } from "react" ;
@@ -84,6 +84,7 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
84
84
setElements
85
85
} = props ;
86
86
const [ searchValue , setSearchValue ] = useState ( "" )
87
+ const [ roleFilter , setRoleFilter ] = useState < RoleIdType | "" > ( "" )
87
88
const dispatch = useDispatch ( ) ;
88
89
89
90
const adminCount = groupUsers . filter ( ( user ) => isGroupAdmin ( user . role ) ) . length ;
@@ -99,9 +100,23 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
99
100
} ) ;
100
101
} , [ groupUsers ] ) ;
101
102
103
+ const roleFilterOptions = useCallback ( ( ) => {
104
+ const filterOptions = [
105
+ ...TacoRoles . map ( role => ( {
106
+ label : GroupRoleInfo [ role ] . name ,
107
+ value : role as RoleIdType | ""
108
+ } ) ) ,
109
+ {
110
+ label : "All" ,
111
+ value : "" as RoleIdType | ""
112
+ }
113
+ ]
114
+ return filterOptions ;
115
+ } , [ ] )
116
+
102
117
const debouncedFetchPotentialMembers = useCallback (
103
- debounce ( ( searchVal : string ) => {
104
- fetchGroupUsrPagination ( { groupId : group . groupId , search : searchVal } )
118
+ debounce ( ( searchVal : string , roleFilter : string ) => {
119
+ fetchGroupUsrPagination ( { groupId : group . groupId , search : searchVal , role : roleFilter } )
105
120
. then ( result => {
106
121
if ( result . success ) {
107
122
setElements ( {
@@ -115,13 +130,13 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
115
130
) ;
116
131
117
132
useEffect ( ( ) => {
118
- if ( searchValue . length > 2 || searchValue === "" ) {
119
- debouncedFetchPotentialMembers ( searchValue ) ;
133
+ if ( searchValue . length > 2 || searchValue === "" || roleFilter ) {
134
+ debouncedFetchPotentialMembers ( searchValue , roleFilter ) ;
120
135
}
121
136
return ( ) => {
122
137
debouncedFetchPotentialMembers . cancel ( ) ;
123
138
} ;
124
- } , [ searchValue , debouncedFetchPotentialMembers ] ) ;
139
+ } , [ searchValue , roleFilter , debouncedFetchPotentialMembers ] ) ;
125
140
126
141
return (
127
142
< >
@@ -137,6 +152,17 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
137
152
</ HeaderBack >
138
153
{ isGroupAdmin ( currentUserGroupRole ) && ! group . syncGroup && (
139
154
< OptionsHeader >
155
+ < Dropdown
156
+ options = { roleFilterOptions ( ) }
157
+ value = { roleFilter || "" }
158
+ onChange = { ( value ) => {
159
+ setRoleFilter ( value ) ;
160
+ } }
161
+ style = { {
162
+ minWidth : "100px"
163
+ } }
164
+ placeholder = { trans ( "memberSettings.filterByRole" ) }
165
+ />
140
166
< Search
141
167
placeholder = { trans ( "memberSettings.searchMember" ) }
142
168
value = { searchValue }
0 commit comments