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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy