diff --git a/packages/designer/src/document/node/props/props.ts b/packages/designer/src/document/node/props/props.ts index 01dbbb8b4..8c03c1e25 100644 --- a/packages/designer/src/document/node/props/props.ts +++ b/packages/designer/src/document/node/props/props.ts @@ -5,6 +5,10 @@ import { Prop, IPropParent, UNSET } from './prop'; import { Node } from '../node'; import { TransformStage } from '../transform-stage'; +interface ExtrasObject { + [key: string]: any; +} + export const EXTRA_KEY_PREFIX = '___'; export function getConvertedExtraKey(key: string): string { if (!key) { @@ -53,7 +57,7 @@ export class Props implements IPropParent { @obx type: 'map' | 'list' = 'map'; - constructor(owner: Node, value?: PropsMap | PropsList | null, extras?: object) { + constructor(owner: Node, value?: PropsMap | PropsList | null, extras?: ExtrasObject) { makeObservable(this); this.owner = owner; if (Array.isArray(value)) { @@ -70,7 +74,7 @@ export class Props implements IPropParent { } @action - import(value?: PropsMap | PropsList | null, extras?: object) { + import(value?: PropsMap | PropsList | null, extras?: ExtrasObject) { const originItems = this.items; if (Array.isArray(value)) { this.type = 'list'; @@ -104,7 +108,7 @@ export class Props implements IPropParent { } } - export(stage: TransformStage = TransformStage.Save): { props?: PropsMap | PropsList; extras?: object } { + export(stage: TransformStage = TransformStage.Save): { props?: PropsMap | PropsList; extras?: ExtrasObject } { stage = compatStage(stage); if (this.items.length < 1) { return {}; diff --git a/packages/designer/src/document/selection.ts b/packages/designer/src/document/selection.ts index f7383386f..4a7ad72cd 100644 --- a/packages/designer/src/document/selection.ts +++ b/packages/designer/src/document/selection.ts @@ -117,7 +117,7 @@ export class Selection { /** * 获取选中的节点 */ - getNodes() { + getNodes(): Node[] { const nodes = []; for (const id of this._selected) { const node = this.doc.getNode(id); diff --git a/packages/renderer-core/jest.config.js b/packages/renderer-core/jest.config.js index 4c28c1044..96b36f9d2 100644 --- a/packages/renderer-core/jest.config.js +++ b/packages/renderer-core/jest.config.js @@ -14,23 +14,15 @@ const jestConfig = { transformIgnorePatterns: [ `/node_modules/(?!${esModules})/`, ], - setupFiles: ['./tests/fixtures/unhandled-rejection.ts'], + setupFiles: [ + './tests/fixtures/unhandled-rejection.ts', + './tests/setup.ts', + ], moduleFileExtensions: ['ts', 'tsx', 'js', 'json'], collectCoverage: true, collectCoverageFrom: [ 'src/**/*.ts', - '!src/**/*.d.ts', - '!src/icons/**', - '!src/locale/**', - '!src/builtin-simulator/utils/**', - '!src/plugin/sequencify.ts', - '!src/document/node/exclusive-group.ts', - '!src/document/node/props/value-to-source.ts', - '!src/builtin-simulator/live-editing/live-editing.ts', - '!src/designer/offset-observer.ts', - '!src/designer/clipboard.ts', - '!**/node_modules/**', - '!**/vendor/**', + 'src/**/*.tsx', ], }; diff --git a/packages/renderer-core/src/hoc/leaf.tsx b/packages/renderer-core/src/hoc/leaf.tsx index e1bd66ec5..a4c529eab 100644 --- a/packages/renderer-core/src/hoc/leaf.tsx +++ b/packages/renderer-core/src/hoc/leaf.tsx @@ -412,11 +412,12 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, { const node = leaf; if (key === '___condition___') { - const condition = parseData(newValue, scope); + const { condition = true } = this.leaf?.export(TransformStage.Render) || {}; + const conditionValue = parseData(condition, scope); __debug(`key is ___condition___, change condition value to [${condition}]`); // 条件表达式改变 this.setState({ - condition, + condition: conditionValue, }); return; } diff --git a/packages/renderer-core/src/renderer/renderer.tsx b/packages/renderer-core/src/renderer/renderer.tsx index f3111176b..bd2b3df8b 100644 --- a/packages/renderer-core/src/renderer/renderer.tsx +++ b/packages/renderer-core/src/renderer/renderer.tsx @@ -108,6 +108,9 @@ export default function rendererFactory(): IRenderComponent { if (SetComponent.patchedCatch) { return; } + if (!SetComponent.prototype) { + return; + } SetComponent.patchedCatch = true; // Rax 的 getDerivedStateFromError 有 BUG,这里先用 componentDidCatch 来替代 diff --git a/packages/renderer-core/tests/hoc/__snapshots__/leaf.test.tsx.snap b/packages/renderer-core/tests/hoc/__snapshots__/leaf.test.tsx.snap index 591f768e2..dbdfd1c5b 100644 --- a/packages/renderer-core/tests/hoc/__snapshots__/leaf.test.tsx.snap +++ b/packages/renderer-core/tests/hoc/__snapshots__/leaf.test.tsx.snap @@ -25,6 +25,52 @@ exports[`leafWrapper base 1`] = ` `; +exports[`leafWrapper change ___condition___ props 1`] = ` +
+`; + +exports[`leafWrapper change ___condition___ props, but not hidden component 1`] = ` +