Skip to content

Commit 06bbb4b

Browse files
authored
Consider oneOf enum in array testers
Whenever we encounter an array we run a heuristic which determines whether the 'items' are shallow objects/values or some more complex objects. This is typically used to determine whether a compact table renderer or more complex element renderer shall be used. This heuristic is extended to consider 'oneOf's which model an enum to be suitable for table renderers.
1 parent 5bcb632 commit 06bbb4b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

packages/core/src/testers/testers.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,10 @@ export const isObjectArrayWithNesting = (
466466
if (val.$ref !== undefined) {
467467
return false;
468468
}
469-
if (val.anyOf || val.oneOf || val.allOf) {
469+
if (val.anyOf || val.allOf) {
470+
return true;
471+
}
472+
if(val.oneOf && !isOneOfEnumControl(uischema,val,context)){
470473
return true;
471474
}
472475
if (hasType(val, 'object')) {

packages/core/test/testers.test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,17 @@ test('tester isObjectArrayWithNesting', t => {
825825
}
826826
};
827827

828+
const schemaWithOneOfEnum = {
829+
type: 'array',
830+
items: {
831+
type: 'string',
832+
oneOf: [
833+
{ const: 'A', title: 'ENUM A' },
834+
{ const: 'B', title: 'ENUM B' },
835+
],
836+
},
837+
}
838+
828839
const uischemaOptions: {
829840
generate: ControlElement;
830841
default: ControlElement;
@@ -877,6 +888,8 @@ test('tester isObjectArrayWithNesting', t => {
877888

878889
t.true(isObjectArrayWithNesting(uischema, nestedSchemaWithAnyOf, undefined));
879890
t.true(isObjectArrayWithNesting(uischema, nestedSchemaWithOneOf, undefined));
891+
892+
t.false(isObjectArrayWithNesting(undefined,schemaWithOneOfEnum, undefined));
880893
});
881894

882895
test('tester schemaSubPathMatches', t => {

0 commit comments

Comments
 (0)