Skip to content

Commit 36709ac

Browse files
authored
Merge branch 'dev' into json-schema-form-layouts
2 parents fd94adc + 9c8900b commit 36709ac

39 files changed

+226
-125
lines changed

client/packages/lowcoder/src/comps/comps/containerComp/containerView.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { selectCompModifierKeyPressed } from "util/keyUtils";
6262
import { defaultLayout, GridItemComp, GridItemDataType } from "../gridItemComp";
6363
import { ThemeContext } from "comps/utils/themeContext";
6464
import { defaultTheme } from "@lowcoder-ee/constants/themeConstants";
65+
import { ExpandViewContext } from "../tableComp/expansionControl";
6566

6667
const childrenMap = {
6768
layout: valueComp<Layout>({}),
@@ -357,11 +358,12 @@ export const InnerGrid = React.memo((props: ViewPropsWithSelect) => {
357358
|| String(DEFAULT_GRID_COLUMNS);
358359
}, [horizontalGridCells, positionParams.cols]);
359360

361+
const isExpandView = useContext(ExpandViewContext);
360362
const isDroppable =
361-
useContext(IsDroppable) && (_.isNil(props.isDroppable) || props.isDroppable) && !readOnly;
362-
const isDraggable = !readOnly && (_.isNil(props.isDraggable) || props.isDraggable);
363-
const isResizable = !readOnly && (_.isNil(props.isResizable) || props.isResizable);
364-
const isSelectable = !readOnly && (_.isNil(props.isSelectable) || props.isSelectable);
363+
useContext(IsDroppable) && (_.isNil(props.isDroppable) || props.isDroppable) && !readOnly && !isExpandView;
364+
const isDraggable = !readOnly && !isExpandView && (_.isNil(props.isDraggable) || props.isDraggable);
365+
const isResizable = !readOnly && !isExpandView && (_.isNil(props.isResizable) || props.isResizable);
366+
const isSelectable = !readOnly && !isExpandView && (_.isNil(props.isSelectable) || props.isSelectable);
365367
const extraLayout = useMemo(
366368
() =>
367369
getExtraLayout(

client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/ArrayFieldTemplate.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,4 @@ const ArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {
119119
);
120120
};
121121

122-
export default ArrayFieldTemplate;
122+
export default ArrayFieldTemplate;

client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/ObjectFieldTemplate.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => {
2424
registry,
2525
} = props;
2626
const containerWidth = useContainerWidth();
27-
28-
// console.log("ObjectFieldTemplate Props", props);
29-
3027
const uiOptions = getUiOptions(uiSchema);
3128
const TitleFieldTemplate = getTemplate('TitleFieldTemplate', registry, uiOptions);
3229
const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, uiOptions);
@@ -279,4 +276,4 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => {
279276
);
280277
};
281278

282-
export default ObjectFieldTemplate;
279+
export default ObjectFieldTemplate;

client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import { useContext, useEffect, useRef, useState, createContext } from "react";
2626
import { EditorContext } from "comps/editorState";
2727
import ObjectFieldTemplate from './ObjectFieldTemplate';
2828
import ArrayFieldTemplate from './ArrayFieldTemplate';
29-
// import { LayoutFieldTemplate } from "./LayoutFieldTemplate";
3029
import { Select } from 'antd';
3130
import Title from 'antd/es/typography/Title';
3231

