Skip to content

Commit fde73e9

Browse files
committed
Implemented pagination in groupUsersPermission.
1 parent cd7494b commit fde73e9

File tree

5 files changed

+102
-28
lines changed

5 files changed

+102
-28
lines changed

client/packages/lowcoder/src/api/orgApi.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ import {
1010
UpdateUserOrgRolePayload,
1111
} from "redux/reduxActions/orgActions";
1212
import { ApiResponse, GenericApiResponse } from "./apiResponses";
13-
import {GenericApiPaginationResponse, orgGroupRequestType} from "@lowcoder-ee/util/pagination/type";
13+
import {
14+
fetchOrgUserRequestType,
15+
GenericApiPaginationResponse,
16+
GroupUsersPaginationResponse,
17+
orgGroupRequestType
18+
} from "@lowcoder-ee/util/pagination/type";
1419

1520
export interface GroupUsersResponse extends ApiResponse {
1621
data: {
@@ -97,6 +102,11 @@ export class OrgApi extends Api {
97102
return Api.get(OrgApi.fetchGroupUsersURL(groupId));
98103
}
99104

105+
static fetchGroupUsersPagination(request: fetchOrgUserRequestType): AxiosPromise<GroupUsersPaginationResponse> {
106+
const {groupId, ...res} = request;
107+
return Api.get(OrgApi.fetchGroupUsersURL(groupId), {...res});
108+
}
109+
100110
static deleteGroupUser(request: RemoveGroupUserPayload): AxiosPromise<ApiResponse> {
101111
return Api.delete(OrgApi.deleteGroupUserURL(request.groupId), {
102112
userId: request.userId,

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

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ import { AddIcon, ArrowIcon, CustomSelect, PackUpIcon, SuperUserIcon } from "low
44
import { trans } from "i18n";
55
import ProfileImage from "pages/common/profileImage";
66
import React, { useEffect, useMemo } from "react";
7-
import { connect, useDispatch } from "react-redux";
8-
import { AppState } from "redux/reducers";
7+
import { useDispatch } from "react-redux";
98
import {
109
deleteGroupUserAction,
1110
fetchGroupUsersAction,
1211
quitGroupAction,
1312
updateUserGroupRoleAction,
1413
} from "redux/reduxActions/orgActions";
15-
import { getUser } from "redux/selectors/usersSelectors";
1614
import styled from "styled-components";
1715
import { formatTimestamp } from "util/dateTimeUtils";
1816
import { currentOrgAdmin, isGroupAdmin } from "util/permissionUtils";
@@ -208,13 +206,4 @@ function GroupUsersPermission(props: GroupPermissionProp) {
208206
);
209207
}
210208

211-
const mapStateToProps = (state: AppState) => {
212-
return {
213-
groupUsers: state.ui.org.groupUsers,
214-
groupUsersFetching: state.ui.org.groupUsersFetching,
215-
currentUser: getUser(state),
216-
currentUserGroupRole: state.ui.org.currentUserGroupRole,
217-
};
218-
};
219-
220-
export default connect(mapStateToProps)(GroupUsersPermission);
209+
export default GroupUsersPermission;
Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
import { useEffect } from "react";
1+
import React, {useEffect, useState} from "react";
22
import { useDispatch, useSelector } from "react-redux";
33
import { fetchGroupsAction } from "redux/reduxActions/orgActions";
44
import { getUser } from "redux/selectors/usersSelectors";
55
import styled from "styled-components";
66
import GroupPermission from "./groupUsersPermission";
77
import UsersPermission from "./orgUsersPermission";
88
import { getOrgGroups } from "redux/selectors/orgSelectors";
9-
import { useParams } from "react-router";
9+
import { useParams } from "react-router-dom";
10+
import { AppState } from "redux/reducers";
11+
import {fetchGroupUsrPagination} from "@lowcoder-ee/util/pagination/axios";
12+
import {OrgGroup} from "@lowcoder-ee/constants/orgConstants";
13+
import PaginationComp from "@lowcoder-ee/util/pagination/Pagination";
1014

1115
const PermissionContent = styled.div`
1216
display: flex;
@@ -20,10 +24,18 @@ const PermissionContent = styled.div`
2024

2125
const All_Users = "users";
2226

23-
export default function PermissionSetting() {
24-
const user = useSelector(getUser);
27+
export default function PermissionSetting() { const user = useSelector(getUser);
28+
29+
const [elements, setElements] = useState<any>({ elements: [], total: 0 });
30+
const [currentPage, setCurrentPage] = useState(1);
31+
const [pageSize, setPageSize] = useState(10);
32+
2533
const orgId = user.currentOrgId;
2634
const orgGroups = useSelector(getOrgGroups);
35+
const groupUsers = useSelector((state: AppState) => state.ui.org.groupUsers);
36+
const groupUsersFetching = useSelector((state: AppState) => state.ui.org.groupUsersFetching);
37+
const currentUserGroupRole = useSelector((state: AppState) => state.ui.org.currentUserGroupRole);
38+
const currentUser = useSelector(getUser);
2739
const groupIdMap = new Map(orgGroups.map((group) => [group.groupId, group]));
2840
const dispatch = useDispatch();
2941
const selectKey = useParams<{ groupId: string }>().groupId;
@@ -33,19 +45,49 @@ export default function PermissionSetting() {
3345
}
3446
dispatch(fetchGroupsAction(orgId));
3547
}, [orgId]);
48+
49+
useEffect( () => {
50+
if (selectKey !== "users")
51+
fetchGroupUsrPagination(
52+
{
53+
groupId: groupIdMap.get(selectKey)!.groupId,
54+
pageNum: currentPage,
55+
pageSize: pageSize,
56+
}
57+
).then(result => {
58+
if (result.success){
59+
setElements({elements: result.data || [], total: result.total || 1})
60+
}
61+
else
62+
console.error("ERROR: fetchFolderElements", result.error)
63+
})
64+
}, [currentPage, pageSize]
65+
)
66+
3667
if (!orgId) {
3768
return null;
3869
}
3970

4071
return (
41-
<PermissionContent key={selectKey}>
42-
{selectKey === All_Users ? (
43-
<UsersPermission orgId={orgId} />
44-
) : (
45-
groupIdMap.has(selectKey) && (
46-
<GroupPermission group={groupIdMap.get(selectKey)!} orgId={orgId} />
47-
)
48-
)}
49-
</PermissionContent>
72+
<PermissionContent key={selectKey}>
73+
{selectKey === All_Users ? (
74+
<UsersPermission orgId={orgId} />
75+
) : (
76+
groupIdMap.has(selectKey) && (
77+
<>
78+
<GroupPermission
79+
group={groupIdMap.get(selectKey)!}
80+
orgId={orgId}
81+
groupUsers={groupUsers}
82+
groupUsersFetching={groupUsersFetching}
83+
currentUserGroupRole={currentUserGroupRole}
84+
currentUser={currentUser}
85+
/>
86+
<PaginationComp setCurrentPage={setCurrentPage} setPageSize={setPageSize} currentPage={currentPage} pageSize={pageSize} total={elements.total} />
87+
</>
88+
89+
)
90+
)}
91+
</PermissionContent>
5092
);
51-
}
93+
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
fetchAppRequestType,
55
fetchDBRequestType,
66
fetchFolderRequestType,
7+
fetchOrgUserRequestType,
78
orgGroupRequestType
89
} from "@lowcoder-ee/util/pagination/type";
910
import OrgApi from "@lowcoder-ee/api/orgApi";
@@ -76,4 +77,21 @@ export const fetchDatasourcePagination = async (request: fetchDBRequestType)=> {
7677
error: error
7778
};
7879
}
80+
}
81+
82+
export const fetchGroupUsrPagination = async (request: fetchOrgUserRequestType)=> {
83+
try {
84+
const response = await OrgApi.fetchGroupUsersPagination(request);
85+
return {
86+
success: true,
87+
data: response.data.data,
88+
total: response.data.total
89+
}
90+
} catch (error: any) {
91+
console.error('Failed to fetch data:', error);
92+
return {
93+
success: false,
94+
error: error
95+
};
96+
}
7997
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import {GroupUser} from "@lowcoder-ee/constants/orgConstants";
2+
13
type ApplicationType = {
24
[key: number]: string; // This allows numeric indexing
35
};
@@ -9,6 +11,14 @@ export interface GenericApiPaginationResponse<T> {
911
message: string;
1012
data: T;
1113
}
14+
export interface GroupUsersPaginationResponse {
15+
total: number;
16+
success: boolean;
17+
data: {
18+
members: GroupUser[];
19+
visitorRole: string;
20+
};
21+
}
1222

1323
export const ApplicationPaginationType: ApplicationType = {
1424
0: "",
@@ -46,3 +56,8 @@ export interface orgGroupRequestType{
4656
pageNum?: number;
4757
pageSize?: number;
4858
}
59+
export interface fetchOrgUserRequestType {
60+
groupId: string;
61+
pageNum?: number;
62+
pageSize?: number;
63+
}

0 commit comments

Comments
 (0)