Skip to content

Commit 6aced74

Browse files
authored
Merge pull request #1351 from lowcoder-org/feature-pagination
Implemented pagination in some APIs.
2 parents 8af5754 + 0364857 commit 6aced74

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1409
-322
lines changed

client/packages/lowcoder-design/src/components/Search.tsx

+23-12
Original file line numberDiff line numberDiff line change
@@ -62,24 +62,35 @@ interface ISearch {
6262
placeholder: string;
6363
value: string;
6464
onChange: (value: React.ChangeEvent<HTMLInputElement>) => void;
65+
onEnterPress?: (value: string) => void; // Added for capturing Enter key press
6566
disabled?: boolean;
6667
}
6768

6869
export const Search = (props: ISearch & InputProps) => {
69-
const { value, onChange, style, disabled, placeholder, ...others } = props;
70+
const { value, onChange, style, disabled, placeholder, onEnterPress, ...others } = props;
71+
7072
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
7173
onChange && onChange(e);
7274
};
75+
76+
// Handling Enter key press
77+
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
78+
if (e.key === 'Enter' && onEnterPress) {
79+
onEnterPress(value);
80+
}
81+
};
82+
7383
return (
74-
<SearchDiv style={style}>
75-
<SearchInput
76-
disabled={disabled}
77-
placeholder={placeholder}
78-
onChange={handleChange}
79-
value={value}
80-
prefix={<SearchIcon />}
81-
{...others}
82-
/>
83-
</SearchDiv>
84+
<SearchDiv style={style}>
85+
<SearchInput
86+
disabled={disabled}
87+
placeholder={placeholder}
88+
onChange={handleChange}
89+
onKeyDown={handleKeyDown} // Listening for key down events
90+
value={value}
91+
prefix={<SearchIcon />}
92+
{...others}
93+
/>
94+
</SearchDiv>
8495
);
85-
};
96+
};

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
SetAppEditingStatePayload,
1313
UpdateAppPermissionPayload,
1414
} from "redux/reduxActions/applicationActions";
15-
import { ApiResponse, GenericApiResponse } from "./apiResponses";
15+
import {ApiResponse, GenericApiResponse} from "./apiResponses";
1616
import { JSONObject, JSONValue } from "util/jsonTypes";
1717
import {
1818
ApplicationDetail,
@@ -24,6 +24,7 @@ import {
2424
} from "constants/applicationConstants";
2525
import { CommonSettingResponseData } from "./commonSettingApi";
2626
import { ResourceType } from "@lowcoder-ee/constants/queryConstants";
27+
import {fetchAppRequestType, GenericApiPaginationResponse} from "@lowcoder-ee/util/pagination/type";
2728

2829
export interface HomeOrgMeta {
2930
id: string;
@@ -108,6 +109,10 @@ class ApplicationApi extends Api {
108109
return Api.get(ApplicationApi.newURLPrefix + "/list", { ...request, withContainerSize: false });
109110
}
110111

112+
static fetchAllApplicationsPagination(request: fetchAppRequestType): AxiosPromise<GenericApiPaginationResponse<ApplicationMeta[]>> {
113+
return Api.get(ApplicationApi.newURLPrefix + "/list", { ...request, withContainerSize: false, applicationStatus: "RECYCLED" });
114+
}
115+
111116
static fetchAllModules(request: HomeDataPayload): AxiosPromise<ApplicationMeta[]> {
112117
return Api.get(ApplicationApi.newURLPrefix + "/list", {
113118
applicationType: AppTypeEnum.Module,

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

+15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ import { JSONArray } from "util/jsonTypes";
88
import { AuthType, HttpOAuthGrantType } from "pages/datasource/form/httpDatasourceForm";
99
import { Datasource } from "@lowcoder-ee/constants/datasourceConstants";
1010
import { DataSourcePluginMeta } from "lowcoder-sdk/dataSource";
11+
import {
12+
fetchDataSourcePaginationRequestType,
13+
fetchDBRequestType,
14+
GenericApiPaginationResponse
15+
} from "@lowcoder-ee/util/pagination/type";
1116

1217
export interface PreparedStatementConfig {
1318
enableTurnOffPreparedStatement: boolean;
@@ -164,6 +169,11 @@ export class DatasourceApi extends Api {
164169
return Api.get(DatasourceApi.url + `/jsDatasourcePlugins?appId=${appId}`);
165170
}
166171

172+
static fetchJsDatasourcePaginationByApp( request: fetchDataSourcePaginationRequestType ): AxiosPromise<GenericApiPaginationResponse<NodePluginDatasourceInfo[]>> {
173+
const {appId, ...res} = request
174+
return Api.get(DatasourceApi.url + `/jsDatasourcePlugins?appId=${appId}` ,{...res});
175+
}
176+
167177
static fetchDatasourceByApp(appId: string): AxiosPromise<GenericApiResponse<DatasourceInfo[]>> {
168178
return Api.get(DatasourceApi.url + `/listByApp?appId=${appId}`);
169179
}
@@ -172,6 +182,11 @@ export class DatasourceApi extends Api {
172182
return Api.get(DatasourceApi.url + `/listByOrg?orgId=${orgId}`);
173183
}
174184

185+
static fetchDatasourcePaginationByOrg(request: fetchDBRequestType): AxiosPromise<GenericApiPaginationResponse<DatasourceInfo[]>> {
186+
const {orgId, ...res} = request;
187+
return Api.get(DatasourceApi.url + `/listByOrg?orgId=${orgId}`, {...res});
188+
}
189+
175190
static createDatasource(
176191
datasourceConfig: Partial<Datasource>
177192
): AxiosPromise<GenericApiResponse<Datasource>> {

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

+11
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import {
99
UpdateFolderPayload,
1010
} from "../redux/reduxActions/folderActions";
1111
import { ApplicationMeta, FolderMeta } from "../constants/applicationConstants";
12+
import {
13+
fetchFolderRequestType,
14+
GenericApiPaginationResponse
15+
} from "@lowcoder-ee/util/pagination/type";
1216

1317
export class FolderApi extends Api {
1418
static url = "/folders";
@@ -40,4 +44,11 @@ export class FolderApi extends Api {
4044
): AxiosPromise<GenericApiResponse<(ApplicationMeta | FolderMeta)[]>> {
4145
return Api.get(FolderApi.url + `/elements`, { id: request.folderId });
4246
}
47+
48+
static fetchFolderElementsPagination(
49+
request: fetchFolderRequestType
50+
): AxiosPromise<GenericApiPaginationResponse<(ApplicationMeta | FolderMeta)[]>> {
51+
const {id, ...res} = request
52+
return request.id ? Api.get(FolderApi.url + `/elements`,{id: id, ...res}) : Api.get(FolderApi.url + `/elements`, { ...request });
53+
}
4354
}

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

+28
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ import {
1010
UpdateUserOrgRolePayload,
1111
} from "redux/reduxActions/orgActions";
1212
import { ApiResponse, GenericApiResponse } from "./apiResponses";
13+
import {
14+
ApiPaginationResponse,
15+
fetchGroupUserRequestType,
16+
fetchOrgsByEmailRequestType,
17+
fetchOrgUserRequestType,
18+
GenericApiPaginationResponse,
19+
GroupUsersPaginationResponse,
20+
orgGroupRequestType, OrgUsersPaginationResponse
21+
} from "@lowcoder-ee/util/pagination/type";
1322

1423
export interface GroupUsersResponse extends ApiResponse {
1524
data: {
@@ -66,6 +75,10 @@ export class OrgApi extends Api {
6675
return Api.get(OrgApi.fetchGroupURL);
6776
}
6877

78+
static fetchGroupPagination(request: orgGroupRequestType): AxiosPromise<GenericApiPaginationResponse<OrgGroup[]>> {
79+
return Api.get(OrgApi.fetchGroupURL, {...request});
80+
}
81+
6982
static deleteGroup(groupId: string): AxiosPromise<ApiResponse> {
7083
return Api.delete(OrgApi.deleteGroupURL(groupId));
7184
}
@@ -88,10 +101,20 @@ export class OrgApi extends Api {
88101
return Api.get(OrgApi.fetchOrgUsersURL(orgId));
89102
}
90103

104+
static fetchOrgUsersPagination(request:fetchOrgUserRequestType): AxiosPromise<OrgUsersPaginationResponse> {
105+
const {orgId, ...res} = request;
106+
return Api.get(OrgApi.fetchOrgUsersURL(orgId), {...res});
107+
}
108+
91109
static fetchGroupUsers(groupId: string): AxiosPromise<GroupUsersResponse> {
92110
return Api.get(OrgApi.fetchGroupUsersURL(groupId));
93111
}
94112

113+
static fetchGroupUsersPagination(request: fetchGroupUserRequestType): AxiosPromise<GroupUsersPaginationResponse> {
114+
const {groupId, ...res} = request;
115+
return Api.get(OrgApi.fetchGroupUsersURL(groupId), {...res});
116+
}
117+
95118
static deleteGroupUser(request: RemoveGroupUserPayload): AxiosPromise<ApiResponse> {
96119
return Api.delete(OrgApi.deleteGroupUserURL(request.groupId), {
97120
userId: request.userId,
@@ -145,6 +168,11 @@ export class OrgApi extends Api {
145168
static fetchOrgsByEmail(email: string): AxiosPromise<ApiResponse> {
146169
return Api.get(OrgApi.fetchOrgsByEmailURL(email));
147170
}
171+
172+
static fetchOrgsPaginationByEmail(request: fetchOrgsByEmailRequestType): AxiosPromise<ApiPaginationResponse> {
173+
const { email, ...rest } = request;
174+
return Api.get(OrgApi.fetchOrgsByEmailURL(email), {...rest});
175+
}
148176
}
149177

150178
export default OrgApi;

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

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import Api from "./api";
22
import { AxiosPromise } from "axios";
33
import { GenericApiResponse } from "./apiResponses";
44
import { DatasourceType } from "@lowcoder-ee/constants/queryConstants";
5+
import {fetchQueryLibraryPaginationRequestType, GenericApiPaginationResponse} from "@lowcoder-ee/util/pagination/type";
56

67
export interface LibraryQuery {
78
id: string;
@@ -49,6 +50,10 @@ export class QueryLibraryApi extends Api {
4950
return Api.get(QueryLibraryApi.url + `/listByOrg`);
5051
}
5152

53+
static fetchQueryLibraryPaginationByOrg(request: fetchQueryLibraryPaginationRequestType): AxiosPromise<GenericApiPaginationResponse<Array<LibraryQuery>>> {
54+
return Api.get(QueryLibraryApi.url + `/listByOrg`, {...request});
55+
}
56+
5257
static fetchQueryLibraryDropdown(): AxiosPromise<
5358
GenericApiResponse<Array<LibraryQueryDropdownInfo>>
5459
> {

client/packages/lowcoder/src/components/TypographyText.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ const StyledTypographyText = styled(AntdTypographyText)`
4040
`;
4141

4242
export const TypographyText = (props: {
43-
value: string;
44-
editing: boolean;
45-
onChange: (value: string) => void;
43+
value?: string;
44+
editing?: boolean;
45+
onChange?: (value: string) => void;
4646
}) => (
4747
<StyledTypographyText
4848
title={props.value}

client/packages/lowcoder/src/comps/comps/queryLibrary/queryLibraryComp.tsx

+14-8
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ const children = {
4747
const QueryLibraryCompBase = simpleMultiComp(children);
4848

4949
export const QueryLibraryComp = class extends QueryLibraryCompBase {
50-
propertyView(params: { onPublish: () => void; onHistoryShow: () => void }) {
50+
propertyView(params: { onPublish: () => void; onHistoryShow: () => void; setModify: any; modify: boolean }) {
5151
return (
52-
<PropertyView comp={this} onPublish={params.onPublish} onHistoryShow={params.onHistoryShow} />
52+
<PropertyView comp={this} onPublish={params.onPublish} onHistoryShow={params.onHistoryShow} setModify={params.setModify} modify={params.modify} />
5353
);
5454
}
5555

@@ -99,11 +99,13 @@ function getMetaData(
9999
}
100100

101101
const PropertyView = (props: {
102-
comp: QueryLibraryCompType;
103-
onPublish: () => void;
104-
onHistoryShow: () => void;
102+
comp: QueryLibraryCompType,
103+
onPublish: () => void,
104+
onHistoryShow: () => void,
105+
setModify?: any
106+
modify?: boolean
105107
}) => {
106-
const { comp, onPublish, onHistoryShow } = props;
108+
const { comp, onPublish, onHistoryShow, setModify, modify } = props;
107109

108110
const reduxDispatch = useDispatch();
109111

@@ -157,12 +159,16 @@ const PropertyView = (props: {
157159
CustomModal.confirm({
158160
title: trans("queryLibrary.deleteQueryLabel"),
159161
content: trans("queryLibrary.deleteQueryContent"),
160-
onConfirm: () =>
162+
onConfirm: () =>{
161163
reduxDispatch(
162164
deleteQueryLibrary({
163165
queryLibraryId: comp.children.query.children.id.getView(),
164166
})
165-
),
167+
)
168+
setTimeout(() => {
169+
setModify(!modify);
170+
}, 500);
171+
},
166172
confirmBtnType: "delete",
167173
okText: trans("delete"),
168174
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export const BackButton = () =>{
2+
return
3+
<div>123</div>
4+
}

client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,14 @@ function NavLayoutPickModal(props: {
185185
);
186186
}
187187

188-
export const CreateDropdown = (props: { defaultVisible?: boolean; mode: HomeLayoutMode }) => {
189-
const { defaultVisible, mode } = props;
188+
export const CreateDropdown = (props: { defaultVisible?: boolean; mode: HomeLayoutMode; setModify: any; modify: boolean }) => {
189+
const { defaultVisible, mode, setModify, modify} = props;
190190
const [createDropdownVisible, setCreateDropdownVisible] = useState(false);
191191
const [layoutPickerVisible, setLayoutPickerVisible] = useState(false);
192192

193193
const user = useSelector(getUser);
194194

195-
const [handleCreate, isCreating] = useCreateHomeRes();
195+
const [handleCreate, isCreating] = useCreateHomeRes(setModify, modify);
196196

197197
const getCreateMenuItem = (type: HomeResTypeEnum, mode?: HomeLayoutMode): ItemType => {
198198
if (

0 commit comments

Comments
 (0)