Skip to content

Commit 44bcb44

Browse files
committed
fix(lib): 修复anyof 默认值计算可能丢失属性
fix #108
1 parent 9ae2fe5 commit 44bcb44

File tree

2 files changed

+25
-16
lines changed

2 files changed

+25
-16
lines changed

packages/lib/utils/schema/getDefaultFormState.js

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -101,29 +101,36 @@ function computeDefaults(
101101
rootSchema,
102102
formData
103103
);
104-
if (schema.properties && matchSchema.properties) {
105-
// 对象 oneOf 需要合并原属性和 oneOf 属性
106-
const mergeSchema = mergeObjects(schema, matchSchema);
107-
delete mergeSchema.oneOf;
108-
schema = mergeSchema;
109-
} else {
110-
schema = matchSchema;
111-
}
104+
105+
schema = mergeObjects(schema, matchSchema);
106+
delete schema.oneOf;
107+
108+
// if (schema.properties && matchSchema.properties) {
109+
// // 对象 oneOf 需要合并原属性和 oneOf 属性
110+
// const mergeSchema = mergeObjects(schema, matchSchema);
111+
// delete mergeSchema.oneOf;
112+
// schema = mergeSchema;
113+
// } else {
114+
// schema = matchSchema;
115+
// }
112116
} else if ('anyOf' in schema) {
113117
const matchSchema = retrieveSchema(
114118
schema.anyOf[getMatchingOption(formData, schema.anyOf, rootSchema)],
115119
rootSchema,
116120
formData
117121
);
118122

119-
if (schema.properties && matchSchema.properties) {
120-
// 对象 anyOf 需要合并原属性和 anyOf 属性
121-
const mergeSchema = mergeObjects(schema, matchSchema);
122-
delete mergeSchema.anyOf;
123-
schema = mergeSchema;
124-
} else {
125-
schema = matchSchema;
126-
}
123+
schema = mergeObjects(schema, matchSchema);
124+
delete schema.anyOf;
125+
126+
// if (schema.properties && matchSchema.properties) {
127+
// // 对象 anyOf 需要合并原属性和 anyOf 属性
128+
// const mergeSchema = mergeObjects(schema, matchSchema);
129+
// delete mergeSchema.anyOf;
130+
// schema = mergeSchema;
131+
// } else {
132+
// schema = matchSchema;
133+
// }
127134
}
128135
// Not defaults defined for this node, fallback to generic typed ones.
129136
if (typeof defaults === 'undefined') {

packages/lib/utils/utils.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ export function mergeSchemas(obj1, obj2) {
7171
export function mergeObjects(obj1, obj2, concatArrays = false) {
7272
// Recursively merge deeply nested objects.
7373
const preAcc = Object.assign({}, obj1); // Prevent mutation of source object.
74+
if (!isObject(obj2)) return preAcc;
75+
7476
return Object.keys(obj2).reduce((acc, key) => {
7577
const left = obj1 ? obj1[key] : {};
7678
const right = obj2[key];

0 commit comments

Comments
 (0)