import { AbstractControl, AbstractControlOptions, AsyncValidatorFn, FormControlOptions, ValidatorFn } from '@angular/forms'; import { ValidationOptions } from './model'; import { FastFormBuilder } from './service/fast-form-builder'; export type TypedQuestion = Omit, 'type'> & { type: string; }; export interface GeneralQuestion { type?: string; id?: string; label?: string; hidden?: boolean; disabled?: boolean; validation?: ValidationOptions; properties?: PropType; } export interface InitialValue { defaultValue?: T; } export type ControlBuilderDefinition = TypedQuestion & FormControlOptions; export type GroupBuilderDefinition = GeneralQuestion & AbstractControlOptions; export type ArrayBuilderDefinition = GeneralQuestion & AbstractControlOptions; export interface ControlFactoryOptions { fb: FastFormBuilder; validators: ValidatorFn[] | undefined | null; asyncValidators: AsyncValidatorFn[] | undefined | null; } export type FactoryQuestionDefinition = TypedQuestion & FormControlOptions & InitialValue; export type ControlFactoryMethod = (question: FactoryQuestionDefinition, opts: ControlFactoryOptions) => AbstractControl;