@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
TypeScript
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;