import { AlternativesComponent, BaseComponent, CellphoneComponent, CheckboxComponent, CountryComponent, CurrencyComponent, CurrencySliderComponent, IComponentInput, ListComponent, MultipleCheckboxComponent, NumberComponent, NumberSliderComponent, RadioComponent, SelectComponent, TextComponent, } from './components'; import { ESchemaComponentType, mapJoiTypeToComponentType } from './joi-types-helpers'; export const createSchemaComponent = (params: IComponentInput): BaseComponent => { const type = mapJoiTypeToComponentType(params.properties); const input: IComponentInput = { ...params, type, }; switch (type) { case ESchemaComponentType.Text: { return new TextComponent(input); } case ESchemaComponentType.Number: { return new NumberComponent(input); } case ESchemaComponentType.Select: { return new SelectComponent(input); } case ESchemaComponentType.Checkbox: { return new CheckboxComponent(input); } case ESchemaComponentType.Alternatives: { return new AlternativesComponent(input); } case ESchemaComponentType.List: { return new ListComponent(input); } case ESchemaComponentType.Currency: { return new CurrencyComponent(input); } case ESchemaComponentType.CurrencySlider: { return new CurrencySliderComponent(input); } case ESchemaComponentType.NumberSlider: { return new NumberSliderComponent(input); } case ESchemaComponentType.Country: { return new CountryComponent(input); } case ESchemaComponentType.Radio: case ESchemaComponentType.RadioButton: { return new RadioComponent(input); } case ESchemaComponentType.MultipleCheckbox: { return new MultipleCheckboxComponent(input); } case ESchemaComponentType.Cellphone: { return new CellphoneComponent(input); } default: { return new BaseComponent(input); } } };