diff --git a/.eslintrc.js b/.eslintrc.js index 3f11e47e4..bf1394e65 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,6 +28,8 @@ module.exports = { 'eol-last': 0, 'react/no-find-dom-node': 0, 'no-case-declarations': 0, - '@typescript-eslint/indent': 0 + '@typescript-eslint/indent': 0, + 'import/no-cycle': 0, + '@typescript-eslint/no-shadow': 0, } }; diff --git a/lerna.json b/lerna.json index 8b4af1576..f69d55a6c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.11.0", - "version": "1.0.74", + "version": "1.0.76", "npmClient": "tnpm", "registry": "http://registry.antfin-inc.com", "useWorkspaces": true, diff --git a/package.json b/package.json index 713693f2b..380a057ce 100644 --- a/package.json +++ b/package.json @@ -25,23 +25,20 @@ "test": "lerna run test --stream", "test:snapshot": "lerna run test:snapshot", "watchdog:build": "node ./scripts/watchdog.js", - "xima:fix": "xima fix", - "xima:scan": "xima scan --quiet" + "f2elint:scan": "f2elint scan -q -i ./packages/*/src", + "f2elint:fix": "f2elint fix -i ./packages/*/src" }, "husky": { "hooks": { - "pre-commit": "xima exec lint-staged", - "commit-msg": "xima exec commitlint -E HUSKY_GIT_PARAMS" + "pre-commit": "f2elint commit-file-scan", + "commit-msg": "f2elint commit-msg-scan" } }, - "lint-staged": { - "**/*.{css,scss,less}": "xima exec stylelint", - "**/*.{js,jsx,ts,tsx}": "xima exec eslint" - }, "devDependencies": { "@ali/lerna": "^1", - "typescript": "^3.2.2", - "xima": "^0.3.0" + "f2elint": "^2.0.1", + "husky": "^7.0.4", + "typescript": "^3.2.2" }, "engines": { "node": ">=14.0.0" diff --git a/packages/designer/README.md b/packages/designer/README.md deleted file mode 100644 index ce7ea5d04..000000000 --- a/packages/designer/README.md +++ /dev/null @@ -1,4 +0,0 @@ -编排模块 - - -simulator/renderer 发 CDN diff --git a/packages/designer/package.json b/packages/designer/package.json index dda1156b7..bc90796e2 100644 --- a/packages/designer/package.json +++ b/packages/designer/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-designer", - "version": "1.0.74", + "version": "1.0.76", "description": "Designer for Ali LowCode Engine", "main": "lib/index.js", "module": "es/index.js", @@ -15,9 +15,9 @@ }, "license": "MIT", "dependencies": { - "@ali/lowcode-editor-core": "1.0.74", - "@ali/lowcode-types": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-editor-core": "1.0.76", + "@ali/lowcode-types": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "classnames": "^2.2.6", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.5", diff --git a/packages/designer/src/builtin-simulator/bem-tools/border-container.tsx b/packages/designer/src/builtin-simulator/bem-tools/border-container.tsx index 461487e07..4275df98c 100644 --- a/packages/designer/src/builtin-simulator/bem-tools/border-container.tsx +++ b/packages/designer/src/builtin-simulator/bem-tools/border-container.tsx @@ -47,9 +47,9 @@ function getTitle(title: string | I18nData | ReactElement) { @observer export class BorderContainer extends Component<{ - host: BuiltinSimulatorHost, + host: BuiltinSimulatorHost; }, { - target?: ParentalNode, + target?: ParentalNode; }> { state = {} as any; diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts index ae0f09ebd..0671cc730 100644 --- a/packages/designer/src/builtin-simulator/host.ts +++ b/packages/designer/src/builtin-simulator/host.ts @@ -1004,7 +1004,7 @@ export class BuiltinSimulatorHost implements ISimulatorHost { // 假如当前节点就是 locked 状态,要从当前节点的父节点开始查找 return !!(node?.isLocked ? n.parent?.isLocked : n.isLocked); diff --git a/packages/designer/src/component-meta.ts b/packages/designer/src/component-meta.ts index fec7eedf6..66215d861 100644 --- a/packages/designer/src/component-meta.ts +++ b/packages/designer/src/component-meta.ts @@ -13,7 +13,7 @@ import { LiveTextEditingConfig, FieldConfig, } from '@ali/lowcode-types'; -import { computed, engineConfig } from '@ali/lowcode-editor-core'; +import { makeObservable, obx, computed, engineConfig } from '@ali/lowcode-editor-core'; import EventEmitter from 'events'; import { isNode, Node, ParentalNode } from './document'; @@ -130,7 +130,7 @@ export class ComponentMeta { private childWhitelist?: NestingFilter | null; - private _title?: TitleContent; + @obx private _title?: TitleContent; private _isMinimalRenderUnit?: boolean; @@ -162,6 +162,7 @@ export class ComponentMeta { } constructor(readonly designer: Designer, metadata: ComponentMetadata) { + makeObservable(this); this.parseMetadata(metadata); } diff --git a/packages/designer/src/designer/builtin-hotkey.ts b/packages/designer/src/designer/builtin-hotkey.ts index 5d187a6b2..62e427b16 100644 --- a/packages/designer/src/designer/builtin-hotkey.ts +++ b/packages/designer/src/designer/builtin-hotkey.ts @@ -179,7 +179,7 @@ hotkey.bind(['command+z', 'ctrl+z'], (e) => { e.preventDefault(); const selection = focusing.focusDesigner?.currentSelection; - const curSelected = Array.from(selection?.selected!); + const curSelected = Array.from(selection?.selected || []); his.back(); selection?.selectAll(curSelected); }); @@ -193,7 +193,7 @@ hotkey.bind(['command+y', 'ctrl+y', 'command+shift+z'], (e) => { } e.preventDefault(); const selection = focusing.focusDesigner?.currentSelection; - const curSelected = Array.from(selection?.selected!); + const curSelected = Array.from(selection?.selected || []); his.forward(); selection?.selectAll(curSelected); }); diff --git a/packages/designer/src/designer/drag-ghost/ghost.less b/packages/designer/src/designer/drag-ghost/ghost.less index 5e2167a09..7ab61b41d 100644 --- a/packages/designer/src/designer/drag-ghost/ghost.less +++ b/packages/designer/src/designer/drag-ghost/ghost.less @@ -8,7 +8,6 @@ align-items: center; pointer-events: none; background-color: rgba(0, 0, 0, 0.4); - //opacity: 0.9; box-shadow: 0 0 6px grey; transform: translate(-10%, -50%); .lc-ghost { diff --git a/packages/designer/src/designer/dragon.ts b/packages/designer/src/designer/dragon.ts index cbefed8f2..6c88b546b 100644 --- a/packages/designer/src/designer/dragon.ts +++ b/packages/designer/src/designer/dragon.ts @@ -7,6 +7,8 @@ import { Node, DocumentModel } from '../document'; import { ISimulatorHost, isSimulatorHost, NodeInstance, ComponentInstance } from '../simulator'; import { Designer } from './designer'; +export type DragObjectReducer = (dragObject: DragObject) => DragObject; + export interface LocateEvent { readonly type: 'LocateEvent'; /** @@ -193,7 +195,7 @@ function isDragEvent(e: any): e is DragEvent { */ export class Dragon { private sensors: ISensor[] = []; - + private dragObjectTransducers: DragObjectReducer[] = []; /** * current active sensor, 可用于感应区高亮 */ @@ -243,16 +245,41 @@ export class Dragon { }; } + /** + * change dragObject 对外暴露的拖拽对象处理方法 + * + * @param fn 拖拽对象处理函数 + */ + addDragObjectReducer(fn: DragObjectReducer) { + this.dragObjectTransducers.push(fn); + } + + transformDragObject(dragObject: DragObject) { + if (!this.dragObjectTransducers?.length) { + return dragObject; + } + + return this.dragObjectTransducers.reduce((preDragObject, reducer) => { + try { + return reducer(preDragObject); + } catch (e) { + console.warn(e); + return preDragObject; + } + }, dragObject); + } + /** * boost your dragObject for dragging(flying) 发射拖拽对象 * * @param dragObject 拖拽对象 * @param boostEvent 拖拽初始时事件 */ - boost(dragObject: DragObject, boostEvent: MouseEvent | DragEvent, fromRglNode?: Node) { + boost(dragObjectWrap: DragObject, boostEvent: MouseEvent | DragEvent, fromRglNode?: Node) { const { designer } = this; const masterSensors = this.getMasterSensors(); const handleEvents = makeEventsHandler(boostEvent, masterSensors); + const dragObject = this.transformDragObject(dragObjectWrap); const newBie = !isDragNodeObject(dragObject); const forceCopyState = isDragNodeObject(dragObject) && dragObject.nodes.some((node) => node.isSlot()); diff --git a/packages/designer/src/designer/location.ts b/packages/designer/src/designer/location.ts index eec210b35..84e2a7be5 100644 --- a/packages/designer/src/designer/location.ts +++ b/packages/designer/src/designer/location.ts @@ -78,6 +78,9 @@ export function isRowContainer(container: Element | Text, win?: Window) { return true; } } + if (/grid$/.test(display)) { + return true; + } return false; } diff --git a/packages/designer/src/designer/setting/setting-field.ts b/packages/designer/src/designer/setting/setting-field.ts index 02729a317..b57646333 100644 --- a/packages/designer/src/designer/setting/setting-field.ts +++ b/packages/designer/src/designer/setting/setting-field.ts @@ -98,7 +98,7 @@ export class SettingField extends SettingPropEntry implements SettingEntry { return this._config; } - private initItems(items: Array, settingFieldCollector?: { (name: string | number, field: SettingField): void; (name: string, field: SettingField): void; }) { + private initItems(items: Array, settingFieldCollector?: { (name: string | number, field: SettingField): void; (name: string, field: SettingField): void }) { this._items = items.map((item) => { if (isCustomView(item)) { return item; diff --git a/packages/designer/src/designer/setting/setting-prop-entry.ts b/packages/designer/src/designer/setting/setting-prop-entry.ts index eec80fffa..ae48bae1a 100644 --- a/packages/designer/src/designer/setting/setting-prop-entry.ts +++ b/packages/designer/src/designer/setting/setting-prop-entry.ts @@ -292,7 +292,7 @@ export class SettingPropEntry implements SettingEntry { } } - notifyValueChange(oldValue: any, newValue:any) { + notifyValueChange(oldValue: any, newValue: any) { this.editor.emit(GlobalEvent.Node.Prop.Change, { node: this.getNode(), prop: this, oldValue, newValue }); } diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index 6cb0cc5e7..3a181d17e 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -72,7 +72,7 @@ export class DocumentModel { /** * @deprecated */ - private _addons: Array<{ name: string, exportData: any }> = []; + private _addons: Array<{ name: string; exportData: any }> = []; /** * 模拟器 @@ -634,7 +634,7 @@ export class DocumentModel { ) { let visitorResult = {}; if (!visitorName) { - /* tslint:disable no-console */ + /* eslint-disable-next-line no-console */ console.warn('Invalid or empty RootNodeVisitor name.'); } try { @@ -656,6 +656,7 @@ export class DocumentModel { const exsitingMap: { [componentName: string]: boolean } = {}; for (const node of this._nodesMap.values()) { const { componentName } = node || {}; + if (componentName === 'Slot') continue; if (!exsitingMap[componentName]) { exsitingMap[componentName] = true; if (node.componentMeta?.npm?.package) { diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index d0965ccf6..4af456ab5 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -933,7 +933,7 @@ export class Node { return this.props; } - onChildrenChange(fn: (param?: { type: string, node: Node }) => void): (() => void) | undefined { + onChildrenChange(fn: (param?: { type: string; node: Node }) => void): (() => void) | undefined { const wrappedFunc = wrapWithEventSwitch(fn); return this.children?.onChange(wrappedFunc); } diff --git a/packages/designer/src/document/node/props/prop.ts b/packages/designer/src/document/node/props/prop.ts index a558aa70a..4c83a4d76 100644 --- a/packages/designer/src/document/node/props/prop.ts +++ b/packages/designer/src/document/node/props/prop.ts @@ -8,6 +8,7 @@ import { TransformStage } from '../transform-stage'; const { set: mobxSet, isObservableArray } = mobx; export const UNSET = Symbol.for('unset'); +// eslint-disable-next-line no-redeclare export type UNSET = typeof UNSET; export interface IPropParent { @@ -381,10 +382,11 @@ export class Prop implements IPropParent { @computed private get items(): Prop[] | null { if (this._items) return this._items; return runInAction(() => { - let items: Prop[] | null = []; + let items: Prop[] | null = null; if (this._type === 'list') { const data = this._value; for (const item of data) { + items = items || []; items.push(new Prop(this, item)); } this._maps = null; @@ -394,6 +396,7 @@ export class Prop implements IPropParent { const keys = Object.keys(data); for (const key of keys) { const prop = new Prop(this, data[key], key); + items = items || []; items.push(prop); maps.set(key, prop); } @@ -526,7 +529,8 @@ export class Prop implements IPropParent { this.setValue([]); } const prop = new Prop(this, value); - this.items!.push(prop); + this._items = this._items || []; + this._items.push(prop); return prop; } diff --git a/packages/designer/src/simulator.ts b/packages/designer/src/simulator.ts index 5b3970ee1..d0b73ce30 100644 --- a/packages/designer/src/simulator.ts +++ b/packages/designer/src/simulator.ts @@ -5,6 +5,7 @@ import { BuiltinSimulatorRenderer } from './builtin-simulator/renderer'; import { Node, ParentalNode } from './document'; export type AutoFit = '100%'; +// eslint-disable-next-line no-redeclare export const AutoFit = '100%'; export interface IViewport extends IScrollable { diff --git a/packages/designer/src/utils/logger.ts b/packages/designer/src/utils/logger.ts index 21ff230a6..47ec22c6f 100644 --- a/packages/designer/src/utils/logger.ts +++ b/packages/designer/src/utils/logger.ts @@ -2,6 +2,6 @@ import Logger, { Level } from 'zen-logger'; export { Logger }; -export function getLogger(config: { level: Level, bizName: string }): Logger { +export function getLogger(config: { level: Level; bizName: string }): Logger { return new Logger(config); } diff --git a/packages/designer/tests/document/document-model/__snapshots__/document-model.test.ts.snap b/packages/designer/tests/document/document-model/__snapshots__/document-model.test.ts.snap index a12a521f6..f3f5d4a50 100644 --- a/packages/designer/tests/document/document-model/__snapshots__/document-model.test.ts.snap +++ b/packages/designer/tests/document/document-model/__snapshots__/document-model.test.ts.snap @@ -79,6 +79,7 @@ Object { "__slot__extraContent": false, "__slot__logo": false, "__slot__tab": false, + "__style__": Object {}, "action": "", "content": "", "crumb": "", @@ -94,6 +95,7 @@ Object { "condition": true, "id": "node_k1ow3cbf", "props": Object { + "__style__": Object {}, "behavior": "NORMAL", "content": Object { "en_US": "Title", @@ -142,6 +144,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "addonAfter": Object { "type": "i18n", @@ -219,6 +222,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "addonAfter": Object { "type": "i18n", @@ -292,6 +296,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "addonAfter": Object { "type": "i18n", @@ -364,6 +369,7 @@ Object { "id": "node_k1ow3cbx", "isLocked": false, "props": Object { + "__style__": Object {}, "colSpan": "", "fieldId": "column_k1p1bnjm", }, @@ -380,6 +386,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "addonAfter": Object { "type": "i18n", @@ -453,6 +460,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "autoWidth": true, "behavior": "NORMAL", @@ -545,6 +553,7 @@ Object { "id": "node_k1ow3cby", "isLocked": false, "props": Object { + "__style__": Object {}, "colSpan": "", "fieldId": "column_k1p1bnjn", }, @@ -558,6 +567,7 @@ Object { "id": "node_k1ow3cbw", "isLocked": false, "props": Object { + "__style__": Object {}, "columnGap": "20", "fieldId": "columns_k1ow3h1v", "layout": "6:6", @@ -628,6 +638,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "addonAfter": Object { "type": "i18n", @@ -705,6 +716,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "addonAfter": Object { "type": "i18n", @@ -777,6 +789,7 @@ Object { "id": "node_k1ow3cc6", "isLocked": false, "props": Object { + "__style__": Object {}, "colSpan": "", "fieldId": "column_k1p1bnjo", }, @@ -793,6 +806,7 @@ Object { "isLocked": false, "props": Object { "__category__": "form", + "__style__": Object {}, "__useMediator": "value", "addonAfter": Object { "type": "i18n", @@ -865,6 +879,7 @@ Object { "id": "node_k1ow3cc7", "isLocked": false, "props": Object { + "__style__": Object {}, "colSpan": "", "fieldId": "column_k1p1bnjp", }, @@ -878,6 +893,7 @@ Object { "id": "node_k1ow3cc5", "isLocked": false, "props": Object { + "__style__": Object {}, "columnGap": "20", "fieldId": "columns_k1ow3h22", "layout": "6:6", @@ -1006,6 +1022,7 @@ Object { "value": Array [ Object { "componentName": "Text", + "props": Object {}, }, ], }, @@ -1035,6 +1052,7 @@ Object { "behavior": "NORMAL", "className": "div_kgaqfbm9", "customClassName": "", + "events": Object {}, "fieldId": "div_k1ow3h1o", "useFieldIdAsDomId": false, }, @@ -1049,6 +1067,7 @@ Object { "id": "form", "isLocked": false, "props": Object { + "__style__": Object {}, "autoUnmount": true, "autoValidate": true, "behavior": "NORMAL", @@ -1057,6 +1076,7 @@ Object { "variable": "state.formData", }, "fieldId": "form", + "fieldOptions": Object {}, "labelAlign": "top", "obj": Object { "a": 1, @@ -1117,6 +1137,7 @@ Object { "globalConfig": Object { "fit": Object { "compiled": "", + "error": Object {}, "source": "", "type": "js", }, @@ -1175,6 +1196,7 @@ Object.keys(module.exports).forEach(function(item) { }, "props": Object { "className": "page_kgaqfbm4", + "containerStyle": Object {}, "extensions": Object { "启用页头": true, }, diff --git a/packages/designer/tests/document/node/props/prop.test.ts b/packages/designer/tests/document/node/props/prop.test.ts index 3e52f92a9..9ee0058ab 100644 --- a/packages/designer/tests/document/node/props/prop.test.ts +++ b/packages/designer/tests/document/node/props/prop.test.ts @@ -247,6 +247,8 @@ describe('Prop 类测试', () => { type: 'JSExpression', value: 'state.a', }, + emptyArr: [], + emptyObj: {}, z: { z1: 1, z2: 'str', @@ -258,7 +260,7 @@ describe('Prop 类测试', () => { }); it('items / get', async () => { - expect(prop.size).toBe(5); + expect(prop.size).toBe(7); expect(prop.get('a').getValue()).toBe(1); expect(prop.get('b').getValue()).toBe('str'); @@ -289,6 +291,10 @@ describe('Prop 类测试', () => { const newlyCreatedNestedProp2 = prop.get('m.m2', true); // .m2 的值为 undefined,导出时将会被移除 expect(prop.get('m').getValue()).toEqual({ m1: 'newlyCreatedNestedProp' }); + + // 对于空值的 list / map 类型,_items 应该为 null + expect(prop.get('emptyArr')._items).toBeNull(); + expect(prop.get('emptyObj')._items).toBeNull(); }); it('export', () => { @@ -300,6 +306,8 @@ describe('Prop 类测试', () => { type: 'JSExpression', value: 'state.a', }, + emptyArr: [], + emptyObj: {}, z: { z1: 1, z2: 'str', @@ -348,19 +356,19 @@ describe('Prop 类测试', () => { for (const item of prop) { mockedFn(); } - expect(mockedFn).toHaveBeenCalledTimes(5); + expect(mockedFn).toHaveBeenCalledTimes(7); mockedFn.mockClear(); prop.forEach((item) => { mockedFn(); }); - expect(mockedFn).toHaveBeenCalledTimes(5); + expect(mockedFn).toHaveBeenCalledTimes(7); mockedFn.mockClear(); prop.map((item) => { return mockedFn(); }); - expect(mockedFn).toHaveBeenCalledTimes(5); + expect(mockedFn).toHaveBeenCalledTimes(7); mockedFn.mockClear(); }); diff --git a/packages/editor-core/package.json b/packages/editor-core/package.json index 4433644c1..c2970972d 100644 --- a/packages/editor-core/package.json +++ b/packages/editor-core/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-editor-core", - "version": "1.0.74", + "version": "1.0.76", "description": "Core Api for Ali lowCode engine", "license": "MIT", "main": "lib/index.js", @@ -13,8 +13,8 @@ "build": "build-scripts build --skip-demo" }, "dependencies": { - "@ali/lowcode-types": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-types": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "@alifd/next": "^1.19.16", "classnames": "^2.2.6", "debug": "^4.1.1", diff --git a/packages/editor-skeleton/package.json b/packages/editor-skeleton/package.json index 23b930eda..ff67a632f 100644 --- a/packages/editor-skeleton/package.json +++ b/packages/editor-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-editor-skeleton", - "version": "1.0.74", + "version": "1.0.76", "description": "alibaba lowcode editor skeleton", "main": "lib/index.js", "module": "es/index.js", @@ -17,10 +17,10 @@ "editor" ], "dependencies": { - "@ali/lowcode-designer": "1.0.74", - "@ali/lowcode-editor-core": "1.0.74", - "@ali/lowcode-types": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-designer": "1.0.76", + "@ali/lowcode-editor-core": "1.0.76", + "@ali/lowcode-types": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "@alifd/next": "^1.20.12", "classnames": "^2.2.6", "react": "^16.8.1", diff --git a/packages/engine/package.json b/packages/engine/package.json index 92c6c3255..e0d5b36b0 100644 --- a/packages/engine/package.json +++ b/packages/engine/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-engine", - "version": "1.0.74", + "version": "1.0.76", "description": "Universal API for AliLowCode engine", "main": "lib/engine-core.js", "module": "es/engine-core.js", @@ -18,13 +18,13 @@ }, "license": "MIT", "dependencies": { - "@ali/lowcode-designer": "1.0.74", - "@ali/lowcode-editor-core": "1.0.74", - "@ali/lowcode-editor-skeleton": "1.0.74", + "@ali/lowcode-designer": "1.0.76", + "@ali/lowcode-editor-core": "1.0.76", + "@ali/lowcode-editor-skeleton": "1.0.76", "@ali/lowcode-engine-ext": "^1.0.0", - "@ali/lowcode-plugin-designer": "1.0.74", - "@ali/lowcode-plugin-outline-pane": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-plugin-designer": "1.0.76", + "@ali/lowcode-plugin-outline-pane": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "@alifd/next": "^1.19.12", "react": "^16.8.1", "react-dom": "^16.8.1" diff --git a/packages/ignitor/package.json b/packages/ignitor/package.json index 85cd7d1d2..121678a5d 100644 --- a/packages/ignitor/package.json +++ b/packages/ignitor/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-ignitor", - "version": "1.0.74", + "version": "1.0.76", "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 24855b8cf..0f577efaa 100644 --- a/packages/plugin-designer/package.json +++ b/packages/plugin-designer/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-plugin-designer", - "version": "1.0.74", + "version": "1.0.76", "description": "alibaba lowcode editor designer plugin", "files": [ "es", @@ -18,7 +18,7 @@ ], "author": "xiayang.xy", "dependencies": { - "@ali/lowcode-editor-core": "1.0.74", + "@ali/lowcode-editor-core": "1.0.76", "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 687764ac0..acdcf3f5e 100644 --- a/packages/plugin-outline-pane/package.json +++ b/packages/plugin-outline-pane/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-plugin-outline-pane", - "version": "1.0.74", + "version": "1.0.76", "description": "Outline pane for Ali lowCode engine", "files": [ "es", @@ -12,10 +12,10 @@ "build": "build-scripts build --skip-demo" }, "dependencies": { - "@ali/lowcode-designer": "1.0.74", - "@ali/lowcode-editor-core": "1.0.74", - "@ali/lowcode-types": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-designer": "1.0.76", + "@ali/lowcode-editor-core": "1.0.76", + "@ali/lowcode-types": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "@alifd/next": "^1.19.16", "classnames": "^2.2.6", "react": "^16", diff --git a/packages/plugin-outline-pane/src/tree-node.ts b/packages/plugin-outline-pane/src/tree-node.ts index 07a2debd2..02d042258 100644 --- a/packages/plugin-outline-pane/src/tree-node.ts +++ b/packages/plugin-outline-pane/src/tree-node.ts @@ -11,7 +11,7 @@ export default class TreeNode { /** * 是否可以展开 */ - @computed get expandable(): boolean { + get expandable(): boolean { if (this.locked) return false; return this.hasChildren() || this.hasSlots() || this.dropDetail?.index != null; } diff --git a/packages/rax-renderer/package.json b/packages/rax-renderer/package.json index dd2a8c204..64a526ae2 100644 --- a/packages/rax-renderer/package.json +++ b/packages/rax-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-rax-renderer", - "version": "1.0.74", + "version": "1.0.76", "description": "Rax renderer for Ali lowCode engine", "main": "lib/index.js", "module": "es/index.js", @@ -30,8 +30,8 @@ "build": "build-scripts build" }, "dependencies": { - "@ali/lowcode-renderer-core": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-renderer-core": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "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 e64cb8ee7..4f2ad4c6d 100644 --- a/packages/rax-simulator-renderer/package.json +++ b/packages/rax-simulator-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-rax-simulator-renderer", - "version": "1.0.74", + "version": "1.0.76", "description": "rax simulator renderer for alibaba lowcode designer", "main": "lib/index.js", "module": "es/index.js", @@ -11,10 +11,10 @@ "cloud-build": "build-scripts build --skip-demo" }, "dependencies": { - "@ali/lowcode-designer": "1.0.74", - "@ali/lowcode-rax-renderer": "1.0.74", - "@ali/lowcode-types": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-designer": "1.0.76", + "@ali/lowcode-rax-renderer": "1.0.76", + "@ali/lowcode-types": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "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 58931dc19..2f4cd1c90 100644 --- a/packages/react-renderer/package.json +++ b/packages/react-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-react-renderer", - "version": "1.0.74", + "version": "1.0.76", "description": "react renderer for ali lowcode engine", "main": "lib/index.js", "module": "es/index.js", @@ -23,7 +23,7 @@ "react" ], "dependencies": { - "@ali/lowcode-renderer-core": "1.0.74", + "@ali/lowcode-renderer-core": "1.0.76", "@alifd/next": "^1.21.16" }, "devDependencies": { diff --git a/packages/react-simulator-renderer/package.json b/packages/react-simulator-renderer/package.json index d7cff4858..5d14f744d 100644 --- a/packages/react-simulator-renderer/package.json +++ b/packages/react-simulator-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-react-simulator-renderer", - "version": "1.0.74", + "version": "1.0.76", "description": "react simulator renderer for alibaba lowcode designer", "main": "lib/index.js", "module": "es/index.js", @@ -13,10 +13,10 @@ "cloud-build": "NODE_OPTIONS=--max_old_space_size=8192 build-scripts build --skip-demo" }, "dependencies": { - "@ali/lowcode-designer": "1.0.74", - "@ali/lowcode-react-renderer": "1.0.74", - "@ali/lowcode-types": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-designer": "1.0.76", + "@ali/lowcode-react-renderer": "1.0.76", + "@ali/lowcode-types": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "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 a240bc77a..1ece95232 100644 --- a/packages/renderer-core/package.json +++ b/packages/renderer-core/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-renderer-core", - "version": "1.0.74", + "version": "1.0.76", "description": "renderer core", "license": "MIT", "main": "lib/index.js", @@ -17,8 +17,8 @@ "@ali/bzb-request": "^2.6.0-beta.13", "@ali/lib-mtop": "^2.5.1", "@ali/lowcode-datasource-engine": "^1.0.22", - "@ali/lowcode-types": "1.0.74", - "@ali/lowcode-utils": "1.0.74", + "@ali/lowcode-types": "1.0.76", + "@ali/lowcode-utils": "1.0.76", "classnames": "^2.2.6", "debug": "^4.1.1", "fetch-jsonp": "^1.1.3", diff --git a/packages/renderer-core/src/hoc/leaf.tsx b/packages/renderer-core/src/hoc/leaf.tsx index 979e09e34..abc92acd3 100644 --- a/packages/renderer-core/src/hoc/leaf.tsx +++ b/packages/renderer-core/src/hoc/leaf.tsx @@ -218,6 +218,8 @@ export function leafWrapper(Comp: types.IBaseRenderer, { nodeChildren: null, childrenInState: false, visible: !hidden, + nodeCacheProps: {}, + nodeProps: {}, }; } @@ -349,11 +351,11 @@ export function leafWrapper(Comp: types.IBaseRenderer, { this.curEventLeaf = _leaf; } - this.setState({ - nodeChildren: null, - nodeProps: {}, - childrenInState: false, - }); + const { + visible, + ...resetState + } = this.defaultState; + this.setState(resetState); } /** 监听参数变化 */ @@ -378,23 +380,22 @@ export function leafWrapper(Comp: types.IBaseRenderer, { return; } this.beforeRender(RerenderType.PropsChanged); + const state = this.state; + const nodeCacheProps = state.nodeCacheProps; const nodeProps = getProps(node?.export?.(TransformStage.Render) as types.ISchema, scope, Comp, componentInfo); - const preNodeProps = this.state.nodeProps; - const newNodeProps = { - ...preNodeProps, - ...nodeProps, - }; - if (key && !(key in newNodeProps) && (key in this.props)) { + if (key && !(key in nodeProps) && (key in this.props)) { // 当 key 在 this.props 中时,且不存在在计算值中,需要用 newValue 覆盖掉 this.props 的取值 - newNodeProps[key] = newValue; + nodeCacheProps[key] = newValue; } - __debug(`${leaf?.componentName}[${this.props.componentId}] component trigger onPropsChange!`, newNodeProps); + __debug(`${leaf?.componentName}[${this.props.componentId}] component trigger onPropsChange!`, nodeProps, nodeCacheProps, key, newValue); this.setState('children' in nodeProps ? { nodeChildren: nodeProps.children, - nodeProps: newNodeProps, + nodeProps, childrenInState: true, + nodeCacheProps, } : { - nodeProps: newNodeProps, + nodeProps, + nodeCacheProps, }); }); @@ -497,6 +498,7 @@ export function leafWrapper(Comp: types.IBaseRenderer, { const compProps = { ...rest, + ...(this.state.nodeCacheProps || {}), ...(this.state.nodeProps || {}), children: [], __id: this.props.componentId, diff --git a/packages/types/package.json b/packages/types/package.json index fa49360e6..761de962d 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-types", - "version": "1.0.74", + "version": "1.0.76", "description": "Types for Ali lowCode engine", "files": [ "es", diff --git a/packages/utils/package.json b/packages/utils/package.json index dbf04371d..671cb6e2a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-utils", - "version": "1.0.74", + "version": "1.0.76", "description": "Utils for Ali lowCode engine", "files": [ "es", @@ -12,7 +12,7 @@ "build": "build-scripts build --skip-demo" }, "dependencies": { - "@ali/lowcode-types": "1.0.74", + "@ali/lowcode-types": "1.0.76", "@alifd/next": "^1.19.16", "lodash": "^4.17.21", "react": "^16" diff --git a/templates/README.md b/templates/README.md deleted file mode 100644 index 8a19be8bd..000000000 --- a/templates/README.md +++ /dev/null @@ -1,2 +0,0 @@ -TODO ---- diff --git a/templates/_tsconfig.json b/templates/_tsconfig.json deleted file mode 100644 index c37b76ecc..000000000 --- a/templates/_tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "lib" - }, - "include": [ - "./src/" - ] -} diff --git a/templates/build.json b/templates/build.json deleted file mode 100644 index 49a393b6b..000000000 --- a/templates/build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "plugins": [ - [ - "build-plugin-component" - ] - ] -} diff --git a/templates/package.json b/templates/package.json deleted file mode 100644 index f5691c9ea..000000000 --- a/templates/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@ali/lowcode-engine-", - "version": "0.0.0", - "description": "xxx for Ali lowCode engine", - "main": "lib/index.js", - "files": [ - "lib" - ], - "scripts": { - "build": "tsc", - "test": "ava", - "test:snapshot": "ava --update-snapshots" - }, - "ava": { - "compileEnhancements": false, - "snapshotDir": "test/fixtures/__snapshots__", - "extensions": [ - "ts" - ], - "require": [ - "ts-node/register" - ] - }, - "license": "MIT" -} diff --git a/templates/src/index.d.ts b/templates/src/index.d.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/templates/src/index.js b/templates/src/index.js deleted file mode 100644 index 9517d2edf..000000000 --- a/templates/src/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; -// -// # sourceMappingURL=index.js.map diff --git a/templates/src/index.js.map b/templates/src/index.js.map deleted file mode 100644 index 67b67fe20..000000000 --- a/templates/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,EAAE"} \ No newline at end of file diff --git a/templates/src/index.ts b/templates/src/index.ts deleted file mode 100644 index 8337712ea..000000000 --- a/templates/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -// diff --git a/templates/test/foobar.ts b/templates/test/foobar.ts deleted file mode 100644 index 7a14c4b2d..000000000 --- a/templates/test/foobar.ts +++ /dev/null @@ -1,5 +0,0 @@ -import test from 'ava'; - -test('foobar', t => { - t.pass(); -});