import { ControlElement , JsonSchema , UISchemaElement } from '../models' ; import { resolveSchema } from './resolvers' ; import { findUISchema , JsonFormsUISchemaRegistryEntry } from '../reducers' ; export interface CombinatorSubSchemaRenderInfo { schema : JsonSchema ; uischema : UISchemaElement ; label : string ; } export type CombinatorKeyword = 'anyOf' | 'oneOf' | 'allOf' ; const createLabel = ( subSchema , subSchemaIndex , keyword ) : string => { if ( subSchema . title ) { return subSchema . title ; } else { return keyword + '-' + subSchemaIndex ; } } ; export const resolveSubSchemas = ( schema , rootSchema , keyword ) => { const schemas = schema [ keyword ] as any [ ] ; if ( schemas . findIndex ( e => e . $ref !== undefined ) !== - 1 ) { return { ... schema , [ keyword ] : ( schema [ keyword ] as any [ ] ) . map ( e => e . $ref ? resolveSchema ( rootSchema , e . $ref ) : e ) } ; } return schema ; } ; export const createCombinatorRenderInfos = ( combinatorSubSchemas , rootSchema , keyword , control , path , uischemas ) : CombinatorSubSchemaRenderInfo [ ] => combinatorSubSchemas . map ( ( subSchema , subSchemaIndex ) => ( { schema : subSchema , uischema : findUISchema ( uischemas , subSchema , control . scope , path , undefined , control , rootSchema ) , label : createLabel ( subSchema , subSchemaIndex , keyword ) } ) ) ;