diff --git a/client/VERSION b/client/VERSION index d5724cd41b..bd4053bfb1 100644 --- a/client/VERSION +++ b/client/VERSION @@ -1 +1 @@ -2.6.2 \ No newline at end of file +2.6.3 \ No newline at end of file diff --git a/client/package.json b/client/package.json index 027d703ddb..e84c1dbeac 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder-frontend", - "version": "2.6.2", + "version": "2.6.3", "type": "module", "private": true, "workspaces": [ diff --git a/client/packages/lowcoder/package.json b/client/packages/lowcoder/package.json index 37d555487c..65146553a3 100644 --- a/client/packages/lowcoder/package.json +++ b/client/packages/lowcoder/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder", - "version": "2.6.2", + "version": "2.6.3", "private": true, "type": "module", "main": "src/index.sdk.ts", @@ -52,7 +52,6 @@ "file-saver": "^2.0.5", "github-markdown-css": "^5.1.0", "hotkeys-js": "^3.8.7", - "html5-device-mockups": "^3.2.1", "immer": "^9.0.7", "less": "^4.1.3", "lodash": "^4.17.21", @@ -68,7 +67,7 @@ "react": "^18.2.0", "react-best-gradient-color-picker": "^3.0.10", "react-colorful": "^5.5.1", - "react-device-mockups": "^0.1.12", + "react-device-mockup": "^1.0.0", "react-documents": "^1.2.1", "react-dom": "^18.2.0", "react-draggable": "^4.4.4", diff --git a/client/packages/lowcoder/src/comps/comps/splitLayout/splitLayout.tsx b/client/packages/lowcoder/src/comps/comps/splitLayout/splitLayout.tsx index d2681940a9..dfac3b4f86 100644 --- a/client/packages/lowcoder/src/comps/comps/splitLayout/splitLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/splitLayout/splitLayout.tsx @@ -36,12 +36,13 @@ import { HorizontalIcon, VerticalIcon, } from "lowcoder-design/src/icons"; -import { BackgroundColor } from "@lowcoder-ee/constants/style"; -const SplitPanelWrapper = styled(Splitter.Panel)<{ }>` +const SplitPanelWrapper = styled(Splitter.Panel)` + overflow: hidden; `; const SplitterWrapper = styled.div<{ $style: SplitLayoutRowStyleType }>` + height: 100%; border-radius: ${(props) => props.$style?.radius || "0px"}; border-width: ${(props) => props.$style?.borderWidth || "0px"}; border-color: ${(props) => props.$style?.border || "transparent"}; @@ -103,7 +104,8 @@ const ColumnContainer = (props: ColumnContainerProps) => { ...props.style, height: props.orientation === "horizontal" ? (props.matchColumnsHeight ? heightCalculator(props.margin) : "auto") - : (props.autoHeight ? "100%" : "auto"), + : (props.autoHeight ? heightCalculator(props.margin) : heightCalculator(props.margin)), + overflow: 'auto', }} /> ); @@ -115,11 +117,18 @@ const SplitLayout = (props: SplitLayoutProps) => { - + {props.columns.map((col, index) => { const id = String(col.id); const childDispatch = wrapDispatch(wrapDispatch(props.dispatch, "containers"), id); const containerProps = props.containers[id]?.children; + return ( { {...(col.minWidth !== undefined ? { min: col.minWidth } : {})} {...(col.maxWidth !== undefined ? { max: col.maxWidth } : {})} {...(col.width !== undefined ? { defaultSize: col.width } : {})} - > + > i.getView() as KeyValue) : []); - const result = Object.values(this.children.queryVariables.children as Record) - .filter(item => item.children.key.unevaledValue !== "" && item.children.value.unevaledValue !== "") - .map(item => ({[item.children.key.unevaledValue]: item.children.value.unevaledValue})) + const result = this.children.queryVariables.toJsonValue() + .filter(item => item.key !== "" && item.value !== "") + .map(item => ({[item.key as string]: item.value})) .reduce((acc, curr) => Object.assign(acc, curr), {}); + + result.$queryName = queryName; if (!queryName) { return () => Promise.resolve(); } diff --git a/client/packages/lowcoder/src/comps/queries/queryComp.tsx b/client/packages/lowcoder/src/comps/queries/queryComp.tsx index 92a33e7b65..066b351fe3 100644 --- a/client/packages/lowcoder/src/comps/queries/queryComp.tsx +++ b/client/packages/lowcoder/src/comps/queries/queryComp.tsx @@ -364,6 +364,7 @@ QueryCompTmp = class extends QueryCompTmp { if (action.type === CompActionTypes.EXECUTE_QUERY) { if (getReduceContext().disableUpdateState) return this; if(!action.args) action.args = this.children.variables.children.variables.toJsonValue().reduce((acc, curr) => Object.assign(acc, {[curr.key as string]:curr.value}), {}); + action.args.$queryName = this.children.name.getView(); return this.executeQuery(action); } @@ -673,8 +674,8 @@ export const QueryComp = withExposingConfigs(QueryCompTmp, [ return undefined; } const newNode = Object.values(input.data) - .filter((kvNode: any) => kvNode.key.value) - .map((kvNode: any) => ({[kvNode.key.value]: kvNode.value.value})) + .filter((kvNode: any) => kvNode.key) + .map((kvNode: any) => ({[kvNode.key]: kvNode.value})) .reduce((prev, obj) => ({...prev, ...obj}), {}); return newNode; }, @@ -773,12 +774,24 @@ class QueryListComp extends QueryListTmpComp implements BottomResListComp { if (!originQuery) { return; } + + const jsonData = originQuery.toJsonValue(); + //Regenerate variable header + jsonData.variables?.variables?.forEach(kv => { + const [prefix, _] = (kv.key as string).split(/(?=\d+$)/); + let i=1, newName = ""; + do { + newName = prefix + (i++); + } while(editorState.checkRename("", newName)); + kv.key = newName; + }) + const newQueryName = this.genNewName(editorState); const id = genQueryId(); this.dispatch( wrapActionExtraInfo( this.pushAction({ - ...originQuery.toJsonValue(), + ...jsonData, id: id, name: newQueryName, isNewCreate: true, @@ -789,7 +802,7 @@ class QueryListComp extends QueryListTmpComp implements BottomResListComp { { type: "add", compName: name, - compType: originQuery.children.compType.getView(), + compType: jsonData.compType, }, ], } diff --git a/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx b/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx index 1203e1cfdf..d319689e7c 100644 --- a/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx +++ b/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx @@ -28,9 +28,10 @@ export function toQueryView(params: FunctionProperty[]) { variables?: any; timeout: InstanceType; }): Promise => { + console.log("toQueryView props", props, params); const { applicationId, isViewMode } = getGlobalSettings(); - const mappedVariables = Object.keys(props.variables).map(key => ({key: `query1.variable.${key}`, value: props.variables[key]})); + const mappedVariables = Object.keys(props.variables).map(key => ({key: `${props.args?.$queryName}.variables.${key}`, value: props.variables[key]})); let request: QueryExecuteRequest = { path: props.applicationPath, params: [ diff --git a/client/packages/lowcoder/src/pages/common/copyModal.tsx b/client/packages/lowcoder/src/pages/common/copyModal.tsx index 5675cf1ea0..cf8bf658dd 100644 --- a/client/packages/lowcoder/src/pages/common/copyModal.tsx +++ b/client/packages/lowcoder/src/pages/common/copyModal.tsx @@ -40,6 +40,8 @@ export function CopyModal(props: CopyModalProps) { okButtonProps={{ disabled: !copyName }} destroyOnClose={true} onCancel={close} + showCancelButton + showOkButton onOk={async () => { let dsl = null; await ApplicationApi.getApplicationDetail({ applicationId: id, type: "editing" }).then( diff --git a/client/packages/lowcoder/src/pages/editor/editorView.tsx b/client/packages/lowcoder/src/pages/editor/editorView.tsx index 50a732c8a3..6adc9b7ec9 100644 --- a/client/packages/lowcoder/src/pages/editor/editorView.tsx +++ b/client/packages/lowcoder/src/pages/editor/editorView.tsx @@ -256,8 +256,31 @@ export const EditorWrapper = styled.div` const DeviceWrapperInner = styled(Flex)` margin: 2% 0 0; - .screen { - overflow: auto; + .device-mockup.portrait { + > div:first-child { + > div:first-child { + > div:first-child { + > div:nth-child(2) { + display: block !important; + overflow: hidden auto !important; + } + } + } + } + } + .device-mockup.landscape { + > div:first-child { + > div:first-child { + > div:first-child { + > div:nth-child(2) { + > div:first-child { + display: block !important; + overflow: hidden auto !important; + } + } + } + } + } } `; @@ -322,13 +345,11 @@ const DeviceWrapper = ({ useEffect(() => { const loadWrapper = async () => { if (deviceType === "tablet") { - await import('html5-device-mockups/dist/device-mockups.min.css'); - const { IPadPro } = await import("react-device-mockups"); - setWrapper(() => IPadPro); + const { IPadMockup } = await import("react-device-mockup"); + setWrapper(() => IPadMockup); } else if (deviceType === "mobile") { - await import('html5-device-mockups/dist/device-mockups.min.css'); - const { IPhone7 } = await import("react-device-mockups"); - setWrapper(() => IPhone7); + const { IPhoneMockup } = await import("react-device-mockup"); + setWrapper(() => IPhoneMockup); } else { setWrapper(() => null); } @@ -339,13 +360,13 @@ const DeviceWrapper = ({ const deviceWidth = useMemo(() => { if (deviceType === 'tablet' && deviceOrientation === 'portrait') { - return 980; + return 850; } if (deviceType === 'tablet' && deviceOrientation === 'landscape') { - return 1280; + return 1100; } if (deviceType === 'mobile' && deviceOrientation === 'portrait') { - return 550; + return 450; } if (deviceType === 'mobile' && deviceOrientation === 'landscape') { return 1200; @@ -357,8 +378,10 @@ const DeviceWrapper = ({ return ( {children} diff --git a/client/packages/lowcoder/src/pages/editor/styledComponents.tsx b/client/packages/lowcoder/src/pages/editor/styledComponents.tsx index d8cb3a4a0e..79ed8022d2 100644 --- a/client/packages/lowcoder/src/pages/editor/styledComponents.tsx +++ b/client/packages/lowcoder/src/pages/editor/styledComponents.tsx @@ -13,6 +13,9 @@ export const DirectoryTreeStyle = styled(DirectoryTree)` height: 26px; display: flex; align-items: center; + &::before { + content: none; + } } .ant-tree-title { padding-right: 6px; @@ -43,6 +46,9 @@ export const DirectoryTreeStyle = styled(DirectoryTree)` .ant-tree-treenode { padding: 0; max-width: 288px; + &::before { + content: none; + } } .ant-tree-indent-unit { width: 16px; diff --git a/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx b/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx index 726308be98..6f4d72f253 100644 --- a/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx +++ b/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx @@ -71,6 +71,7 @@ function AddGroupUserDialog(props: { }} okButtonProps={{ loading: confirmLoading }} showCancelButton={false} + showOkButton width="440px" okText={trans("finish")} onOk={async () => { diff --git a/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx b/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx index 753f1477a7..ddddfe6a81 100644 --- a/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx +++ b/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx @@ -93,6 +93,8 @@ function CreateModal(props: CreateModalProp) { width="602px" title={trans("theme.createTheme")} open={modalVisible} + showOkButton + showCancelButton onOk={handleOk} okButtonProps={{ disabled: !name || !selectId }} onCancel={handleCancel} diff --git a/client/yarn.lock b/client/yarn.lock index ddc5cec80f..1589f0bb74 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -11492,13 +11492,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"html5-device-mockups@npm:^3.2.1": - version: 3.2.1 - resolution: "html5-device-mockups@npm:3.2.1" - checksum: abba0bccc6398313102a9365203092a7c0844879d1b0492168279c516c9462d2a7e016045be565bc183e3405a1ae4929402eaceb1952abdbf16f1580afa68df3 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -14203,7 +14196,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: file-saver: ^2.0.5 github-markdown-css: ^5.1.0 hotkeys-js: ^3.8.7 - html5-device-mockups: ^3.2.1 http-proxy-middleware: ^2.0.6 immer: ^9.0.7 less: ^4.1.3 @@ -14220,7 +14212,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: react: ^18.2.0 react-best-gradient-color-picker: ^3.0.10 react-colorful: ^5.5.1 - react-device-mockups: ^0.1.12 + react-device-mockup: ^1.0.0 react-documents: ^1.2.1 react-dom: ^18.2.0 react-draggable: ^4.4.4 @@ -17774,15 +17766,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"react-device-mockups@npm:^0.1.12": - version: 0.1.12 - resolution: "react-device-mockups@npm:0.1.12" +"react-device-mockup@npm:^1.0.0": + version: 1.0.0 + resolution: "react-device-mockup@npm:1.0.0" peerDependencies: - html5-device-mockups: ^3.2.1 - prop-types: ^15.5.4 - react: ^15.0.0 || ^16.0.0 || ^17.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 738e969802c32810c2ca3ca3bd6c9bacf9b3d7adda0569c4f5c7fb1d68bab860ac7bb5a50aa2677d852143cb30ab8520e556c4dc7f53be154fd16ca08a9ba32c + react: "*" + checksum: 5a653b3e22c9cad567bf607169a710b70dc80c0f5b2b981008c06ff2566535ee809cb0819f0d3663bd2f0e3da6052a1a2b77baea58413e2202c2bab4602aa13e languageName: node linkType: hard diff --git a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/plugin/common/sql/ResultSetParser.java b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/plugin/common/sql/ResultSetParser.java index 3c2fdb3c74..cae18e4328 100644 --- a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/plugin/common/sql/ResultSetParser.java +++ b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/plugin/common/sql/ResultSetParser.java @@ -1,7 +1,9 @@ package org.lowcoder.sdk.plugin.common.sql; +import org.apache.commons.codec.binary.Base64; import org.jetbrains.annotations.Nullable; +import java.sql.Blob; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; @@ -25,6 +27,7 @@ public class ResultSetParser { public static final String DATETIME_COLUMN_TYPE_NAME = "datetime"; public static final String TIMESTAMP_COLUMN_TYPE_NAME = "timestamp"; public static final String YEAR_COLUMN_TYPE_NAME = "year"; + public static final String BLOB_COLUMN_TYPE_NAME = "blob"; public static List> parseRows(ResultSet resultSet) throws SQLException { ResultSetMetaData metaData = resultSet.getMetaData(); @@ -74,6 +77,12 @@ private static Object getValue(ResultSet resultSet, int i, String typeName) thro if (YEAR_COLUMN_TYPE_NAME.equalsIgnoreCase(typeName)) { return resultSet.getDate(i).toLocalDate().getYear(); } + if (BLOB_COLUMN_TYPE_NAME.equalsIgnoreCase(typeName)) { + //Convert binary data into base64 + Blob blob = resultSet.getBlob(i); + byte[] blobBytes = blob.getBytes(1, (int) blob.length()); + return Base64.encodeBase64String(blobBytes); + } return resultSet.getObject(i); } diff --git a/server/api-service/pom.xml b/server/api-service/pom.xml index 87f77a4f98..499e061b2c 100644 --- a/server/api-service/pom.xml +++ b/server/api-service/pom.xml @@ -12,7 +12,7 @@ - 2.6.2 + 2.6.3 17 ${java.version} ${java.version} diff --git a/server/node-service/package.json b/server/node-service/package.json index ee21cab145..65ed2001b9 100644 --- a/server/node-service/package.json +++ b/server/node-service/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder-node-server", - "version": "2.6.2", + "version": "2.6.3", "private": true, "engines": { "node": "^14.18.0 || >=16.0.0" diff --git a/server/node-service/yarn.lock b/server/node-service/yarn.lock index 34fc293c21..f61d4ea81f 100644 --- a/server/node-service/yarn.lock +++ b/server/node-service/yarn.lock @@ -9252,8 +9252,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 11.0.0 - resolution: "node-gyp@npm:11.0.0" + version: 11.1.0 + resolution: "node-gyp@npm:11.1.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 @@ -9267,7 +9267,7 @@ __metadata: which: ^5.0.0 bin: node-gyp: bin/node-gyp.js - checksum: d7d5055ccc88177f721c7cd4f8f9440c29a0eb40e7b79dba89ef882ec957975dfc1dcb8225e79ab32481a02016eb13bbc051a913ea88d482d3cbdf2131156af4 + checksum: b196da39a7a45f302d6e03cfdb579eeecbfffa1ab3796de45652c2c0dcbf46b83fde715b054e4d00aa53da5f33033ac5791e20cbb7cc11267dac4f8975ef276c languageName: node linkType: hard @@ -10481,7 +10481,7 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.2, socks@npm:^2.8.3": +"socks@npm:^2.3.3, socks@npm:^2.6.2": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -10491,6 +10491,16 @@ __metadata: languageName: node linkType: hard +"socks@npm:^2.8.3": + version: 2.8.4 + resolution: "socks@npm:2.8.4" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: cd1edc924475d5dfde534adf66038df7e62c7343e6b8c0113e52dc9bb6a0a10e25b2f136197f379d695f18e8f0f2b7f6e42977bf720ddbee912a851201c396ad + languageName: node + linkType: hard + "sonic-boom@npm:^4.0.1": version: 4.2.0 resolution: "sonic-boom@npm:4.2.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