From 98bc477d80dbf7993f89befdb42762d78a55fb1b Mon Sep 17 00:00:00 2001 From: liujuping Date: Thu, 23 Jun 2022 14:56:51 +0800 Subject: [PATCH 1/4] fix: fix dataSource needs to be compatible due to empty schema --- packages/renderer-core/src/renderer/base.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx index aee020344..24425d5ef 100644 --- a/packages/renderer-core/src/renderer/base.tsx +++ b/packages/renderer-core/src/renderer/base.tsx @@ -260,7 +260,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { this.__dataHelper = { updateConfig: (updateDataSource: any) => { const { dataSourceMap, reloadDataSource } = createDataSourceEngine( - updateDataSource, + updateDataSource ?? {}, this, props.__appHelper.requestHandlersMap ? { requestHandlersMap: props.__appHelper.requestHandlersMap } : undefined, ); From 85d1f0fd90d210630d8694b35e3e0571e4c62a83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=8F=8A=E8=90=8D=28=E7=B5=AE=E9=BB=8E=29?= Date: Thu, 23 Jun 2022 15:40:55 +0800 Subject: [PATCH 2/4] docs: added instructions for awesome-lowcode-engine to README (#712) --- packages/engine/README-zh_CN.md | 2 ++ packages/engine/README.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/engine/README-zh_CN.md b/packages/engine/README-zh_CN.md index cdd5ca479..91e90ad52 100644 --- a/packages/engine/README-zh_CN.md +++ b/packages/engine/README-zh_CN.md @@ -125,6 +125,8 @@ https://cdn.jsdelivr.net/npm/@alilc/lowcode-react-simulator-renderer@1.0.0/dist/ - [用户文档](https://lowcode-engine.cn/docV2) - [API](https://lowcode-engine.cn/docV2/vlmeme) +[awesome-lowcode-engine](https://github.com/lowcode-workspace/awesome-lowcode-engine) 中包含了一系列围绕引擎建设的工具、解决方案等,如果你有类似的解决方案或者工具,欢迎提 PR 到该仓库,让更多人了解到 + ## 💻 本地调试 ```bash diff --git a/packages/engine/README.md b/packages/engine/README.md index 51eb9f550..f1d93ac31 100644 --- a/packages/engine/README.md +++ b/packages/engine/README.md @@ -125,6 +125,8 @@ Pass the files under packages/engine/dist and packages/(react|rax)-simulator-ren - [User Documentation](http://lowcode-engine.cn/docV2) - [API](http://lowcode-engine.cn/docV2/vlmeme) +The [awesome-lowcode-engine](https://github.com/lowcode-workspace/awesome-lowcode-engine) page links to many of the tools in the lowcode-engine, If you have an ecosystem or tools built around the engine, PR is welcome to this repository. + ## 💻 Local debugging ```bash From b216aa5d2bdd67f724222baca60331d169a74393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=8F=8A=E8=90=8D=28=E7=B5=AE=E9=BB=8E=29?= Date: Thu, 23 Jun 2022 15:49:52 +0800 Subject: [PATCH 3/4] docs: added instructions for awesome-lowcode-engine to README --- packages/engine/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/engine/README.md b/packages/engine/README.md index f1d93ac31..c4cc5f8ae 100644 --- a/packages/engine/README.md +++ b/packages/engine/README.md @@ -125,7 +125,7 @@ Pass the files under packages/engine/dist and packages/(react|rax)-simulator-ren - [User Documentation](http://lowcode-engine.cn/docV2) - [API](http://lowcode-engine.cn/docV2/vlmeme) -The [awesome-lowcode-engine](https://github.com/lowcode-workspace/awesome-lowcode-engine) page links to many of the tools in the lowcode-engine, If you have an ecosystem or tools built around the engine, PR is welcome to this repository. +This [awesome-lowcode-engine](https://github.com/lowcode-workspace/awesome-lowcode-engine) page links to a repository which records all of the tools\materials\solutions that use or built for the lowcode-engine, PR is welcomed. ## 💻 Local debugging From 7e5a919f9352397f11741fd911495996469c0256 Mon Sep 17 00:00:00 2001 From: liujuping Date: Fri, 24 Jun 2022 15:10:28 +0800 Subject: [PATCH 4/4] fix: fixed the issue that thisRequiredInJSE did not take effect in some scenarios --- packages/renderer-core/src/hoc/leaf.tsx | 5 +++-- packages/renderer-core/src/renderer/base.tsx | 8 ++++---- packages/renderer-core/src/renderer/page.tsx | 5 ++--- packages/renderer-core/src/utils/common.ts | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/renderer-core/src/hoc/leaf.tsx b/packages/renderer-core/src/hoc/leaf.tsx index e6981e729..e626ab404 100644 --- a/packages/renderer-core/src/hoc/leaf.tsx +++ b/packages/renderer-core/src/hoc/leaf.tsx @@ -141,6 +141,7 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { __debug, __getComponentProps: getProps, __getSchemaChildrenVirtualDom: getChildren, + __parseData, } = baseRenderer; const { engine } = baseRenderer.context; const host = baseRenderer.props?.__host; @@ -225,7 +226,7 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { nodeChildren: null, childrenInState: false, visible: !hidden, - condition: parseData(condition, scope), + condition: __parseData(condition, scope), nodeCacheProps: {}, nodeProps: {}, }; @@ -395,7 +396,7 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { if (key === '___condition___') { const { condition = true } = this.leaf?.export(TransformStage.Render) || {}; - const conditionValue = parseData(condition, scope); + const conditionValue = __parseData(condition, scope); __debug(`key is ___condition___, change condition value to [${condition}]`); // 条件表达式改变 this.setState({ diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx index 24425d5ef..3a4bbd24c 100644 --- a/packages/renderer-core/src/renderer/base.tsx +++ b/packages/renderer-core/src/renderer/base.tsx @@ -245,8 +245,8 @@ export default function baseRendererFactory(): IBaseRenderComponent { }; __parseData = (data: any, ctx?: Record) => { - const { __ctx } = this.props; - return parseData(data, ctx || __ctx || this); + const { __ctx, thisRequiredInJSE } = this.props; + return parseData(data, ctx || __ctx || this, { thisRequiredInJSE }); }; __initDataSource = (props = this.props) => { @@ -479,7 +479,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { const displayInHook = engine?.props?.designMode === 'design'; if (schema.loop != null) { - const loop = parseData(schema.loop, scope); + const loop = this.__parseData(schema.loop, scope); const useLoop = isUseLoop(loop, this._designModeIsDesign); if (useLoop) { return this.__createLoopVirtualDom( @@ -493,7 +493,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { ); } } - const condition = schema.condition == null ? true : parseData(schema.condition, scope); + const condition = schema.condition == null ? true : this.__parseData(schema.condition, scope); if (!condition && !displayInHook) return null; let scopeKey = ''; diff --git a/packages/renderer-core/src/renderer/page.tsx b/packages/renderer-core/src/renderer/page.tsx index 8446d332d..380e0fb36 100644 --- a/packages/renderer-core/src/renderer/page.tsx +++ b/packages/renderer-core/src/renderer/page.tsx @@ -1,5 +1,4 @@ import baseRendererFactory from './base'; -import { parseData } from '../utils'; import { IBaseRendererProps, IBaseRenderComponent } from '../types'; export default function pageRendererFactory(): IBaseRenderComponent { @@ -21,8 +20,8 @@ export default function pageRendererFactory(): IBaseRenderComponent { async componentDidUpdate(prevProps: IBaseRendererProps, _prevState: {}, snapshot: unknown) { const { __ctx } = this.props; - const prevState = parseData(prevProps.__schema.state, __ctx); - const newState = parseData(this.props.__schema.state, __ctx); + const prevState = this.__parseData(prevProps.__schema.state, __ctx); + const newState = this.__parseData(this.props.__schema.state, __ctx); // 当编排的时候修改schema.state值,需要将最新schema.state值setState if (JSON.stringify(newState) != JSON.stringify(prevState)) { this.setState(newState); diff --git a/packages/renderer-core/src/utils/common.ts b/packages/renderer-core/src/utils/common.ts index 8db913f3d..cf46cf38d 100644 --- a/packages/renderer-core/src/utils/common.ts +++ b/packages/renderer-core/src/utils/common.ts @@ -330,15 +330,15 @@ export function forEach(targetObj: any, fn: any, context?: any) { Object.keys(targetObj).forEach((key) => fn.call(context, targetObj[key], key)); } -export function parseData(schema: unknown, self: any): any { +export function parseData(schema: unknown, self: any, options: any): any { if (isJSExpression(schema)) { - return parseExpression(schema, self); + return parseExpression(schema, self, options.thisRequiredInJSE); } else if (isI18nData(schema)) { return parseI18n(schema, self); } else if (typeof schema === 'string') { return schema.trim(); } else if (Array.isArray(schema)) { - return schema.map((item) => parseData(item, self)); + return schema.map((item) => parseData(item, self, options)); } else if (typeof schema === 'function') { return schema.bind(self); } else if (typeof schema === 'object') { @@ -351,7 +351,7 @@ export function parseData(schema: unknown, self: any): any { if (key.startsWith('__')) { return; } - res[key] = parseData(val, self); + res[key] = parseData(val, self, options); }); return res; }