diff --git a/packages/core/package.json b/packages/core/package.json index 4956d73e78..6bdf67d4b3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -44,7 +44,7 @@ "@types/json-schema": "^7.0.7", "ajv": "^6.7.0", "core-js-pure": "^3.6.5", - "json-schema-merge-allof": "^0.6.0", + "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.0", "lodash": "^4.17.15", "lodash-es": "^4.17.15", diff --git a/packages/core/src/utils.js b/packages/core/src/utils.js index 963f2022f7..c83fd73fac 100644 --- a/packages/core/src/utils.js +++ b/packages/core/src/utils.js @@ -755,39 +755,9 @@ export function retrieveSchema(schema, rootSchema = {}, formData = {}) { return resolveCondition(schema, rootSchema, formData); } - // For each level of the dependency, we need to recursively determine the appropriate resolved schema given the current state of formData. - // Otherwise, nested allOf subschemas will not be correctly displayed. - if (resolvedSchema.properties) { - const properties = {}; - - Object.entries(resolvedSchema.properties).forEach(entries => { - const propName = entries[0]; - const propSchema = entries[1]; - const rawPropData = formData && formData[propName]; - const propData = isObject(rawPropData) ? rawPropData : {}; - const resolvedPropSchema = retrieveSchema( - propSchema, - rootSchema, - propData - ); - - properties[propName] = resolvedPropSchema; - - if ( - propSchema !== resolvedPropSchema && - resolvedSchema.properties !== properties - ) { - resolvedSchema = { ...resolvedSchema, properties }; - } - }); - } - if ("allOf" in schema) { try { - resolvedSchema = mergeAllOf({ - ...resolvedSchema, - allOf: resolvedSchema.allOf, - }); + resolvedSchema = mergeAllOf(resolvedSchema, { deep: false }); } catch (e) { console.warn("could not merge subschemas in allOf:\n" + e); const { allOf, ...resolvedSchemaWithoutAllOf } = resolvedSchema; diff --git a/packages/core/test/utils_test.js b/packages/core/test/utils_test.js index 005e287731..3d7898628e 100644 --- a/packages/core/test/utils_test.js +++ b/packages/core/test/utils_test.js @@ -2671,14 +2671,52 @@ describe("utils", () => { title: "Breed name", type: "string", }, - Spots: { - default: "small", - enum: ["large", "small"], - title: "Spots", - type: "string", - }, }, - required: ["BreedName", "Spots"], + allOf: [ + { + if: { + required: ["BreedName"], + properties: { + BreedName: { + const: "Alsatian", + }, + }, + }, + then: { + properties: { + Fur: { + default: "brown", + enum: ["black", "brown"], + title: "Fur", + type: "string", + }, + }, + required: ["Fur"], + }, + }, + { + if: { + required: ["BreedName"], + properties: { + BreedName: { + const: "Dalmation", + }, + }, + }, + then: { + properties: { + Spots: { + default: "small", + enum: ["large", "small"], + title: "Spots", + type: "string", + }, + }, + required: ["Spots"], + }, + }, + ], + required: ["BreedName"], title: "Breed", }, }, diff --git a/packages/playground/package.json b/packages/playground/package.json index f7668b5b03..981ac52b4b 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -54,7 +54,6 @@ "core-js": "^3.19.2", "dayjs": "^1.8.28", "framer-motion": "^5.5.5", - "json-schema-merge-allof": "^0.6.0", "jss": "^10.0.3", "less": "^3.11.3", "less-loader": "^5.0.0",