Skip to content

Commit ea6d088

Browse files
committed
Implemented pagination in organizations's member.
1 parent fde73e9 commit ea6d088

File tree

5 files changed

+83
-32
lines changed

5 files changed

+83
-32
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import {
1111
} from "redux/reduxActions/orgActions";
1212
import { ApiResponse, GenericApiResponse } from "./apiResponses";
1313
import {
14+
fetchGroupUserRequestType,
1415
fetchOrgUserRequestType,
1516
GenericApiPaginationResponse,
1617
GroupUsersPaginationResponse,
17-
orgGroupRequestType
18+
orgGroupRequestType, OrgUsersPaginationResponse
1819
} from "@lowcoder-ee/util/pagination/type";
1920

2021
export interface GroupUsersResponse extends ApiResponse {
@@ -98,11 +99,16 @@ export class OrgApi extends Api {
9899
return Api.get(OrgApi.fetchOrgUsersURL(orgId));
99100
}
100101

102+
static fetchOrgUsersPagination(request:fetchOrgUserRequestType): AxiosPromise<OrgUsersPaginationResponse> {
103+
const {orgId, ...res} = request;
104+
return Api.get(OrgApi.fetchOrgUsersURL(orgId), {...res});
105+
}
106+
101107
static fetchGroupUsers(groupId: string): AxiosPromise<GroupUsersResponse> {
102108
return Api.get(OrgApi.fetchGroupUsersURL(groupId));
103109
}
104110

105-
static fetchGroupUsersPagination(request: fetchOrgUserRequestType): AxiosPromise<GroupUsersPaginationResponse> {
111+
static fetchGroupUsersPagination(request: fetchGroupUserRequestType): AxiosPromise<GroupUsersPaginationResponse> {
106112
const {groupId, ...res} = request;
107113
return Api.get(OrgApi.fetchGroupUsersURL(groupId), {...res});
108114
}

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

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,13 @@ import { trans, transToNode } from "i18n";
1515
import InviteDialog from "pages/common/inviteDialog";
1616
import ProfileImage from "pages/common/profileImage";
1717
import React, { useEffect, useMemo } from "react";
18-
import { connect, useDispatch, useSelector } from "react-redux";
19-
import { AppState } from "redux/reducers";
18+
import { useDispatch, useSelector } from "react-redux";
2019
import {
2120
deleteOrgUserAction,
2221
fetchOrgUsersAction,
2322
quitOrgAction,
2423
updateUserOrgRoleAction,
2524
} from "redux/reduxActions/orgActions";
26-
import { getUser } from "redux/selectors/usersSelectors";
2725
import styled from "styled-components";
2826
import { formatTimestamp } from "util/dateTimeUtils";
2927
import { currentOrgAdmin } from "util/permissionUtils";
@@ -299,17 +297,4 @@ function OrgUsersPermission(props: UsersPermissionProp) {
299297
);
300298
}
301299

302-
const mapStateToProps = (state: AppState) => {
303-
console.log({
304-
orgUsersFetching: state.ui.org.orgUsersFetching,
305-
orgUsers: state.ui.org.orgUsers,
306-
currentUser: getUser(state),
307-
})
308-
return {
309-
orgUsersFetching: state.ui.org.orgUsersFetching,
310-
orgUsers: state.ui.org.orgUsers,
311-
currentUser: getUser(state),
312-
};
313-
};
314-
315-
export default connect(mapStateToProps)(OrgUsersPermission);
300+
export default OrgUsersPermission;

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

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ import UsersPermission from "./orgUsersPermission";
88
import { getOrgGroups } from "redux/selectors/orgSelectors";
99
import { useParams } from "react-router-dom";
1010
import { AppState } from "redux/reducers";
11-
import {fetchGroupUsrPagination} from "@lowcoder-ee/util/pagination/axios";
12-
import {OrgGroup} from "@lowcoder-ee/constants/orgConstants";
11+
import {fetchGroupUsrPagination, fetchOrgUsrPagination} from "@lowcoder-ee/util/pagination/axios";
1312
import PaginationComp from "@lowcoder-ee/util/pagination/Pagination";
1413

1514
const PermissionContent = styled.div`
@@ -27,15 +26,17 @@ const All_Users = "users";
2726
export default function PermissionSetting() { const user = useSelector(getUser);
2827

2928
const [elements, setElements] = useState<any>({ elements: [], total: 0 });
29+
const [orgMemberElements, setOrgMemberElements] = useState<any>({ elements: [], total: 0 })
3030
const [currentPage, setCurrentPage] = useState(1);
3131
const [pageSize, setPageSize] = useState(10);
3232

3333
const orgId = user.currentOrgId;
3434
const orgGroups = useSelector(getOrgGroups);
35-
const groupUsers = useSelector((state: AppState) => state.ui.org.groupUsers);
3635
const groupUsersFetching = useSelector((state: AppState) => state.ui.org.groupUsersFetching);
3736
const currentUserGroupRole = useSelector((state: AppState) => state.ui.org.currentUserGroupRole);
3837
const currentUser = useSelector(getUser);
38+
const orgUsersFetching = useSelector((state: AppState) => state.ui.org.orgUsersFetching);
39+
3940
const groupIdMap = new Map(orgGroups.map((group) => [group.groupId, group]));
4041
const dispatch = useDispatch();
4142
const selectKey = useParams<{ groupId: string }>().groupId;
@@ -60,8 +61,25 @@ export default function PermissionSetting() { const user = useSelector(getUser)
6061
}
6162
else
6263
console.error("ERROR: fetchFolderElements", result.error)
63-
})
64-
}, [currentPage, pageSize]
64+
}
65+
)
66+
else
67+
fetchOrgUsrPagination(
68+
{
69+
orgId: orgId,
70+
pageNum: currentPage,
71+
pageSize: pageSize,
72+
}
73+
).then(result => {
74+
if (result.success){
75+
setOrgMemberElements({elements: result.data || [], total: result.total || 1})
76+
}
77+
else
78+
console.error("ERROR: fetchFolderElements", result.error)
79+
}
80+
)
81+
},
82+
[currentPage, pageSize]
6583
)
6684

6785
if (!orgId) {
@@ -71,14 +89,23 @@ export default function PermissionSetting() { const user = useSelector(getUser)
7189
return (
7290
<PermissionContent key={selectKey}>
7391
{selectKey === All_Users ? (
74-
<UsersPermission orgId={orgId} />
92+
<>
93+
<UsersPermission
94+
orgId={orgId}
95+
orgUsersFetching={orgUsersFetching}
96+
// orgUsers={!orgMemberElements.elements.members ? [] : orgMemberElements.elements.members}
97+
orgUsers={orgMemberElements.elements}
98+
currentUser={currentUser}
99+
/>
100+
<PaginationComp setCurrentPage={setCurrentPage} setPageSize={setPageSize} currentPage={currentPage} pageSize={pageSize} total={orgMemberElements.total} />
101+
</>
75102
) : (
76103
groupIdMap.has(selectKey) && (
77104
<>
78105
<GroupPermission
79106
group={groupIdMap.get(selectKey)!}
80107
orgId={orgId}
81-
groupUsers={groupUsers}
108+
groupUsers={elements.elements}
82109
groupUsersFetching={groupUsersFetching}
83110
currentUserGroupRole={currentUserGroupRole}
84111
currentUser={currentUser}

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
fetchAppRequestType,
55
fetchDBRequestType,
66
fetchFolderRequestType,
7+
fetchGroupUserRequestType,
78
fetchOrgUserRequestType,
89
orgGroupRequestType
910
} from "@lowcoder-ee/util/pagination/type";
@@ -79,13 +80,30 @@ export const fetchDatasourcePagination = async (request: fetchDBRequestType)=> {
7980
}
8081
}
8182

82-
export const fetchGroupUsrPagination = async (request: fetchOrgUserRequestType)=> {
83+
export const fetchGroupUsrPagination = async (request: fetchGroupUserRequestType)=> {
8384
try {
8485
const response = await OrgApi.fetchGroupUsersPagination(request);
8586
return {
8687
success: true,
87-
data: response.data.data,
88-
total: response.data.total
88+
data: response.data.data.members,
89+
total: response.data.data.total
90+
}
91+
} catch (error: any) {
92+
console.error('Failed to fetch data:', error);
93+
return {
94+
success: false,
95+
error: error
96+
};
97+
}
98+
}
99+
100+
export const fetchOrgUsrPagination = async (request: fetchOrgUserRequestType)=> {
101+
try {
102+
const response = await OrgApi.fetchOrgUsersPagination(request);
103+
return {
104+
success: true,
105+
data: response.data.data.members,
106+
total: response.data.data.total,
89107
}
90108
} catch (error: any) {
91109
console.error('Failed to fetch data:', error);
@@ -94,4 +112,4 @@ export const fetchGroupUsrPagination = async (request: fetchOrgUserRequestType)=
94112
error: error
95113
};
96114
}
97-
}
115+
}

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {GroupUser} from "@lowcoder-ee/constants/orgConstants";
1+
import {GroupUser, OrgUser} from "@lowcoder-ee/constants/orgConstants";
22

33
type ApplicationType = {
44
[key: number]: string; // This allows numeric indexing
@@ -12,11 +12,20 @@ export interface GenericApiPaginationResponse<T> {
1212
data: T;
1313
}
1414
export interface GroupUsersPaginationResponse {
15-
total: number;
1615
success: boolean;
1716
data: {
1817
members: GroupUser[];
1918
visitorRole: string;
19+
total: number;
20+
};
21+
}
22+
23+
export interface OrgUsersPaginationResponse {
24+
success: boolean;
25+
data: {
26+
total: number;
27+
members: OrgUser[];
28+
visitorRole: string;
2029
};
2130
}
2231

@@ -57,6 +66,12 @@ export interface orgGroupRequestType{
5766
pageSize?: number;
5867
}
5968
export interface fetchOrgUserRequestType {
69+
orgId: string;
70+
pageNum?: number;
71+
pageSize?: number;
72+
}
73+
74+
export interface fetchGroupUserRequestType {
6075
groupId: string;
6176
pageNum?: number;
6277
pageSize?: number;

0 commit comments

Comments
 (0)