diff --git a/Composer/packages/adaptive-form/src/components/fields/OneOfField/utils.ts b/Composer/packages/adaptive-form/src/components/fields/OneOfField/utils.ts index db9844a488..d93e944464 100644 --- a/Composer/packages/adaptive-form/src/components/fields/OneOfField/utils.ts +++ b/Composer/packages/adaptive-form/src/components/fields/OneOfField/utils.ts @@ -67,7 +67,11 @@ export function getOptions( const expression = (resolvedOneOf as JSONSchema7[]).find(({ $role }) => $role === 'expression'); const merged = merge({}, omit(schema, 'oneOf'), expression); - if (expression && (resolvedOneOf as JSONSchema7[]).some(({ properties, items }) => properties || items)) { + isNested = + isNested || + !!(expression && (resolvedOneOf as JSONSchema7[]).some(({ properties, items }) => properties || items)); + + if (expression && isNested) { options.push({ key: 'expression', text: formatMessage('Write an expression'), @@ -76,7 +80,6 @@ export function getOptions( schema: merged, }, }); - isNested = true; } return { options, isNested }; diff --git a/Composer/packages/adaptive-form/src/utils/__tests__/resolveFieldWidget.test.ts b/Composer/packages/adaptive-form/src/utils/__tests__/resolveFieldWidget.test.ts index 2c97235bf6..7dd5647f0a 100644 --- a/Composer/packages/adaptive-form/src/utils/__tests__/resolveFieldWidget.test.ts +++ b/Composer/packages/adaptive-form/src/utils/__tests__/resolveFieldWidget.test.ts @@ -215,7 +215,11 @@ describe('resolveFieldWidget', () => { it('returns OpenObjectField when additional properties are allowed', () => { const schema = { type: 'object' as const, - additionalProperties: true, + additionalProperties: { + type: 'string', + title: '', + description: '', + }, }; const { field: ReturnedField } = resolveFieldWidget({ schema }); diff --git a/Composer/packages/adaptive-form/src/utils/resolveFieldWidget.ts b/Composer/packages/adaptive-form/src/utils/resolveFieldWidget.ts index 8262c02af5..4b510dd410 100644 --- a/Composer/packages/adaptive-form/src/utils/resolveFieldWidget.ts +++ b/Composer/packages/adaptive-form/src/utils/resolveFieldWidget.ts @@ -135,7 +135,7 @@ export function resolveFieldWidget(params: { return { field: DefaultFields.ArrayField }; } case 'object': - if (schema.additionalProperties) { + if (typeof schema.additionalProperties === 'object') { return { field: DefaultFields.OpenObjectField }; } else if (!schema.properties) { if (showIntellisense && isOneOf) {