1- import { GroupRoleInfo , GroupUser , OrgGroup , TacoRoles } from "constants/orgConstants" ;
1+ import { GroupRoleInfo , GroupUser , OrgGroup , TacoRoles , RoleIdType } from "constants/orgConstants" ;
22import { 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" ;
44import { trans } from "i18n" ;
55import ProfileImage from "pages/common/profileImage" ;
66import React , { useCallback , useEffect , useMemo , useState } from "react" ;
@@ -84,6 +84,7 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
8484 setElements
8585 } = props ;
8686 const [ searchValue , setSearchValue ] = useState ( "" )
87+ const [ roleFilter , setRoleFilter ] = useState < RoleIdType | "" > ( "" )
8788 const dispatch = useDispatch ( ) ;
8889
8990 const adminCount = groupUsers . filter ( ( user ) => isGroupAdmin ( user . role ) ) . length ;
@@ -99,9 +100,23 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
99100 } ) ;
100101 } , [ groupUsers ] ) ;
101102
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+
102117 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 } )
105120 . then ( result => {
106121 if ( result . success ) {
107122 setElements ( {
@@ -115,13 +130,13 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
115130 ) ;
116131
117132 useEffect ( ( ) => {
118- if ( searchValue . length > 2 || searchValue === "" ) {
119- debouncedFetchPotentialMembers ( searchValue ) ;
133+ if ( searchValue . length > 2 || searchValue === "" || roleFilter ) {
134+ debouncedFetchPotentialMembers ( searchValue , roleFilter ) ;
120135 }
121136 return ( ) => {
122137 debouncedFetchPotentialMembers . cancel ( ) ;
123138 } ;
124- } , [ searchValue , debouncedFetchPotentialMembers ] ) ;
139+ } , [ searchValue , roleFilter , debouncedFetchPotentialMembers ] ) ;
125140
126141 return (
127142 < >
@@ -137,6 +152,17 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
137152 </ HeaderBack >
138153 { isGroupAdmin ( currentUserGroupRole ) && ! group . syncGroup && (
139154 < 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+ />
140166 < Search
141167 placeholder = { trans ( "memberSettings.searchMember" ) }
142168 value = { searchValue }
0 commit comments