UNPKG

@kronscht/former

Version:

Former is an Angular library that provides a declarative way to generate complex forms based on primeng components

134 lines (133 loc) 4.56 kB
import { KeyFilterPattern } from 'primeng/keyfilter'; import { Observable } from 'rxjs'; import { ActionType, Align, ElementType, NumberMode, ValidationType } from './former.enum'; import { AutoCompleteElement } from './elements/autocomplete.model'; export interface FormDefinition { title?: string; elements: Elements; actions: Actions; } export type Element = TextElement | DisplayTextElement | TextAreaElement | NumberElement | GroupElement | CalendarElement | DropdownElement | InputGroupElement | AutoCompleteElement | CheckboxElement | CardElement | GridLayoutElement | GridColumnElement | TemplateElement; export type Elements = Record<string, Element>; export type LayoutElements = Record<string, GridColumnElement>; export type FloatLabelType = 'in' | 'over' | 'on'; export interface BaseElement { title?: string; cssClass?: string; validators?: FormValidator[]; wrapperClass?: string; floatLabel?: FloatLabelType; styleClass?: string; } export interface DisableElement { disabled?: boolean; } export interface UnitElement { icon?: string; unit?: string; keyFilter?: RegExp | KeyFilterPattern | null | undefined; } export interface TextElement extends BaseElement, DisableElement { type: ElementType.TextElement; } export interface DisplayTextElement extends BaseElement, DisableElement { type: ElementType.DisplayTextElement; labelClass?: string; } export interface TextAreaElement extends BaseElement, DisableElement { type: ElementType.TextAreaElement; rows: number; cols?: number; } export interface NumberElement extends BaseElement, DisableElement { type: ElementType.NumberElement; mode?: NumberMode; currency?: string; locale?: string; minFractionDigits?: number; maxFractionDigits?: number; } export interface InputGroupElement extends BaseElement, DisableElement, UnitElement { type: ElementType.InputGroupElement; } export interface GroupElement extends BaseElement, DisableElement { type: ElementType.GroupElement; elements: Elements; } export interface CalendarElement extends BaseElement, DisableElement { type: ElementType.CalendarElement; dateFormat: string; } export interface DropdownElement extends BaseElement, DisableElement { type: ElementType.DropdownElement; options: Observable<any>; optionLabel?: string; optionValue?: string; } export interface CheckboxElement extends BaseElement, DisableElement { type: ElementType.CheckboxElement; value: string; } export interface CardElement extends BaseElement { type: ElementType.CardElement; elements: Elements; } export interface TemplateElement extends BaseElement { type: ElementType.TemplateElement; templateId: string; } export interface LayoutElement { class: string; } export interface GridLayoutElement extends LayoutElement { type: ElementType.GridLayoutElement; elements: LayoutElements; } export interface GridColumnElement extends LayoutElement { type: ElementType.GridColumnElement; elements: Elements; } export interface AlignableButton { align?: Align; } export interface FormButton extends AlignableButton, DisableElement { type: ActionType.Button; label: string; } export interface SubmitButton extends AlignableButton, DisableElement { type: ActionType.Submit; label: string; } export interface CancelButton extends AlignableButton, DisableElement { type: ActionType.CancelButton; label: string; } export type ActionButton = FormButton | SubmitButton | CancelButton; export type Actions = Record<string, ActionButton>; export interface ActionResult { action: ActionButton; payload: any; } export type FormValidator = RequiredFormValidator | MinLengthFormValidator | MaxLengthFormValidator | MinFormValidator | MaxFormValidator | PatternFormValidator | EmailFormValidator; export interface BaseFormValidator { validationType: ValidationType; messageKey: string; messageArgs?: any; } export type RequiredFormValidator = BaseFormValidator; export interface MinLengthFormValidator extends BaseFormValidator { minLength: number; } export interface MaxLengthFormValidator extends BaseFormValidator { maxLength: number; } export interface MinFormValidator extends BaseFormValidator { min: number; } export interface MaxFormValidator extends BaseFormValidator { max: number; } export interface PatternFormValidator extends BaseFormValidator { pattern: RegExp | string; } export type EmailFormValidator = BaseFormValidator;