Skip to content

Commit 8ff5f78

Browse files
committed
Dropdown in User Groups to filter roles
1 parent 67643f6 commit 8ff5f78

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

client/packages/lowcoder/src/i18n/locales/en.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3021,6 +3021,7 @@ export const en = {
30213021
"joinTimeColumn": "Joining Time",
30223022
"actionColumn": "Operation",
30233023
"roleColumn": "Role",
3024+
"filterByRole": "Filter by role",
30243025
"exitGroup": "Exit Group",
30253026
"moveOutGroup": "Remove from Group",
30263027
"inviteUser": "Invite Members",

client/packages/lowcoder/src/pages/setting/permission/groupUsersPermission.tsx

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { GroupRoleInfo, GroupUser, OrgGroup, TacoRoles } from "constants/orgConstants";
1+
import { GroupRoleInfo, GroupUser, OrgGroup, TacoRoles, RoleIdType } from "constants/orgConstants";
22
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";
44
import { trans } from "i18n";
55
import ProfileImage from "pages/common/profileImage";
66
import 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}

client/packages/lowcoder/src/util/pagination/type.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ export interface fetchGroupUserRequestType {
8787
groupId: string;
8888
pageNum?: number;
8989
pageSize?: number;
90-
search?: string
90+
search?: string;
91+
role?: string;
9192
}
9293

9394
export interface fetchQueryLibraryPaginationRequestType {

0 commit comments

Comments
 (0)