Skip to content

Commit 85704c3

Browse files
liujupingLeoYuan
authored andcommitted
feat: fix render-core leaf hoc component condition config should get from leaf exportSchema fn
1 parent 4fd7f27 commit 85704c3

File tree

10 files changed

+98
-27
lines changed

10 files changed

+98
-27
lines changed

packages/designer/src/document/node/props/props.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import { Prop, IPropParent, UNSET } from './prop';
55
import { Node } from '../node';
66
import { TransformStage } from '../transform-stage';
77

8+
interface ExtrasObject {
9+
[key: string]: any;
10+
}
11+
812
export const EXTRA_KEY_PREFIX = '___';
913
export function getConvertedExtraKey(key: string): string {
1014
if (!key) {
@@ -53,7 +57,7 @@ export class Props implements IPropParent {
5357

5458
@obx type: 'map' | 'list' = 'map';
5559

56-
constructor(owner: Node, value?: PropsMap | PropsList | null, extras?: object) {
60+
constructor(owner: Node, value?: PropsMap | PropsList | null, extras?: ExtrasObject) {
5761
makeObservable(this);
5862
this.owner = owner;
5963
if (Array.isArray(value)) {
@@ -70,7 +74,7 @@ export class Props implements IPropParent {
7074
}
7175

7276
@action
73-
import(value?: PropsMap | PropsList | null, extras?: object) {
77+
import(value?: PropsMap | PropsList | null, extras?: ExtrasObject) {
7478
const originItems = this.items;
7579
if (Array.isArray(value)) {
7680
this.type = 'list';
@@ -104,7 +108,7 @@ export class Props implements IPropParent {
104108
}
105109
}
106110

107-
export(stage: TransformStage = TransformStage.Save): { props?: PropsMap | PropsList; extras?: object } {
111+
export(stage: TransformStage = TransformStage.Save): { props?: PropsMap | PropsList; extras?: ExtrasObject } {
108112
stage = compatStage(stage);
109113
if (this.items.length < 1) {
110114
return {};

packages/designer/src/document/selection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export class Selection {
117117
/**
118118
* 获取选中的节点
119119
*/
120-
getNodes() {
120+
getNodes(): Node[] {
121121
const nodes = [];
122122
for (const id of this._selected) {
123123
const node = this.doc.getNode(id);

packages/renderer-core/jest.config.js

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,15 @@ const jestConfig = {
1414
transformIgnorePatterns: [
1515
`/node_modules/(?!${esModules})/`,
1616
],
17-
setupFiles: ['./tests/fixtures/unhandled-rejection.ts'],
17+
setupFiles: [
18+
'./tests/fixtures/unhandled-rejection.ts',
19+
'./tests/setup.ts',
20+
],
1821
moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
1922
collectCoverage: true,
2023
collectCoverageFrom: [
2124
'src/**/*.ts',
22-
'!src/**/*.d.ts',
23-
'!src/icons/**',
24-
'!src/locale/**',
25-
'!src/builtin-simulator/utils/**',
26-
'!src/plugin/sequencify.ts',
27-
'!src/document/node/exclusive-group.ts',
28-
'!src/document/node/props/value-to-source.ts',
29-
'!src/builtin-simulator/live-editing/live-editing.ts',
30-
'!src/designer/offset-observer.ts',
31-
'!src/designer/clipboard.ts',
32-
'!**/node_modules/**',
33-
'!**/vendor/**',
25+
'src/**/*.tsx',
3426
],
3527
};
3628

packages/renderer-core/src/hoc/leaf.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,11 +412,12 @@ export function leafWrapper(Comp: types.IBaseRenderComponent, {
412412
const node = leaf;
413413

414414
if (key === '___condition___') {
415-
const condition = parseData(newValue, scope);
415+
const { condition = true } = this.leaf?.export(TransformStage.Render) || {};
416+
const conditionValue = parseData(condition, scope);
416417
__debug(`key is ___condition___, change condition value to [${condition}]`);
417418
// 条件表达式改变
418419
this.setState({
419-
condition,
420+
condition: conditionValue,
420421
});
421422
return;
422423
}

packages/renderer-core/src/renderer/renderer.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ export default function rendererFactory(): IRenderComponent {
108108
if (SetComponent.patchedCatch) {
109109
return;
110110
}
111+
if (!SetComponent.prototype) {
112+
return;
113+
}
111114
SetComponent.patchedCatch = true;
112115

113116
// Rax 的 getDerivedStateFromError 有 BUG,这里先用 componentDidCatch 来替代

packages/renderer-core/tests/hoc/__snapshots__/leaf.test.tsx.snap

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,52 @@ exports[`leafWrapper base 1`] = `
2525
</div>
2626
`;
2727

28+
exports[`leafWrapper change ___condition___ props 1`] = `
29+
<div
30+
_leaf={
31+
Node {
32+
"emitter": EventEmitter {
33+
"_events": Object {
34+
"onChildrenChange": [Function],
35+
"onPropChange": [Function],
36+
"onVisibleChange": [Function],
37+
},
38+
"_eventsCount": 3,
39+
"_maxListeners": undefined,
40+
Symbol(kCapture): false,
41+
},
42+
"hasLoop": false,
43+
"schema": Object {},
44+
}
45+
}
46+
/>
47+
`;
48+
49+
exports[`leafWrapper change ___condition___ props, but not hidden component 1`] = `
50+
<div
51+
_leaf={
52+
Node {
53+
"emitter": EventEmitter {
54+
"_events": Object {
55+
"onChildrenChange": [Function],
56+
"onPropChange": [Function],
57+
"onVisibleChange": [Function],
58+
},
59+
"_eventsCount": 3,
60+
"_maxListeners": undefined,
61+
Symbol(kCapture): false,
62+
},
63+
"hasLoop": false,
64+
"schema": Object {},
65+
}
66+
}
67+
>
68+
<div>
69+
new content
70+
</div>
71+
</div>
72+
`;
73+
2874
exports[`leafWrapper change props 1`] = `
2975
<div
3076
_leaf={

packages/renderer-core/tests/hoc/leaf.test.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { leafWrapper } from '../../src/hoc/leaf';
66
import components from '../utils/components';
77
import Node from '../utils/node';
88

9-
109
const baseRenderer: any = {
1110
__debug () {},
1211
__getComponentProps (schema: any) {
@@ -71,8 +70,29 @@ describe('leafWrapper', () => {
7170
let tree = component.toJSON();
7271
expect(tree).toMatchSnapshot();
7372
});
74-
});
7573

74+
it('change ___condition___ props', () => {
75+
TextNode.schema.condition = false;
76+
TextNode.emitPropChange({
77+
key: '___condition___',
78+
newValue: false,
79+
} as any);
80+
81+
let tree = component.toJSON();
82+
expect(tree).toMatchSnapshot();
83+
});
84+
85+
it('change ___condition___ props, but not hidden component', () => {
86+
TextNode.schema.condition = true;
87+
TextNode.emitPropChange({
88+
key: '___condition___',
89+
newValue: false,
90+
} as any);
91+
92+
let tree = component.toJSON();
93+
expect(tree).toMatchSnapshot();
94+
})
95+
});
7696

7797
describe('loop', () => {
7898
const Div = leafWrapper(components.Div as any, {
@@ -105,4 +125,4 @@ describe('loop', () => {
105125
<Text _leaf={TextNode} content="content"></Text>
106126
</Div>
107127
);
108-
})
128+
});

packages/renderer-core/tests/renderer/renderer.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import renderer from 'react-test-renderer';
2+
import renderer from 'react-test-renderer/';
33
import schema from '../fixtures/schema/basic';
44
import '../utils/react-env-init';
55
import rendererFactory from '../../src/renderer/renderer';

packages/renderer-core/tests/setup.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,9 @@ jest.mock('zen-logger', () => {
99
__esModule: true,
1010
default: Logger,
1111
};
12-
});
12+
});
13+
14+
export const mockConsoleWarn = jest.fn();
15+
console.warn = mockConsoleWarn;
16+
17+
process.env.NODE_ENV = 'production';

packages/shell/src/selection.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ export default class Selection {
1818
/**
1919
* 返回选中的节点 id
2020
*/
21-
get selected() {
21+
get selected(): string[] {
2222
return this[selectionSymbol].selected;
2323
}
2424

2525
/**
2626
* return selected Node instance
2727
*/
28-
get node() {
28+
get node(): Node {
2929
return this.getNodes()[0];
3030
}
3131

@@ -81,7 +81,7 @@ export default class Selection {
8181
* 获取选中的节点实例
8282
* @returns
8383
*/
84-
getNodes() {
84+
getNodes(): Node[] {
8585
return this[selectionSymbol].getNodes().map((node: InnerNode) => Node.create(node));
8686
}
8787
}

0 commit comments

Comments
 (0)