11import  {  GroupRoleInfo ,  GroupUser ,  OrgGroup ,  TacoRoles  }  from  "constants/orgConstants" ; 
22import  {  User  }  from  "constants/userConstants" ; 
3- import  {  AddIcon ,  ArrowIcon ,  CustomSelect ,  PackUpIcon ,  SuperUserIcon  }  from  "lowcoder-design" ; 
3+ import  {  AddIcon ,  ArrowIcon ,  CustomSelect ,  PackUpIcon ,  Search ,   SuperUserIcon  }  from  "lowcoder-design" ; 
44import  {  trans  }  from  "i18n" ; 
55import  ProfileImage  from  "pages/common/profileImage" ; 
6- import  React ,  {  useMemo  }  from  "react" ; 
6+ import  React ,  {  useCallback ,   useEffect ,   useMemo ,   useState  }  from  "react" ; 
77import  {  useDispatch  }  from  "react-redux" ; 
88import  { 
99  deleteGroupUserAction , 
@@ -20,7 +20,6 @@ import {
2020  GroupNameView , 
2121  HeaderBack , 
2222  LAST_ADMIN_QUIT , 
23-   PermissionHeaderWrapper , 
2423  QuestionTooltip , 
2524  RoleSelectSubTitle , 
2625  RoleSelectTitle , 
@@ -31,13 +30,35 @@ import {
3130import  history  from  "util/history" ; 
3231import  {  PERMISSION_SETTING  }  from  "constants/routesURL" ; 
3332import  Column  from  "antd/es/table/Column" ; 
33+ import  {  debounce  }  from  "lodash" ; 
34+ import  {  fetchGroupUsrPagination  }  from  "@lowcoder-ee/util/pagination/axios" ; 
3435
3536const  StyledAddIcon  =  styled ( AddIcon ) ` 
3637  g path { 
3738    fill: #ffffff; 
3839  } 
3940` ; 
4041
42+ const  PermissionHeaderWrapper  =  styled . div ` 
43+   display: flex; 
44+   align-items: center; 
45+   justify-content: space-between; 
46+   width: 100%; 
47+   margin-bottom: 16px; 
48+ ` ; 
49+ 
50+ const  OptionsHeader  =  styled . div ` 
51+   display: flex; 
52+   align-items: center; 
53+   gap: 12px; 
54+ ` ; 
55+ 
56+ type  ElementsState  =  { 
57+   elements : any [ ] ; 
58+   total : number ; 
59+   role : string ; 
60+ } ; 
61+ 
4162type  GroupPermissionProp  =  { 
4263  group : OrgGroup ; 
4364  orgId : string ; 
@@ -47,11 +68,24 @@ type GroupPermissionProp = {
4768  setModify ?: any ; 
4869  modify ?: boolean ; 
4970  loading ?: boolean ; 
71+   setElements : React . Dispatch < React . SetStateAction < ElementsState > > ; 
5072} ; 
5173
52- function  GroupUsersPermission ( props : GroupPermissionProp )  { 
53-   // const { Column } = TableStyled; 
54-   const  {  group,  orgId,  groupUsers,  currentUserGroupRole,  currentUser,  setModify,  modify,  loading }  =  props ; 
74+ const  GroupUsersPermission : React . FC < GroupPermissionProp >  =  ( props )  =>  { 
75+   const  {  
76+     group,  
77+     orgId,  
78+     groupUsers,  
79+     currentUserGroupRole,  
80+     currentUser,  
81+     setModify,  
82+     modify,  
83+     loading, 
84+     setElements
85+   }  =  props ; 
86+   const  [ searchValue ,  setSearchValue ]  =  useState ( "" ) 
87+   const  dispatch  =  useDispatch ( ) ; 
88+ 
5589  const  adminCount  =  groupUsers . filter ( ( user )  =>  isGroupAdmin ( user . role ) ) . length ; 
5690  const  sortedGroupUsers  =  useMemo ( ( )  =>  { 
5791    return  [ ...groupUsers ] . sort ( ( a ,  b )  =>  { 
@@ -64,7 +98,31 @@ function GroupUsersPermission(props: GroupPermissionProp) {
6498      } 
6599    } ) ; 
66100  } ,  [ groupUsers ] ) ; 
67-   const  dispatch  =  useDispatch ( ) ; 
101+ 
102+   const  debouncedFetchPotentialMembers  =  useCallback ( 
103+     debounce ( ( searchVal : string )  =>  { 
104+       fetchGroupUsrPagination ( { groupId : group . groupId ,  search : searchVal } ) 
105+       . then ( result  =>  {   
106+         if  ( result . success )  { 
107+           setElements ( { 
108+             elements : result . data  ||  [ ] ,  
109+             total : result . total  ||  0 , 
110+             role : result . visitorRole  ||  "" 
111+           } ) ; 
112+         } 
113+       } ) 
114+     } ,  500 ) ,  [ dispatch ] 
115+   ) ; 
116+ 
117+   useEffect ( ( )  =>  { 
118+     if  ( searchValue . length  >  2  ||  searchValue  ===  "" )  { 
119+       debouncedFetchPotentialMembers ( searchValue ) ; 
120+     } 
121+     return  ( )  =>  { 
122+       debouncedFetchPotentialMembers . cancel ( ) ; 
123+     } ; 
124+   } ,  [ searchValue ,  debouncedFetchPotentialMembers ] ) ; 
125+ 
68126  return  ( 
69127    < > 
70128      < PermissionHeaderWrapper > 
@@ -78,19 +136,31 @@ function GroupUsersPermission(props: GroupPermissionProp) {
78136          ) } 
79137        </ HeaderBack > 
80138        { isGroupAdmin ( currentUserGroupRole )  &&  ! group . syncGroup  &&  ( 
81-           < AddGroupUserDialog 
82-             groupUsers = { groupUsers } 
83-             orgId = { orgId } 
84-             groupId = { group . groupId } 
85-             setModify = { setModify } 
86-             modify = { modify } 
87-             trigger = { 
88-               < AddMemberButton  buttonType = "primary"  icon = { < StyledAddIcon  /> } > 
89-                 { trans ( "memberSettings.addMember" ) } 
90-               </ AddMemberButton > 
91-             } 
92-             style = { {  marginLeft : "auto"  } } 
93-           /> 
139+           < OptionsHeader > 
140+             < Search 
141+               placeholder = { trans ( "memberSettings.searchMember" ) } 
142+               value = { searchValue } 
143+               onChange = { ( e )  =>  setSearchValue ( e . target . value ) } 
144+               style = { {  
145+                 width : "20%" ,  
146+                 minWidth : "160px" , 
147+                 height : "32px" ,  
148+                 marginTop : 'auto' 
149+               } } 
150+             /> 
151+             < AddGroupUserDialog 
152+               groupUsers = { groupUsers } 
153+               orgId = { orgId } 
154+               groupId = { group . groupId } 
155+               setModify = { setModify } 
156+               modify = { modify } 
157+               trigger = { 
158+                 < AddMemberButton  buttonType = "primary"  icon = { < StyledAddIcon  /> } > 
159+                   { trans ( "memberSettings.addMember" ) } 
160+                 </ AddMemberButton > 
161+               } 
162+             /> 
163+           </ OptionsHeader > 
94164        ) } 
95165      </ PermissionHeaderWrapper > 
96166      < TableStyled 
0 commit comments