@@ -90,8 +89,6 @@ const Container = styled.div<{
9089
.help-block {
9190
margin-bottom: 0px;
9291
}
93-
94-
9592
`;
9693

9794
function convertData(schema?: JSONSchema7, data?: any) {
@@ -324,6 +321,7 @@ let FormBasicComp = (function () {
324321
</ScrollBar>
325322
</Container>
326323
</ContainerWidthContext.Provider>
324+
327325
);
328326
})
329327
.setPropertyViewFn((children) => {
@@ -482,6 +480,5 @@ FormTmpComp = withMethodExposing(FormTmpComp, [
482480
}),
483481
},
484482
]);
485-
486483
export const JsonSchemaFormComp = FormTmpComp;
487484
export { FormTmpComp, useContainerWidth };

client/packages/lowcoder/src/comps/comps/tableComp/expansionControl.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ import { BackgroundColorContext } from "comps/utils/backgroundColorContext";
1111
import { trans } from "i18n";
1212
import _ from "lodash";
1313
import { ConstructorToView, wrapChildAction } from "lowcoder-core";
14-
import { useContext } from "react";
14+
import { createContext, useContext } from "react";
1515
import { tryToNumber } from "util/convertUtils";
1616
import { SimpleContainerComp } from "../containerBase/simpleContainerComp";
1717
import { OB_ROW_ORI_INDEX, RecordType } from "./tableUtils";
1818
import { NameGenerator } from "comps/utils";
1919
import { JSONValue } from "util/jsonTypes";
2020

2121
const ContextSlotControl = withSelectedMultiContext(SlotControl);
22+
export const ExpandViewContext = createContext(false);
2223

2324
const ContainerView = (props: ContainerBaseProps) => {
2425
return <InnerGrid {...props} emptyRows={15} autoHeight />;
@@ -85,7 +86,11 @@ export class ExpansionControl extends ExpansionControlTmp {
8586
String(record[OB_ROW_ORI_INDEX])
8687
);
8788
const containerProps = slotControl.children.container.getView();
88-
return <ExpandView key={record[OB_ROW_ORI_INDEX]} containerProps={containerProps} />;
89+
return (
90+
<ExpandViewContext.Provider value={true}>
91+
<ExpandView key={record[OB_ROW_ORI_INDEX]} containerProps={containerProps} />
92+
</ExpandViewContext.Provider>
93+
);
8994
},
9095
},
9196
expandModalView: selectedContainer.getView(),

client/packages/lowcoder/src/comps/generators/withMultiContext.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,14 @@ export function withMultiContext<TCtor extends MultiCompConstructor>(VariantComp
124124
const mapComps = this.getMap();
125125
if (mapComps.hasOwnProperty(key) && !paramsEqual(params, mapComps[key].getParams())) {
126126
// refresh the item, since params changed
127-
this.dispatch(deferAction(wrapChildAction(MAP_KEY, MapCtor.batchDeleteAction([key]))));
127+
// this.dispatch(deferAction(wrapChildAction(MAP_KEY, MapCtor.batchDeleteAction([key]))));
128+
this.dispatch(wrapChildAction(MAP_KEY, MapCtor.batchDeleteAction([key])));
129+
comp = this.getOriginalComp();
130+
} else {
131+
comp = this.getOriginalComp()
132+
.setParams(params)
133+
.changeDispatch(wrapDispatch(wrapDispatch(this.dispatch, MAP_KEY), key));
128134
}
129-
comp = this.getOriginalComp()
130-
.setParams(params)
131-
.changeDispatch(wrapDispatch(wrapDispatch(this.dispatch, MAP_KEY), key));
132135
}
133136
return comp;
134137
}

client/packages/lowcoder/src/comps/utils/supademoDisplay.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const SupaDemoDisplay = ({ url, modalWidth = '75%', modalTop = '6%', showText =
3535
style={{ top: modalTop }}
3636
okButtonProps={{ style: { display: 'none' } }}
3737
cancelButtonProps={{ style: { display: 'none' } }}
38-
bodyStyle={{ padding: 0 }}
38+
styles={{ body: {padding: 0} }}
3939
>
4040
<div style={{ position: 'relative', boxSizing: 'content-box', maxHeight: '80vh', width: '100%', aspectRatio: '1.7712177121771218', padding: '40px 0' }}>
4141
<iframe

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/group/service/GroupMemberService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
public interface GroupMemberService {
1414

15-
Mono<List<GroupMember>> getGroupMembers(String groupId, int page, int count);
15+
Mono<List<GroupMember>> getGroupMembers(String groupId);
1616

1717
Mono<Boolean> addMember(String orgId, String groupId, String userId, MemberRole memberRole);
1818

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/group/service/GroupMemberServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class GroupMemberServiceImpl implements GroupMemberService {
2929
private final MongoUpsertHelper mongoUpsertHelper;
3030

3131
@Override
32-
public Mono<List<GroupMember>> getGroupMembers(String groupId, int page, int count) {
32+
public Mono<List<GroupMember>> getGroupMembers(String groupId) {
3333
return biRelationService.getBySourceId(GROUP_MEMBER, groupId)
3434
.map(GroupMember::from)
3535
.collectList();

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/solution/SuggestAppAdminSolutionServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ private Mono<List<String>> getSuggestAdminIds(int limit, List<ResourcePermission
6363

6464
Set<String> adminUserIdSet = newHashSet(adminUserIds);
6565
return Flux.fromIterable(adminGroupIds)
66-
.flatMap(groupId -> groupMemberService.getGroupMembers(groupId, 1, 100))
66+
.flatMap(groupMemberService::getGroupMembers)
6767
.flatMapIterable(list -> list)
6868
.map(GroupMember::getUserId)
6969
.filter(it -> !adminUserIdSet.contains(it))

server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/util/FluxHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package org.lowcoder.infra.util;
22

3+
import org.jetbrains.annotations.NotNull;
34
import org.springframework.data.domain.Pageable;
5+
import org.springframework.web.bind.annotation.RequestParam;
46
import reactor.core.publisher.Flux;
7+
import reactor.core.publisher.Mono;
58

69
public class FluxHelper {
710

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ private Mono<Void> autoGrantPermissionsByFolderDefault(String applicationId, @Nu
170170

171171
@Override
172172
public Flux<ApplicationInfoView> getRecycledApplications(String name) {
173-
return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(null, ApplicationStatus.RECYCLED, false, name, 0, 0);
173+
return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(null, ApplicationStatus.RECYCLED, false, name);
174174
}
175175

176176
private Mono<Void> checkCurrentUserApplicationPermission(String applicationId, ResourceAction action) {

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.lowcoder.api.application.view.ApplicationView;
1818
import org.lowcoder.api.application.view.MarketplaceApplicationInfoView;
1919
// should we not have a AgencyApplicationInfoView
20+
import org.lowcoder.api.framework.view.PageResponseView;
2021
import org.lowcoder.api.framework.view.ResponseView;
2122
import org.lowcoder.api.home.SessionUserService;
2223
import org.lowcoder.api.home.UserHomeApiService;
@@ -164,9 +165,12 @@ public Mono<ResponseView<List<ApplicationInfoView>>> getApplications(@RequestPar
164165
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
165166
@RequestParam(required = false, defaultValue = "0") Integer pageSize) {
166167
ApplicationType applicationTypeEnum = applicationType == null ? null : ApplicationType.fromValue(applicationType);
167-
return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationTypeEnum, applicationStatus, withContainerSize, name, pageNum, pageSize)
168-
.collectList()
169-
.map(ResponseView::success);
168+
var flux = userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationTypeEnum, applicationStatus, withContainerSize, name).cache();
169+
Mono<Long> countMono = flux.count();
170+
var flux1 = flux.skip((long) pageNum * pageSize);
171+
if(pageSize > 0) flux1 = flux1.take(pageSize);
172+
return flux1.collectList().zipWith(countMono)
173+
.map(tuple -> PageResponseView.success(tuple.getT1(), pageNum, pageSize, Math.toIntExact(tuple.getT2())));
170174
}
171175

172176
@Override

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bizthreshold/AbstractBizThresholdChecker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ private boolean orgAppCountBelowThreshold(String orgId, long orgAppCount) {
9898

9999
public Mono<Void> checkMaxDeveloperCount(String orgId, String developGroupId, String userId) {
100100
return orgMemberService.getAllOrgAdmins(orgId)
101-
.zipWith(groupMemberService.getGroupMembers(developGroupId, 1, 100))
101+
.zipWith(groupMemberService.getGroupMembers(developGroupId))
102102
.zipWith(getMaxDeveloperCount(), TupleUtils::merge)
103103
.flatMap(tuple -> {
104104
List<OrgMember> t1 = tuple.getT1();

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleController.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.lowcoder.api.bundle;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.jetbrains.annotations.NotNull;
45
import org.lowcoder.api.bundle.view.BundleInfoView;
56
import org.lowcoder.api.bundle.view.BundlePermissionView;
67
import org.lowcoder.api.bundle.view.MarketplaceBundleInfoView;
8+
import org.lowcoder.api.framework.view.PageResponseView;
79
import org.lowcoder.api.framework.view.ResponseView;
810
import org.lowcoder.api.home.UserHomeApiService;
911
import org.lowcoder.api.util.BusinessEventPublisher;
@@ -18,10 +20,12 @@
1820
import org.springframework.web.bind.annotation.RequestBody;
1921
import org.springframework.web.bind.annotation.RequestParam;
2022
import org.springframework.web.bind.annotation.RestController;
23+
import reactor.core.publisher.Flux;
2124
import reactor.core.publisher.Mono;
2225

2326
import java.util.List;
2427

28+
import static org.lowcoder.api.util.Pagination.fluxToPageResponseView;
2529
import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
2630
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
2731

@@ -100,12 +104,13 @@ public Mono<ResponseView<List<BundleInfoView>>> getRecycledBundles() {
100104
* get all files under bundle
101105
*/
102106
@Override
103-
public Mono<ResponseView<List<?>>> getElements(@PathVariable String bundleId,
104-
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType) {
107+
public Mono<PageResponseView<?>> getElements(@PathVariable String bundleId,
108+
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType,
109+
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
110+
@RequestParam(required = false, defaultValue = "0") Integer pageSize) {
105111
String objectId = gidService.convertBundleIdToObjectId(bundleId);
106-
return bundleApiService.getElements(objectId, applicationType)
107-
.collectList()
108-
.map(ResponseView::success);
112+
var flux = bundleApiService.getElements(objectId, applicationType).cache();
113+
return fluxToPageResponseView(pageNum, pageSize, flux);
109114
}
110115

111116
@Override

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleEndpoints.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.lowcoder.api.bundle.view.BundleInfoView;
88
import org.lowcoder.api.bundle.view.BundlePermissionView;
99
import org.lowcoder.api.bundle.view.MarketplaceBundleInfoView;
10+
import org.lowcoder.api.framework.view.PageResponseView;
1011
import org.lowcoder.api.framework.view.ResponseView;
1112
import org.lowcoder.domain.application.model.ApplicationType;
1213
import org.lowcoder.domain.bundle.model.Bundle;
@@ -120,8 +121,10 @@ public interface BundleEndpoints
120121
description = "Retrieve the contents of an Bundle Bundle within Lowcoder, including Bundles."
121122
)
122123
@GetMapping("/{bundleId}/elements")
123-
public Mono<ResponseView<List<?>>> getElements(@PathVariable String bundleId,
124-
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType);
124+
public Mono<PageResponseView<?>> getElements(@PathVariable String bundleId,
125+
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType,
126+
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
127+
@RequestParam(required = false, defaultValue = "0") Integer pageSize);
125128

126129
@Operation(
127130
tags = TAG_BUNDLE_MANAGEMENT,

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceController.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.apache.commons.collections4.CollectionUtils;
88
import org.apache.commons.lang3.BooleanUtils;
99
import org.apache.commons.lang3.StringUtils;
10+
import org.lowcoder.api.framework.view.PageResponseView;
1011
import org.lowcoder.api.framework.view.ResponseView;
1112
import org.lowcoder.api.permission.view.CommonPermissionView;
1213
import org.lowcoder.api.util.BusinessEventPublisher;
@@ -29,6 +30,7 @@
2930
import java.util.List;
3031
import java.util.Locale;
3132

33+
import static org.lowcoder.api.util.Pagination.fluxToPageResponseView;
3234
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.*;
3335
import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
3436
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
@@ -116,11 +118,11 @@ public Mono<ResponseView<DatasourceStructure>> getStructure(@PathVariable String
116118
* name, type... and the plugin definition of it, excluding the detail configs such as the connection uri, password...
117119
*/
118120
@Override
119-
public Mono<ResponseView<List<Datasource>>> listJsDatasourcePlugins(@RequestParam("appId") String applicationId, @RequestParam(required = false) String name, @RequestParam(required = false) String type) {
121+
public Mono<PageResponseView<?>> listJsDatasourcePlugins(@RequestParam("appId") String applicationId, @RequestParam(required = false) String name, @RequestParam(required = false) String type,
122+
@RequestParam(required = false, defaultValue = "0") int pageNum,
123+
@RequestParam(required = false, defaultValue = "0") int pageSize) {
120124
String objectId = gidService.convertApplicationIdToObjectId(applicationId);
121-
return datasourceApiService.listJsDatasourcePlugins(objectId, name, type)
122-
.collectList()
123-
.map(ResponseView::success);
125+
return fluxToPageResponseView(pageNum, pageSize, datasourceApiService.listJsDatasourcePlugins(objectId, name, type));
124126
}
125127

126128
/**
@@ -139,26 +141,26 @@ public Mono<ResponseView<List<Object>>> getPluginDynamicConfig(
139141

140142
@SneakyThrows
141143
@Override
142-
public Mono<ResponseView<List<DatasourceView>>> listOrgDataSources(@RequestParam(name = "orgId") String orgId, @RequestParam(required = false) String name, @RequestParam(required = false) String type) {
144+
public Mono<PageResponseView<?>> listOrgDataSources(@RequestParam(name = "orgId") String orgId, @RequestParam(required = false) String name, @RequestParam(required = false) String type,
145+
@RequestParam(required = false, defaultValue = "0") int pageNum,
146+
@RequestParam(required = false, defaultValue = "0") int pageSize) {
143147
if (StringUtils.isBlank(orgId)) {
144148
return ofError(BizError.INVALID_PARAMETER, "ORG_ID_EMPTY");
145149
}
146150
String objectId = gidService.convertOrganizationIdToObjectId(orgId);
147-
return datasourceApiService.listOrgDataSources(objectId, name, type)
148-
.collectList()
149-
.map(ResponseView::success);
151+
return fluxToPageResponseView(pageNum, pageSize, datasourceApiService.listOrgDataSources(objectId, name, type));
150152
}
151153

152154
@Override
153-
public Mono<ResponseView<List<DatasourceView>>> listAppDataSources(@RequestParam(name = "appId") String applicationId, @RequestParam(required = false) String name, @RequestParam(required = false) String type) {
155+
public Mono<PageResponseView<?>> listAppDataSources(@RequestParam(name = "appId") String applicationId, @RequestParam(required = false) String name, @RequestParam(required = false) String type,
156+
@RequestParam(required = false, defaultValue = "0") int pageNum,
157+
@RequestParam(required = false, defaultValue = "0") int pageSize) {
154158
if (StringUtils.isBlank(applicationId)) {
155159
return ofError(BizError.INVALID_PARAMETER, "INVALID_APP_ID");
156160
}
157161
String objectId = gidService.convertApplicationIdToObjectId(applicationId);
158162

159-
return datasourceApiService.listAppDataSources(objectId, name, type)
160-
.collectList()
161-
.map(ResponseView::success);
163+
return fluxToPageResponseView(pageNum, pageSize, datasourceApiService.listAppDataSources(objectId, name, type));
162164
}
163165

164166
@Override

0 commit comments

Comments
 (0)