mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-19 22:58:15 +00:00
fix: 修复空值的数组/对象的 _items 不为 null 的问题
This commit is contained in:
parent
54c8c51258
commit
3d8b31f121
@ -381,10 +381,11 @@ export class Prop implements IPropParent {
|
|||||||
@computed private get items(): Prop[] | null {
|
@computed private get items(): Prop[] | null {
|
||||||
if (this._items) return this._items;
|
if (this._items) return this._items;
|
||||||
return runInAction(() => {
|
return runInAction(() => {
|
||||||
let items: Prop[] | null = [];
|
let items: Prop[] | null = null;
|
||||||
if (this._type === 'list') {
|
if (this._type === 'list') {
|
||||||
const data = this._value;
|
const data = this._value;
|
||||||
for (const item of data) {
|
for (const item of data) {
|
||||||
|
items = items || [];
|
||||||
items.push(new Prop(this, item));
|
items.push(new Prop(this, item));
|
||||||
}
|
}
|
||||||
this._maps = null;
|
this._maps = null;
|
||||||
@ -394,6 +395,7 @@ export class Prop implements IPropParent {
|
|||||||
const keys = Object.keys(data);
|
const keys = Object.keys(data);
|
||||||
for (const key of keys) {
|
for (const key of keys) {
|
||||||
const prop = new Prop(this, data[key], key);
|
const prop = new Prop(this, data[key], key);
|
||||||
|
items = items || [];
|
||||||
items.push(prop);
|
items.push(prop);
|
||||||
maps.set(key, prop);
|
maps.set(key, prop);
|
||||||
}
|
}
|
||||||
@ -526,7 +528,8 @@ export class Prop implements IPropParent {
|
|||||||
this.setValue([]);
|
this.setValue([]);
|
||||||
}
|
}
|
||||||
const prop = new Prop(this, value);
|
const prop = new Prop(this, value);
|
||||||
this.items!.push(prop);
|
this._items = this._items || [];
|
||||||
|
this._items.push(prop);
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -79,6 +79,7 @@ Object {
|
|||||||
"__slot__extraContent": false,
|
"__slot__extraContent": false,
|
||||||
"__slot__logo": false,
|
"__slot__logo": false,
|
||||||
"__slot__tab": false,
|
"__slot__tab": false,
|
||||||
|
"__style__": Object {},
|
||||||
"action": "",
|
"action": "",
|
||||||
"content": "",
|
"content": "",
|
||||||
"crumb": "",
|
"crumb": "",
|
||||||
@ -94,6 +95,7 @@ Object {
|
|||||||
"condition": true,
|
"condition": true,
|
||||||
"id": "node_k1ow3cbf",
|
"id": "node_k1ow3cbf",
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"behavior": "NORMAL",
|
"behavior": "NORMAL",
|
||||||
"content": Object {
|
"content": Object {
|
||||||
"en_US": "Title",
|
"en_US": "Title",
|
||||||
@ -142,6 +144,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"addonAfter": Object {
|
"addonAfter": Object {
|
||||||
"type": "i18n",
|
"type": "i18n",
|
||||||
@ -219,6 +222,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"addonAfter": Object {
|
"addonAfter": Object {
|
||||||
"type": "i18n",
|
"type": "i18n",
|
||||||
@ -292,6 +296,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"addonAfter": Object {
|
"addonAfter": Object {
|
||||||
"type": "i18n",
|
"type": "i18n",
|
||||||
@ -364,6 +369,7 @@ Object {
|
|||||||
"id": "node_k1ow3cbx",
|
"id": "node_k1ow3cbx",
|
||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"colSpan": "",
|
"colSpan": "",
|
||||||
"fieldId": "column_k1p1bnjm",
|
"fieldId": "column_k1p1bnjm",
|
||||||
},
|
},
|
||||||
@ -380,6 +386,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"addonAfter": Object {
|
"addonAfter": Object {
|
||||||
"type": "i18n",
|
"type": "i18n",
|
||||||
@ -453,6 +460,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"autoWidth": true,
|
"autoWidth": true,
|
||||||
"behavior": "NORMAL",
|
"behavior": "NORMAL",
|
||||||
@ -545,6 +553,7 @@ Object {
|
|||||||
"id": "node_k1ow3cby",
|
"id": "node_k1ow3cby",
|
||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"colSpan": "",
|
"colSpan": "",
|
||||||
"fieldId": "column_k1p1bnjn",
|
"fieldId": "column_k1p1bnjn",
|
||||||
},
|
},
|
||||||
@ -558,6 +567,7 @@ Object {
|
|||||||
"id": "node_k1ow3cbw",
|
"id": "node_k1ow3cbw",
|
||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"columnGap": "20",
|
"columnGap": "20",
|
||||||
"fieldId": "columns_k1ow3h1v",
|
"fieldId": "columns_k1ow3h1v",
|
||||||
"layout": "6:6",
|
"layout": "6:6",
|
||||||
@ -628,6 +638,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"addonAfter": Object {
|
"addonAfter": Object {
|
||||||
"type": "i18n",
|
"type": "i18n",
|
||||||
@ -705,6 +716,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"addonAfter": Object {
|
"addonAfter": Object {
|
||||||
"type": "i18n",
|
"type": "i18n",
|
||||||
@ -777,6 +789,7 @@ Object {
|
|||||||
"id": "node_k1ow3cc6",
|
"id": "node_k1ow3cc6",
|
||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"colSpan": "",
|
"colSpan": "",
|
||||||
"fieldId": "column_k1p1bnjo",
|
"fieldId": "column_k1p1bnjo",
|
||||||
},
|
},
|
||||||
@ -793,6 +806,7 @@ Object {
|
|||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"__category__": "form",
|
"__category__": "form",
|
||||||
|
"__style__": Object {},
|
||||||
"__useMediator": "value",
|
"__useMediator": "value",
|
||||||
"addonAfter": Object {
|
"addonAfter": Object {
|
||||||
"type": "i18n",
|
"type": "i18n",
|
||||||
@ -865,6 +879,7 @@ Object {
|
|||||||
"id": "node_k1ow3cc7",
|
"id": "node_k1ow3cc7",
|
||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"colSpan": "",
|
"colSpan": "",
|
||||||
"fieldId": "column_k1p1bnjp",
|
"fieldId": "column_k1p1bnjp",
|
||||||
},
|
},
|
||||||
@ -878,6 +893,7 @@ Object {
|
|||||||
"id": "node_k1ow3cc5",
|
"id": "node_k1ow3cc5",
|
||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"columnGap": "20",
|
"columnGap": "20",
|
||||||
"fieldId": "columns_k1ow3h22",
|
"fieldId": "columns_k1ow3h22",
|
||||||
"layout": "6:6",
|
"layout": "6:6",
|
||||||
@ -1006,6 +1022,7 @@ Object {
|
|||||||
"value": Array [
|
"value": Array [
|
||||||
Object {
|
Object {
|
||||||
"componentName": "Text",
|
"componentName": "Text",
|
||||||
|
"props": Object {},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -1035,6 +1052,7 @@ Object {
|
|||||||
"behavior": "NORMAL",
|
"behavior": "NORMAL",
|
||||||
"className": "div_kgaqfbm9",
|
"className": "div_kgaqfbm9",
|
||||||
"customClassName": "",
|
"customClassName": "",
|
||||||
|
"events": Object {},
|
||||||
"fieldId": "div_k1ow3h1o",
|
"fieldId": "div_k1ow3h1o",
|
||||||
"useFieldIdAsDomId": false,
|
"useFieldIdAsDomId": false,
|
||||||
},
|
},
|
||||||
@ -1049,6 +1067,7 @@ Object {
|
|||||||
"id": "form",
|
"id": "form",
|
||||||
"isLocked": false,
|
"isLocked": false,
|
||||||
"props": Object {
|
"props": Object {
|
||||||
|
"__style__": Object {},
|
||||||
"autoUnmount": true,
|
"autoUnmount": true,
|
||||||
"autoValidate": true,
|
"autoValidate": true,
|
||||||
"behavior": "NORMAL",
|
"behavior": "NORMAL",
|
||||||
@ -1057,6 +1076,7 @@ Object {
|
|||||||
"variable": "state.formData",
|
"variable": "state.formData",
|
||||||
},
|
},
|
||||||
"fieldId": "form",
|
"fieldId": "form",
|
||||||
|
"fieldOptions": Object {},
|
||||||
"labelAlign": "top",
|
"labelAlign": "top",
|
||||||
"obj": Object {
|
"obj": Object {
|
||||||
"a": 1,
|
"a": 1,
|
||||||
@ -1117,6 +1137,7 @@ Object {
|
|||||||
"globalConfig": Object {
|
"globalConfig": Object {
|
||||||
"fit": Object {
|
"fit": Object {
|
||||||
"compiled": "",
|
"compiled": "",
|
||||||
|
"error": Object {},
|
||||||
"source": "",
|
"source": "",
|
||||||
"type": "js",
|
"type": "js",
|
||||||
},
|
},
|
||||||
@ -1175,6 +1196,7 @@ Object.keys(module.exports).forEach(function(item) {
|
|||||||
},
|
},
|
||||||
"props": Object {
|
"props": Object {
|
||||||
"className": "page_kgaqfbm4",
|
"className": "page_kgaqfbm4",
|
||||||
|
"containerStyle": Object {},
|
||||||
"extensions": Object {
|
"extensions": Object {
|
||||||
"启用页头": true,
|
"启用页头": true,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -247,6 +247,8 @@ describe('Prop 类测试', () => {
|
|||||||
type: 'JSExpression',
|
type: 'JSExpression',
|
||||||
value: 'state.a',
|
value: 'state.a',
|
||||||
},
|
},
|
||||||
|
emptyArr: [],
|
||||||
|
emptyObj: {},
|
||||||
z: {
|
z: {
|
||||||
z1: 1,
|
z1: 1,
|
||||||
z2: 'str',
|
z2: 'str',
|
||||||
@ -258,7 +260,7 @@ describe('Prop 类测试', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('items / get', async () => {
|
it('items / get', async () => {
|
||||||
expect(prop.size).toBe(5);
|
expect(prop.size).toBe(7);
|
||||||
|
|
||||||
expect(prop.get('a').getValue()).toBe(1);
|
expect(prop.get('a').getValue()).toBe(1);
|
||||||
expect(prop.get('b').getValue()).toBe('str');
|
expect(prop.get('b').getValue()).toBe('str');
|
||||||
@ -289,6 +291,10 @@ describe('Prop 类测试', () => {
|
|||||||
const newlyCreatedNestedProp2 = prop.get('m.m2', true);
|
const newlyCreatedNestedProp2 = prop.get('m.m2', true);
|
||||||
// .m2 的值为 undefined,导出时将会被移除
|
// .m2 的值为 undefined,导出时将会被移除
|
||||||
expect(prop.get('m').getValue()).toEqual({ m1: 'newlyCreatedNestedProp' });
|
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', () => {
|
it('export', () => {
|
||||||
@ -300,6 +306,8 @@ describe('Prop 类测试', () => {
|
|||||||
type: 'JSExpression',
|
type: 'JSExpression',
|
||||||
value: 'state.a',
|
value: 'state.a',
|
||||||
},
|
},
|
||||||
|
emptyArr: [],
|
||||||
|
emptyObj: {},
|
||||||
z: {
|
z: {
|
||||||
z1: 1,
|
z1: 1,
|
||||||
z2: 'str',
|
z2: 'str',
|
||||||
@ -348,19 +356,19 @@ describe('Prop 类测试', () => {
|
|||||||
for (const item of prop) {
|
for (const item of prop) {
|
||||||
mockedFn();
|
mockedFn();
|
||||||
}
|
}
|
||||||
expect(mockedFn).toHaveBeenCalledTimes(5);
|
expect(mockedFn).toHaveBeenCalledTimes(7);
|
||||||
mockedFn.mockClear();
|
mockedFn.mockClear();
|
||||||
|
|
||||||
prop.forEach((item) => {
|
prop.forEach((item) => {
|
||||||
mockedFn();
|
mockedFn();
|
||||||
});
|
});
|
||||||
expect(mockedFn).toHaveBeenCalledTimes(5);
|
expect(mockedFn).toHaveBeenCalledTimes(7);
|
||||||
mockedFn.mockClear();
|
mockedFn.mockClear();
|
||||||
|
|
||||||
prop.map((item) => {
|
prop.map((item) => {
|
||||||
return mockedFn();
|
return mockedFn();
|
||||||
});
|
});
|
||||||
expect(mockedFn).toHaveBeenCalledTimes(5);
|
expect(mockedFn).toHaveBeenCalledTimes(7);
|
||||||
mockedFn.mockClear();
|
mockedFn.mockClear();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user