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,20 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
99100 } ) ;
100101 } , [ groupUsers ] ) ;
101102
103+ const roleFilterOptions = useMemo ( ( ) => [
104+ ...TacoRoles . map ( role => ( {
105+ label : GroupRoleInfo [ role ] . name ,
106+ value : role as RoleIdType | ""
107+ } ) ) ,
108+ {
109+ label : "All" ,
110+ value : "" as RoleIdType | ""
111+ }
112+ ] , [ ] ) ;
113+
102114 const debouncedFetchPotentialMembers = useCallback (
103- debounce ( ( searchVal : string ) => {
104- fetchGroupUsrPagination ( { groupId : group . groupId , search : searchVal } )
115+ debounce ( ( searchVal : string , roleFilter : string ) => {
116+ fetchGroupUsrPagination ( { groupId : group . groupId , search : searchVal , role : roleFilter } )
105117 . then ( result => {
106118 if ( result . success ) {
107119 setElements ( {
@@ -115,13 +127,13 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
115127 ) ;
116128
117129 useEffect ( ( ) => {
118- if ( searchValue . length > 2 || searchValue === "" ) {
119- debouncedFetchPotentialMembers ( searchValue ) ;
130+ if ( searchValue . length > 2 || searchValue === "" || roleFilter ) {
131+ debouncedFetchPotentialMembers ( searchValue , roleFilter ) ;
120132 }
121133 return ( ) => {
122134 debouncedFetchPotentialMembers . cancel ( ) ;
123135 } ;
124- } , [ searchValue , debouncedFetchPotentialMembers ] ) ;
136+ } , [ searchValue , roleFilter , debouncedFetchPotentialMembers ] ) ;
125137
126138 return (
127139 < >
@@ -137,6 +149,17 @@ const GroupUsersPermission: React.FC<GroupPermissionProp> = (props) => {
137149 </ HeaderBack >
138150 { isGroupAdmin ( currentUserGroupRole ) && ! group . syncGroup && (
139151 < OptionsHeader >
152+ < Dropdown
153+ options = { roleFilterOptions }
154+ value = { roleFilter || "" }
155+ onChange = { ( value ) => {
156+ setRoleFilter ( value ) ;
157+ } }
158+ style = { {
159+ minWidth : "100px"
160+ } }
161+ placeholder = { trans ( "memberSettings.filterByRole" ) }
162+ />
140163 < Search
141164 placeholder = { trans ( "memberSettings.searchMember" ) }
142165 value = { searchValue }
0 commit comments