From 6bb64f3aa1fa41d1284565addaf3976ffded1abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LeoYuan=20=E8=A2=81=E5=8A=9B=E7=9A=93?= Date: Tue, 28 Jun 2022 14:50:14 +0800 Subject: [PATCH 1/9] chore: remove unused deps for renderer-core --- packages/renderer-core/package.json | 2 -- packages/renderer-core/src/utils/common.ts | 9 +-------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/renderer-core/package.json b/packages/renderer-core/package.json index 6fdb79de9..6cfa1d924 100644 --- a/packages/renderer-core/package.json +++ b/packages/renderer-core/package.json @@ -27,7 +27,6 @@ "moment": "^2.24.0", "prop-types": "^15.7.2", "react-is": "^16.10.1", - "serialize-javascript": "^1.7.0", "socket.io-client": "^2.2.0", "whatwg-fetch": "^3.0.0", "zen-logger": "^1.1.4" @@ -45,7 +44,6 @@ "@types/node": "^13.7.1", "@types/prop-types": "^15.7.3", "@types/react-test-renderer": "^17.0.1", - "@types/serialize-javascript": "^5.0.0", "babel-jest": "^26.5.2", "build-plugin-component": "^0.2.11", "jest": "^26.6.3", diff --git a/packages/renderer-core/src/utils/common.ts b/packages/renderer-core/src/utils/common.ts index 0150095b3..d60558971 100644 --- a/packages/renderer-core/src/utils/common.ts +++ b/packages/renderer-core/src/utils/common.ts @@ -5,22 +5,15 @@ import { isI18nData, RootSchema, NodeSchema, isJSExpression, JSSlot } from '@ali // moment对象配置 import _moment from 'moment'; import 'moment/locale/zh-cn'; -import pkg from '../../package.json'; - import { isEmpty } from 'lodash'; - -import _serialize from 'serialize-javascript'; -import * as _jsonuri from 'jsonuri'; - import IntlMessageFormat from 'intl-messageformat'; +import pkg from '../../package.json'; export const moment = _moment; moment.locale('zh-cn'); (window as any).sdkVersion = pkg.version; export { pick, isEqualWith as deepEqual, cloneDeep as clone, isEmpty, throttle, debounce } from 'lodash'; -export const jsonuri = _jsonuri; -export const serialize = _serialize; const ReactIs = require('react-is'); const ReactPropTypesSecret = require('prop-types/lib/ReactPropTypesSecret'); From 900b2394323e85f0dce5df83dfc773f96da23e24 Mon Sep 17 00:00:00 2001 From: zyy7259 Date: Tue, 28 Jun 2022 14:34:16 +0800 Subject: [PATCH 2/9] feat: pass e to customizeIgnoreSelectors --- packages/designer/src/builtin-simulator/host.ts | 2 +- packages/editor-core/src/config.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts index e40566f57..4bf049f5b 100644 --- a/packages/designer/src/builtin-simulator/host.ts +++ b/packages/designer/src/builtin-simulator/host.ts @@ -618,7 +618,7 @@ export class BuiltinSimulatorHost implements ISimulatorHost string[]', + description: '定制画布中点击被忽略的 selectors, eg. (defaultIgnoreSelectors: string[], e: MouseEvent) => string[]', }, disableDefaultSettingPanel: { type: 'boolean', @@ -192,7 +192,7 @@ export interface EngineOptions { /** * 定制画布中点击被忽略的 selectors,默认值:undefined */ - customizeIgnoreSelectors?: (defaultIgnoreSelectors: string[]) => string[]; + customizeIgnoreSelectors?: (defaultIgnoreSelectors: string[], e: MouseEvent) => string[]; /** * 禁止默认的设置面板,默认值:false */ From 5dd462544fbbbccfa97165f2bcfeed8629fab2a3 Mon Sep 17 00:00:00 2001 From: liujuping Date: Wed, 29 Jun 2022 16:17:25 +0800 Subject: [PATCH 3/9] fix: fix low-code component rendering problems: 1. thisRequiredInJSE does not take effect 2. jsx components cannot obtain source components --- .../rax-simulator-renderer/src/renderer.ts | 3 ++- .../react-simulator-renderer/src/renderer.ts | 3 ++- packages/renderer-core/src/renderer/base.tsx | 10 +++++++++- packages/utils/src/build-components.ts | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/rax-simulator-renderer/src/renderer.ts b/packages/rax-simulator-renderer/src/renderer.ts index b2dcbaec0..0e42785e7 100644 --- a/packages/rax-simulator-renderer/src/renderer.ts +++ b/packages/rax-simulator-renderer/src/renderer.ts @@ -523,10 +523,11 @@ export class SimulatorRendererContainer implements BuiltinSimulatorRenderer { ...extraProps, schema: _schema, components, - designMode: renderer.designMode, + designMode: '', device: renderer.device, appHelper: renderer.context, rendererName: 'LowCodeRenderer', + thisRequiredInJSE: host.thisRequiredInJSE, customCreateElement: (Comp: any, props: any, children: any) => { const componentMeta = host.currentDocument?.getComponentMeta(Comp.displayName); if (componentMeta?.isModal) { diff --git a/packages/react-simulator-renderer/src/renderer.ts b/packages/react-simulator-renderer/src/renderer.ts index 6c246e094..5605ba479 100644 --- a/packages/react-simulator-renderer/src/renderer.ts +++ b/packages/react-simulator-renderer/src/renderer.ts @@ -450,10 +450,11 @@ export class SimulatorRendererContainer implements BuiltinSimulatorRenderer { // 使用 _schema 为了使低代码组件在页面设计中使用变量,同 react 组件使用效果一致 schema: _schema, components: renderer.components, - designMode: renderer.designMode, + designMode: '', device: renderer.device, appHelper: renderer.context, rendererName: 'LowCodeRenderer', + thisRequiredInJSE: host.thisRequiredInJSE, customCreateElement: (Comp: any, props: any, children: any) => { const componentMeta = host.currentDocument?.getComponentMeta(Comp.displayName); if (componentMeta?.isModal) { diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx index 3a4bbd24c..28c44964a 100644 --- a/packages/renderer-core/src/renderer/base.tsx +++ b/packages/renderer-core/src/renderer/base.tsx @@ -116,7 +116,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { if (func) { if (isJSExpression(func) || isJSFunction(func)) { const fn = props.thisRequiredInJSE ? parseThisRequiredExpression(func, this) : parseExpression(func, this); - return fn(props, state); + return fn?.(props, state); } if (typeof func === 'function') { @@ -210,6 +210,14 @@ export default function baseRendererFactory(): IBaseRenderComponent { } }; + _getComponentView = (componentName: string) => { + const { __components } = this.props; + if (!__components) { + return; + } + return __components[componentName]; + }; + __bindCustomMethods = (props = this.props) => { const { __schema } = props; const customMethodsList = Object.keys(__schema.methods || {}) || []; diff --git a/packages/utils/src/build-components.ts b/packages/utils/src/build-components.ts index 78c5b6c2f..c18952af1 100644 --- a/packages/utils/src/build-components.ts +++ b/packages/utils/src/build-components.ts @@ -3,6 +3,7 @@ import { NpmInfo, ComponentSchema } from '@alilc/lowcode-types'; import { Component } from '@alilc/lowcode-designer'; import { isESModule } from './is-es-module'; import { isReactComponent, acceptsRef, wrapReactClass } from './is-react'; +import { isObject } from './is-object'; interface LibraryMap { [key: string]: string; @@ -76,6 +77,22 @@ function findComponent(libraryMap: LibraryMap, componentName: string, npm?: NpmI return getSubComponent(library, paths); } +/** + * 判断是否是一个混合组件,即 components 是一个对象,对象值是 React 组件 + * 示例: + * { + * Button: ReactNode, + * Text: ReactNode, + * } + */ +function isMixinComponent(components: any) { + if (!isObject(components)) { + return false; + } + + return Object.keys(components).some(componentName => isReactComponent(components[componentName])); +} + export function buildComponents(libraryMap: LibraryMap, componentsMap: { [componentName: string]: NpmInfo | ComponentType | ComponentSchema }, createComponent: (schema: ComponentSchema) => Component | null) { @@ -89,6 +106,8 @@ export function buildComponents(libraryMap: LibraryMap, component = wrapReactClass(component as FunctionComponent); } components[componentName] = component; + } else if (isMixinComponent(component)) { + components[componentName] = component; } else { component = findComponent(libraryMap, componentName, component); if (component) { From 4b59190c7f9d518bc7efac44b7eeee73f1b5d177 Mon Sep 17 00:00:00 2001 From: JackLian Date: Wed, 29 Jun 2022 20:16:05 +0800 Subject: [PATCH 4/9] fix: fix lint issues for renderer-core/renderer/base --- packages/renderer-core/src/renderer/base.tsx | 84 +++++++++++-------- .../tests/adapter/adapter.test.ts | 1 - .../tests/renderer/base.test.tsx | 18 ++++ 3 files changed, 66 insertions(+), 37 deletions(-) create mode 100644 packages/renderer-core/tests/renderer/base.test.tsx diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx index 28c44964a..dfc1e5f42 100644 --- a/packages/renderer-core/src/renderer/base.tsx +++ b/packages/renderer-core/src/renderer/base.tsx @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ /* eslint-disable max-len */ /* eslint-disable react/prop-types */ import classnames from 'classnames'; @@ -47,7 +48,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { Record, any >; - const createElement = runtime.createElement; + const { createElement } = runtime; const Div = divFactory(); const VisualDom = visualDomFactory(); const AppContext = contextFactory(); @@ -97,6 +98,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { this.__debug(`constructor - ${props?.__schema?.fileName}`); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars __beforeInit(_props: IBaseRendererProps) { } __init(props: IBaseRendererProps) { @@ -107,6 +109,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { this.__initI18nAPIs(); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars __afterInit(_props: IBaseRendererProps) { } static getDerivedStateFromProps(props: IBaseRendererProps, state: any) { @@ -120,35 +123,36 @@ export default function baseRendererFactory(): IBaseRenderComponent { } if (typeof func === 'function') { + // eslint-disable-next-line @typescript-eslint/ban-types return (func as Function)(props, state); } } return null; } - async getSnapshotBeforeUpdate() { - this.__setLifeCycleMethods('getSnapshotBeforeUpdate', arguments); + async getSnapshotBeforeUpdate(...args: any[]) { + this.__setLifeCycleMethods('getSnapshotBeforeUpdate', args); this.__debug(`getSnapshotBeforeUpdate - ${this.props?.__schema?.fileName}`); } - async componentDidMount() { + async componentDidMount(...args: any[]) { this.reloadDataSource(); - this.__setLifeCycleMethods('componentDidMount', arguments); + this.__setLifeCycleMethods('componentDidMount', args); this.__debug(`componentDidMount - ${this.props?.__schema?.fileName}`); } - async componentDidUpdate(...args: any) { + async componentDidUpdate(...args: any[]) { this.__setLifeCycleMethods('componentDidUpdate', args); this.__debug(`componentDidUpdate - ${this.props.__schema.fileName}`); } - async componentWillUnmount(...args: any) { + async componentWillUnmount(...args: any[]) { this.__setLifeCycleMethods('componentWillUnmount', args); this.__debug(`componentWillUnmount - ${this.props?.__schema?.fileName}`); } - async componentDidCatch(e: any) { - this.__setLifeCycleMethods('componentDidCatch', arguments); + async componentDidCatch(e: any, ...args: any[]) { + this.__setLifeCycleMethods('componentDidCatch', { e, ...args }); console.warn(e); } @@ -165,7 +169,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { this.forceUpdate(); return resolve({}); } - this.setState(res, resolve); + this.setState(res, resolve as () => void); }) .catch((err: Error) => { if (this.__showPlaceholder) { @@ -229,14 +233,15 @@ export default function baseRendererFactory(): IBaseRenderComponent { }); this.__customMethodsList = customMethodsList; forEach(__schema.methods, (val: any, key: string) => { - if (isJSExpression(val) || isJSFunction(val)) { - val = this.parseExpression(val, this); + let value = val; + if (isJSExpression(value) || isJSFunction(value)) { + value = this.parseExpression(value, this); } - if (typeof val !== 'function') { - console.error(`自定义函数${key}类型不符`, val); + if (typeof value !== 'function') { + console.error(`自定义函数${key}类型不符`, value); return; } - this[key] = val.bind(this); + this[key] = value.bind(this); }); }; @@ -304,7 +309,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { this.forceUpdate(); return resolve({}); } - this.setState(res, resolve); + this.setState(res, resolve as () => void); }) .catch((err: Error) => { if (this.__showPlaceholder) { @@ -417,7 +422,9 @@ export default function baseRendererFactory(): IBaseRenderComponent { // self 为每个渲染组件构造的上下文,self是自上而下继承的 // parentInfo 父组件的信息,包含schema和Comp // idx 若为循环渲染的循环Index - __createVirtualDom = (schema: NodeData | NodeData[] | undefined, scope: any, parentInfo: IInfo, idx: string | number = ''): any => { + __createVirtualDom = (originalSchema: NodeData | NodeData[] | undefined, originalScope: any, parentInfo: IInfo, idx: string | number = ''): any => { + let scope = originalScope; + let schema = originalSchema; const { engine } = this.context || {}; try { if (!schema) return null; @@ -588,7 +595,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { } let child = this.__getSchemaChildrenVirtualDom(schema, scope, Comp); - const renderComp = (props: any) => engine.createElement(Comp, props, child); + const renderComp = (innerProps: any) => engine.createElement(Comp, innerProps, child); // 设计模式下的特殊处理 if (engine && [DESIGN_MODE.EXTEND, DESIGN_MODE.BORDER].includes(engine.props.designMode)) { // 对于overlay,dialog等组件为了使其在设计模式下显示,外层需要增加一个div容器 @@ -698,7 +705,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { if (!Array.isArray(schema.loop)) return null; const itemArg = (schema.loopArgs && schema.loopArgs[0]) || 'item'; const indexArg = (schema.loopArgs && schema.loopArgs[1]) || 'index'; - const loop: (JSONValue| CompositeValue)[] = schema.loop; + const { loop } = schema; return loop.map((item: JSONValue | CompositeValue, i: number) => { const loopSelf: any = { [itemArg]: item, @@ -722,7 +729,8 @@ export default function baseRendererFactory(): IBaseRenderComponent { return engine?.props?.designMode === 'design'; } - __parseProps = (props: any, scope: any, path: string, info: IInfo): any => { + __parseProps = (originalProps: any, scope: any, path: string, info: IInfo): any => { + let props = originalProps; const { schema, Comp, componentInfo = {} } = info; const propInfo = getValue(componentInfo.props, path); // FIXME! 将这行逻辑外置,解耦,线上环境不要验证参数,调试环境可以有,通过传参自定义 @@ -737,14 +745,14 @@ export default function baseRendererFactory(): IBaseRenderComponent { if (isEmpty(params)) { return checkProps(this.__createVirtualDom(data, scope, ({ schema, Comp } as IInfo))); } - return checkProps(function () { + return checkProps((...argValues: any[]) => { const args: any = {}; if (Array.isArray(params) && params.length) { params.forEach((item, idx) => { if (typeof item === 'string') { - args[item] = arguments[idx]; + args[item] = argValues[idx]; } else if (item && typeof item === 'object') { - args[item.name] = arguments[idx]; + args[item.name] = argValues[idx]; } }); } @@ -770,7 +778,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { if (!isSchema(props) && !isJSSlot(props)) return checkProps(props); } - const handleLegaoI18n = (props: any) => props[props.use || 'zh_CN']; + const handleLegaoI18n = (innerProps: any) => innerProps[innerProps.use || 'zh_CN']; // 兼容乐高设计态 i18n 数据 if (isI18nData(props)) { @@ -810,13 +818,16 @@ export default function baseRendererFactory(): IBaseRenderComponent { && propInfo?.props?.types?.indexOf('ReactNode') > -1 && propInfo?.props?.reactNodeProps?.type === 'function' ); + + let params = null; + if (isReactNodeFunction) { + params = propInfo?.props?.params; + } else if (isMixinReactNodeFunction) { + params = propInfo?.props?.reactNodeProps?.params; + } return parseReactNode( props, - isReactNodeFunction - ? propInfo.props.params - : isMixinReactNodeFunction - ? propInfo.props.reactNodeProps.params - : null, + params, ); } if (Array.isArray(props)) { @@ -857,15 +868,13 @@ export default function baseRendererFactory(): IBaseRenderComponent { __debug = logger.log; __renderContextProvider = (customProps?: object, children?: any) => { - customProps = customProps || {}; - children = children || this.__createDom(); return createElement(AppContext.Provider, { value: { ...this.context, blockContext: this, - ...customProps, + ...(customProps || {}), }, - children, + children: children || this.__createDom(), }); }; @@ -873,7 +882,8 @@ export default function baseRendererFactory(): IBaseRenderComponent { return createElement(AppContext.Consumer, {}, children); }; - __getHocComp(Comp: any, schema: any, scope: any) { + __getHocComp(OriginalComp: any, schema: any, scope: any) { + let Comp = OriginalComp; this.componentHoc.forEach((ComponentConstruct: IComponentConstruct) => { Comp = ComponentConstruct(Comp || Div, { schema, @@ -886,7 +896,8 @@ export default function baseRendererFactory(): IBaseRenderComponent { return Comp; } - __renderComp(Comp: any, ctxProps: object) { + __renderComp(OriginalComp: any, ctxProps: object) { + let Comp = OriginalComp; const { __schema } = this.props; const { __ctx } = this.props; const scope: any = {}; @@ -935,7 +946,8 @@ export default function baseRendererFactory(): IBaseRenderComponent { }, children); } - __checkSchema = (schema: NodeSchema | undefined, extraComponents: string | string[] = []) => { + __checkSchema = (schema: NodeSchema | undefined, originalExtraComponents: string | string[] = []) => { + let extraComponents = originalExtraComponents; if (typeof extraComponents === 'string') { extraComponents = [extraComponents]; } diff --git a/packages/renderer-core/tests/adapter/adapter.test.ts b/packages/renderer-core/tests/adapter/adapter.test.ts index 77e12c587..a838602fb 100644 --- a/packages/renderer-core/tests/adapter/adapter.test.ts +++ b/packages/renderer-core/tests/adapter/adapter.test.ts @@ -1,6 +1,5 @@ // @ts-nocheck import adapter, { Env } from '../../src/adapter'; -import { IRuntime, IRendererModules, IGeneralConstructor } from '../../src/types'; diff --git a/packages/renderer-core/tests/renderer/base.test.tsx b/packages/renderer-core/tests/renderer/base.test.tsx new file mode 100644 index 000000000..5d8d24a80 --- /dev/null +++ b/packages/renderer-core/tests/renderer/base.test.tsx @@ -0,0 +1,18 @@ +const mockGetRenderers = jest.fn(); +jest.mock('../../src/adapter', () => { + return { + getRenderers: () => { return mockGetRenderers();} + }; +}); + +import baseRendererFactory from '../../src/renderer/base'; + +describe('Base Render', () => { + it('customBaseRenderer logic works', () => { + mockGetRenderers.mockReturnValue({BaseRenderer: {}}); + const baseRenderer = baseRendererFactory(); + expect(mockGetRenderers).toBeCalledTimes(1); + expect(baseRenderer).toStrictEqual({}); + mockGetRenderers.mockClear(); + }); +}); \ No newline at end of file From d85437d4af1043371e27dfde98cecf914b93a126 Mon Sep 17 00:00:00 2001 From: JackLian Date: Wed, 29 Jun 2022 21:15:24 +0800 Subject: [PATCH 5/9] fix: fix lint issues for renderer-core/renderer/base --- packages/renderer-core/src/renderer/base.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx index dfc1e5f42..372f368d9 100644 --- a/packages/renderer-core/src/renderer/base.tsx +++ b/packages/renderer-core/src/renderer/base.tsx @@ -151,9 +151,9 @@ export default function baseRendererFactory(): IBaseRenderComponent { this.__debug(`componentWillUnmount - ${this.props?.__schema?.fileName}`); } - async componentDidCatch(e: any, ...args: any[]) { - this.__setLifeCycleMethods('componentDidCatch', { e, ...args }); - console.warn(e); + async componentDidCatch(...args: any[]) { + this.__setLifeCycleMethods('componentDidCatch', args); + console.warn(args); } reloadDataSource = () => new Promise((resolve, reject) => { From 951d1cb103fa46c0e7926d6138657c7d10cc4f88 Mon Sep 17 00:00:00 2001 From: keuby Date: Tue, 5 Jul 2022 15:19:20 +0800 Subject: [PATCH 6/9] fix(types): rrror declaration of the children prop --- packages/types/src/schema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/types/src/schema.ts b/packages/types/src/schema.ts index c36a7c436..2895cd5ee 100644 --- a/packages/types/src/schema.ts +++ b/packages/types/src/schema.ts @@ -26,7 +26,7 @@ export interface NodeSchema { * 组件属性对象 */ props?: { - children?: NodeData[]; + children?: NodeData | NodeData[]; } & PropsMap;// | PropsList; /** * 组件属性对象 From 12f67dcdeb577622eb7e2ebaa6c484db133b88b2 Mon Sep 17 00:00:00 2001 From: JackLian Date: Tue, 5 Jul 2022 15:38:28 +0800 Subject: [PATCH 7/9] refactor: change __setLifeCycleMethods to its actual meaning __excuteLifeCycleMethod --- packages/renderer-core/src/renderer/addon.tsx | 2 +- packages/renderer-core/src/renderer/base.tsx | 14 +++++++------- packages/renderer-core/src/renderer/block.tsx | 2 +- packages/renderer-core/src/renderer/component.tsx | 2 +- packages/renderer-core/src/renderer/page.tsx | 4 ++-- packages/renderer-core/src/types/index.ts | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/renderer-core/src/renderer/addon.tsx b/packages/renderer-core/src/renderer/addon.tsx index 1341fbb35..964de1858 100644 --- a/packages/renderer-core/src/renderer/addon.tsx +++ b/packages/renderer-core/src/renderer/addon.tsx @@ -45,7 +45,7 @@ export default function addonRendererFactory(): IBaseRenderComponent { this.__initDataSource(props); this.open = this.open || (() => { }); this.close = this.close || (() => { }); - this.__setLifeCycleMethods('constructor', [...arguments]); + this.__excuteLifeCycleMethod('constructor', [...arguments]); } async componentWillUnmount() { diff --git a/packages/renderer-core/src/renderer/base.tsx b/packages/renderer-core/src/renderer/base.tsx index 372f368d9..32bc0c5a8 100644 --- a/packages/renderer-core/src/renderer/base.tsx +++ b/packages/renderer-core/src/renderer/base.tsx @@ -131,28 +131,28 @@ export default function baseRendererFactory(): IBaseRenderComponent { } async getSnapshotBeforeUpdate(...args: any[]) { - this.__setLifeCycleMethods('getSnapshotBeforeUpdate', args); + this.__excuteLifeCycleMethod('getSnapshotBeforeUpdate', args); this.__debug(`getSnapshotBeforeUpdate - ${this.props?.__schema?.fileName}`); } async componentDidMount(...args: any[]) { this.reloadDataSource(); - this.__setLifeCycleMethods('componentDidMount', args); + this.__excuteLifeCycleMethod('componentDidMount', args); this.__debug(`componentDidMount - ${this.props?.__schema?.fileName}`); } async componentDidUpdate(...args: any[]) { - this.__setLifeCycleMethods('componentDidUpdate', args); + this.__excuteLifeCycleMethod('componentDidUpdate', args); this.__debug(`componentDidUpdate - ${this.props.__schema.fileName}`); } async componentWillUnmount(...args: any[]) { - this.__setLifeCycleMethods('componentWillUnmount', args); + this.__excuteLifeCycleMethod('componentWillUnmount', args); this.__debug(`componentWillUnmount - ${this.props?.__schema?.fileName}`); } async componentDidCatch(...args: any[]) { - this.__setLifeCycleMethods('componentDidCatch', args); + this.__excuteLifeCycleMethod('componentDidCatch', args); console.warn(args); } @@ -194,7 +194,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { } } - __setLifeCycleMethods = (method: string, args?: any) => { + __excuteLifeCycleMethod = (method: string, args?: any) => { const lifeCycleMethods = getValue(this.props.__schema, 'lifeCycles', {}); let fn = lifeCycleMethods[method]; if (fn) { @@ -360,7 +360,7 @@ export default function baseRendererFactory(): IBaseRenderComponent { __render = () => { const schema = this.props.__schema; - this.__setLifeCycleMethods('render'); + this.__excuteLifeCycleMethod('render'); this.__writeCss(); const { engine } = this.context; diff --git a/packages/renderer-core/src/renderer/block.tsx b/packages/renderer-core/src/renderer/block.tsx index 17daccaa3..f87997864 100644 --- a/packages/renderer-core/src/renderer/block.tsx +++ b/packages/renderer-core/src/renderer/block.tsx @@ -13,7 +13,7 @@ export default function blockRendererFactory(): IBaseRenderComponent { const schema = props.__schema || {}; this.state = this.__parseData(schema.state || {}); this.__initDataSource(props); - this.__setLifeCycleMethods('constructor', [...arguments]); + this.__excuteLifeCycleMethod('constructor', [...arguments]); } render() { diff --git a/packages/renderer-core/src/renderer/component.tsx b/packages/renderer-core/src/renderer/component.tsx index 3b73fd0fd..85b1fd4d3 100644 --- a/packages/renderer-core/src/renderer/component.tsx +++ b/packages/renderer-core/src/renderer/component.tsx @@ -15,7 +15,7 @@ export default function componentRendererFactory(): IBaseRenderComponent { const schema = props.__schema || {}; this.state = this.__parseData(schema.state || {}); this.__initDataSource(props); - this.__setLifeCycleMethods('constructor', arguments as any); + this.__excuteLifeCycleMethod('constructor', arguments as any); } render() { diff --git a/packages/renderer-core/src/renderer/page.tsx b/packages/renderer-core/src/renderer/page.tsx index 380e0fb36..41c1a713f 100644 --- a/packages/renderer-core/src/renderer/page.tsx +++ b/packages/renderer-core/src/renderer/page.tsx @@ -15,7 +15,7 @@ export default function pageRendererFactory(): IBaseRenderComponent { const schema = props.__schema || {}; this.state = this.__parseData(schema.state || {}); this.__initDataSource(props); - this.__setLifeCycleMethods('constructor', [props, ...rest]); + this.__excuteLifeCycleMethod('constructor', [props, ...rest]); } async componentDidUpdate(prevProps: IBaseRendererProps, _prevState: {}, snapshot: unknown) { @@ -40,7 +40,7 @@ export default function pageRendererFactory(): IBaseRenderComponent { this.__bindCustomMethods(this.props); this.__initDataSource(this.props); - // this.__setLifeCycleMethods('constructor', arguments); + // this.__excuteLifeCycleMethod('constructor', arguments); this.__generateCtx({ page: this, diff --git a/packages/renderer-core/src/types/index.ts b/packages/renderer-core/src/types/index.ts index a3e7f0c36..34e69b164 100644 --- a/packages/renderer-core/src/types/index.ts +++ b/packages/renderer-core/src/types/index.ts @@ -240,7 +240,7 @@ export type IBaseRendererInstance = IGeneralComponent< __beforeInit(props: IBaseRendererProps): void; __init(props: IBaseRendererProps): void; __afterInit(props: IBaseRendererProps): void; - __setLifeCycleMethods(method: string, args?: any[]): void; + __excuteLifeCycleMethod(method: string, args?: any[]): void; __bindCustomMethods(props: IBaseRendererProps): void; __generateCtx(ctx: Record): void; __parseData(data: any, ctx?: any): any; From a0c772fb903cf5eb9e0b811b64bbe3846d4ba8ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LeoYuan=20=E8=A2=81=E5=8A=9B=E7=9A=93?= Date: Wed, 6 Jul 2022 10:51:38 +0800 Subject: [PATCH 8/9] fix: project event listeners will not be invoked sometimes --- packages/shell/src/project.ts | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/shell/src/project.ts b/packages/shell/src/project.ts index 297bc320f..c6a29c4eb 100644 --- a/packages/shell/src/project.ts +++ b/packages/shell/src/project.ts @@ -136,41 +136,40 @@ export default class Project { * 当前 project 内的 document 变更事件 */ onChangeDocument(fn: (doc: DocumentModel) => void) { - if (this[projectSymbol].currentDocument) { - fn(DocumentModel.create(this[projectSymbol].currentDocument)!); - return () => {}; - } - return this[projectSymbol].onCurrentDocumentChange((originalDoc) => { + const offFn = this[projectSymbol].onCurrentDocumentChange((originalDoc) => { fn(DocumentModel.create(originalDoc)!); }); + if (this[projectSymbol].currentDocument) { + fn(DocumentModel.create(this[projectSymbol].currentDocument)!); + } + return offFn; } /** * 当前 project 的模拟器 ready 事件 */ onSimulatorHostReady(fn: (host: SimulatorHost) => void) { - if (this[simulatorHostSymbol]) { - fn(SimulatorHost.create(this[simulatorHostSymbol])!); - return () => {}; - } - return this[projectSymbol].onSimulatorReady((simulator: BuiltinSimulatorHost) => { + const offFn = this[projectSymbol].onSimulatorReady((simulator: BuiltinSimulatorHost) => { this[simulatorHostSymbol] = simulator; fn(SimulatorHost.create(simulator)!); }); + if (this[simulatorHostSymbol]) { + fn(SimulatorHost.create(this[simulatorHostSymbol])!); + } + return offFn; } /** * 当前 project 的渲染器 ready 事件 */ onSimulatorRendererReady(fn: () => void) { - if (this[simulatorRendererSymbol]) { - fn(); - return () => {}; - } - // TODO: 补充 renderer 实例 - return this[projectSymbol].onRendererReady((renderer: any) => { + const offFn = this[projectSymbol].onRendererReady((renderer: any) => { this[simulatorRendererSymbol] = renderer; fn(); }); + if (this[simulatorRendererSymbol]) { + fn(); + } + return offFn; } } From 30d4ba9d215ce8b7e6238c2bff5e1d8ba1fc752a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LeoYuan=20=E8=A2=81=E5=8A=9B=E7=9A=93?= Date: Wed, 6 Jul 2022 11:20:17 +0800 Subject: [PATCH 9/9] chore(release): publish 1.0.12 --- lerna.json | 2 +- packages/designer/package.json | 10 +++++----- packages/editor-core/package.json | 6 +++--- packages/editor-skeleton/package.json | 10 +++++----- packages/engine/package.json | 16 ++++++++-------- packages/ignitor/package.json | 2 +- packages/plugin-designer/package.json | 8 ++++---- packages/plugin-outline-pane/package.json | 10 +++++----- packages/rax-renderer/package.json | 6 +++--- packages/rax-simulator-renderer/package.json | 10 +++++----- packages/react-renderer/package.json | 4 ++-- packages/react-simulator-renderer/package.json | 10 +++++----- packages/renderer-core/package.json | 8 ++++---- packages/shell/package.json | 12 ++++++------ packages/types/package.json | 2 +- packages/utils/package.json | 4 ++-- 16 files changed, 60 insertions(+), 60 deletions(-) diff --git a/lerna.json b/lerna.json index 16a30579b..40daf983c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "4.0.0", - "version": "1.0.11", + "version": "1.0.12", "npmClient": "yarn", "useWorkspaces": true, "packages": [ diff --git a/packages/designer/package.json b/packages/designer/package.json index 5ac792262..b7e0b3a9c 100644 --- a/packages/designer/package.json +++ b/packages/designer/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-designer", - "version": "1.0.11", + "version": "1.0.12", "description": "Designer for Ali LowCode Engine", "main": "lib/index.js", "module": "es/index.js", @@ -15,10 +15,10 @@ }, "license": "MIT", "dependencies": { - "@alilc/lowcode-editor-core": "1.0.11", - "@alilc/lowcode-shell": "1.0.11", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-editor-core": "1.0.12", + "@alilc/lowcode-shell": "1.0.12", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.5", diff --git a/packages/editor-core/package.json b/packages/editor-core/package.json index ab4a9b250..c178d3c9d 100644 --- a/packages/editor-core/package.json +++ b/packages/editor-core/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-editor-core", - "version": "1.0.11", + "version": "1.0.12", "description": "Core Api for Ali lowCode engine", "license": "MIT", "main": "lib/index.js", @@ -14,8 +14,8 @@ }, "dependencies": { "@alifd/next": "^1.19.16", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "debug": "^4.1.1", "intl-messageformat": "^9.3.1", diff --git a/packages/editor-skeleton/package.json b/packages/editor-skeleton/package.json index 85a8444ea..100c5c401 100644 --- a/packages/editor-skeleton/package.json +++ b/packages/editor-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-editor-skeleton", - "version": "1.0.11", + "version": "1.0.12", "description": "alibaba lowcode editor skeleton", "main": "lib/index.js", "module": "es/index.js", @@ -18,10 +18,10 @@ ], "dependencies": { "@alifd/next": "^1.20.12", - "@alilc/lowcode-designer": "1.0.11", - "@alilc/lowcode-editor-core": "1.0.11", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", + "@alilc/lowcode-editor-core": "1.0.12", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "react": "^16.8.1", "react-dom": "^16.8.1" diff --git a/packages/engine/package.json b/packages/engine/package.json index 7895ea08c..78c182a34 100644 --- a/packages/engine/package.json +++ b/packages/engine/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-engine", - "version": "1.0.11", + "version": "1.0.12", "description": "An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系", "main": "lib/engine-core.js", "module": "es/engine-core.js", @@ -19,14 +19,14 @@ "license": "MIT", "dependencies": { "@alifd/next": "^1.19.12", - "@alilc/lowcode-designer": "1.0.11", - "@alilc/lowcode-editor-core": "1.0.11", - "@alilc/lowcode-editor-skeleton": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", + "@alilc/lowcode-editor-core": "1.0.12", + "@alilc/lowcode-editor-skeleton": "1.0.12", "@alilc/lowcode-engine-ext": "^1.0.0", - "@alilc/lowcode-plugin-designer": "1.0.11", - "@alilc/lowcode-plugin-outline-pane": "1.0.11", - "@alilc/lowcode-shell": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-plugin-designer": "1.0.12", + "@alilc/lowcode-plugin-outline-pane": "1.0.12", + "@alilc/lowcode-shell": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "react": "^16.8.1", "react-dom": "^16.8.1" }, diff --git a/packages/ignitor/package.json b/packages/ignitor/package.json index 9dbb6e1cc..2e76e0344 100644 --- a/packages/ignitor/package.json +++ b/packages/ignitor/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-ignitor", - "version": "1.0.11", + "version": "1.0.12", "description": "点火器,bootstrap lce project", "main": "lib/index.js", "private": true, diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json index 5fd0c1c73..3916c79e7 100644 --- a/packages/plugin-designer/package.json +++ b/packages/plugin-designer/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-plugin-designer", - "version": "1.0.11", + "version": "1.0.12", "description": "alibaba lowcode editor designer plugin", "files": [ "es", @@ -18,9 +18,9 @@ ], "author": "xiayang.xy", "dependencies": { - "@alilc/lowcode-designer": "1.0.11", - "@alilc/lowcode-editor-core": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", + "@alilc/lowcode-editor-core": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "react": "^16.8.1", "react-dom": "^16.8.1" }, diff --git a/packages/plugin-outline-pane/package.json b/packages/plugin-outline-pane/package.json index c6e16d5ff..aeaedcd72 100644 --- a/packages/plugin-outline-pane/package.json +++ b/packages/plugin-outline-pane/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-plugin-outline-pane", - "version": "1.0.11", + "version": "1.0.12", "description": "Outline pane for Ali lowCode engine", "files": [ "es", @@ -13,10 +13,10 @@ }, "dependencies": { "@alifd/next": "^1.19.16", - "@alilc/lowcode-designer": "1.0.11", - "@alilc/lowcode-editor-core": "1.0.11", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", + "@alilc/lowcode-editor-core": "1.0.12", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "react": "^16", "react-dom": "^16.7.0" diff --git a/packages/rax-renderer/package.json b/packages/rax-renderer/package.json index 3c8e5b1ce..3af6773b4 100644 --- a/packages/rax-renderer/package.json +++ b/packages/rax-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-rax-renderer", - "version": "1.0.11", + "version": "1.0.12", "description": "Rax renderer for Ali lowCode engine", "main": "lib/index.js", "module": "es/index.js", @@ -30,8 +30,8 @@ "build": "build-scripts build" }, "dependencies": { - "@alilc/lowcode-renderer-core": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-renderer-core": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "rax-find-dom-node": "^1.0.1" }, "devDependencies": { diff --git a/packages/rax-simulator-renderer/package.json b/packages/rax-simulator-renderer/package.json index be83eb72b..9b9a3a588 100644 --- a/packages/rax-simulator-renderer/package.json +++ b/packages/rax-simulator-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-rax-simulator-renderer", - "version": "1.0.11", + "version": "1.0.12", "description": "rax simulator renderer for alibaba lowcode designer", "main": "lib/index.js", "module": "es/index.js", @@ -13,10 +13,10 @@ "build:umd": "build-scripts build --config build.umd.json" }, "dependencies": { - "@alilc/lowcode-designer": "1.0.11", - "@alilc/lowcode-rax-renderer": "1.0.11", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", + "@alilc/lowcode-rax-renderer": "1.0.12", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "driver-universal": "^3.1.3", "history": "^5.0.0", diff --git a/packages/react-renderer/package.json b/packages/react-renderer/package.json index 2a344f960..5e31f9f2e 100644 --- a/packages/react-renderer/package.json +++ b/packages/react-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-react-renderer", - "version": "1.0.11", + "version": "1.0.12", "description": "react renderer for ali lowcode engine", "main": "lib/index.js", "module": "es/index.js", @@ -22,7 +22,7 @@ ], "dependencies": { "@alifd/next": "^1.21.16", - "@alilc/lowcode-renderer-core": "1.0.11" + "@alilc/lowcode-renderer-core": "1.0.12" }, "devDependencies": { "@alib/build-scripts": "^0.1.18", diff --git a/packages/react-simulator-renderer/package.json b/packages/react-simulator-renderer/package.json index 715eaee75..c3e7238fd 100644 --- a/packages/react-simulator-renderer/package.json +++ b/packages/react-simulator-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-react-simulator-renderer", - "version": "1.0.11", + "version": "1.0.12", "description": "react simulator renderer for alibaba lowcode designer", "main": "lib/index.js", "module": "es/index.js", @@ -16,10 +16,10 @@ "build:umd": "NODE_OPTIONS=--max_old_space_size=8192 build-scripts build --config build.umd.json" }, "dependencies": { - "@alilc/lowcode-designer": "1.0.11", - "@alilc/lowcode-react-renderer": "1.0.11", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", + "@alilc/lowcode-react-renderer": "1.0.12", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "mobx": "^6.3.0", "mobx-react": "^7.2.0", diff --git a/packages/renderer-core/package.json b/packages/renderer-core/package.json index 6cfa1d924..a660b09d2 100644 --- a/packages/renderer-core/package.json +++ b/packages/renderer-core/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-renderer-core", - "version": "1.0.11", + "version": "1.0.12", "description": "renderer core", "license": "MIT", "main": "lib/index.js", @@ -16,8 +16,8 @@ }, "dependencies": { "@alilc/lowcode-datasource-engine": "^1.0.0", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "debug": "^4.1.1", "fetch-jsonp": "^1.1.3", @@ -33,7 +33,7 @@ }, "devDependencies": { "@alib/build-scripts": "^0.1.18", - "@alilc/lowcode-designer": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", "@alilc/lowcode-test-mate": "^1.0.1", "@babel/plugin-transform-typescript": "^7.16.8", "@testing-library/react": "^11.2.2", diff --git a/packages/shell/package.json b/packages/shell/package.json index bc1dba890..e78341500 100644 --- a/packages/shell/package.json +++ b/packages/shell/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-shell", - "version": "1.0.11", + "version": "1.0.12", "description": "Shell Layer for AliLowCodeEngine", "main": "lib/index.js", "module": "es/index.js", @@ -15,11 +15,11 @@ }, "license": "MIT", "dependencies": { - "@alilc/lowcode-designer": "1.0.11", - "@alilc/lowcode-editor-core": "1.0.11", - "@alilc/lowcode-editor-skeleton": "1.0.11", - "@alilc/lowcode-types": "1.0.11", - "@alilc/lowcode-utils": "1.0.11", + "@alilc/lowcode-designer": "1.0.12", + "@alilc/lowcode-editor-core": "1.0.12", + "@alilc/lowcode-editor-skeleton": "1.0.12", + "@alilc/lowcode-types": "1.0.12", + "@alilc/lowcode-utils": "1.0.12", "classnames": "^2.2.6", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.5", diff --git a/packages/types/package.json b/packages/types/package.json index 2d3dfc656..34f41a6a2 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-types", - "version": "1.0.11", + "version": "1.0.12", "description": "Types for Ali lowCode engine", "files": [ "es", diff --git a/packages/utils/package.json b/packages/utils/package.json index 0db08d7d0..c7bad384c 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@alilc/lowcode-utils", - "version": "1.0.11", + "version": "1.0.12", "description": "Utils for Ali lowCode engine", "files": [ "lib", @@ -14,7 +14,7 @@ }, "dependencies": { "@alifd/next": "^1.19.16", - "@alilc/lowcode-types": "1.0.11", + "@alilc/lowcode-types": "1.0.12", "lodash": "^4.17.21", "react": "^16", "zen-logger": "^1.1.0"