diff --git a/packages/utils/src/schema/retrieveSchema.ts b/packages/utils/src/schema/retrieveSchema.ts index 62050dca7d..8d00d02f33 100644 --- a/packages/utils/src/schema/retrieveSchema.ts +++ b/packages/utils/src/schema/retrieveSchema.ts @@ -323,7 +323,8 @@ export function retrieveSchemaInternal< if (ALL_OF_KEY in resolvedSchema) { // resolve allOf schemas if (expandAllBranches) { - return [...(resolvedSchema.allOf as S[])]; + const { allOf, ...restOfSchema } = resolvedSchema; + return [...(allOf as S[]), restOfSchema as S]; } try { resolvedSchema = mergeAllOf(resolvedSchema, { diff --git a/packages/utils/test/schema/retrieveSchemaTest.ts b/packages/utils/test/schema/retrieveSchemaTest.ts index 5a63222b72..0592413478 100644 --- a/packages/utils/test/schema/retrieveSchemaTest.ts +++ b/packages/utils/test/schema/retrieveSchemaTest.ts @@ -688,13 +688,18 @@ export default function retrieveSchemaTest(testValidator: TestValidatorType) { expect.any(Error) ); }); - it('should return allOf as individual schemas when expand all', () => { + it('should return allOf and top level schemas when expand all', () => { const schema: RJSFSchema = { + properties: { test: { type: 'string' } }, allOf: [{ type: 'string' }, { type: 'boolean' }], }; const rootSchema: RJSFSchema = { definitions: {} }; const formData = {}; - expect(retrieveSchemaInternal(testValidator, schema, rootSchema, formData, true)).toEqual(schema.allOf); + const { allOf, ...restOfSchema } = schema; + expect(retrieveSchemaInternal(testValidator, schema, rootSchema, formData, true)).toEqual([ + ...allOf!, + restOfSchema, + ]); }); it('should merge types with $ref in them', () => { const schema: RJSFSchema = {