@zodiac-ui/formula
Version:
Formula is a powerful form generator built for Angular. Inspired by Angular Router, Formula provides a declarative interface for building reactive forms.
112 lines (111 loc) • 3.51 kB
TypeScript
import { Injector, NgModuleFactory, Type } from "@angular/core";
import { Observable } from "rxjs";
import { AbstractControl, NgForm } from "@angular/forms";
import { FormulaRenderer } from "./renderer/renderers";
import { FormulaNode } from "./node/nodes";
/**
*
*/
export declare type Formula = FormulaControl | FormulaGroup | FormulaArray | FormulaContainer;
export declare enum FormulaType {
CONTROL = 0,
GROUP = 1,
ARRAY = 2,
CONTAINER = 3
}
export interface FormulaData {
placeholder?: string;
label?: string;
[key: string]: any;
}
export interface FormulaResolve {
[key: string]: Type<any>;
}
export interface FormulaResolveData {
[key: string]: any;
}
export declare type FormulaLoadChildrenCallback = () => Type<any> | NgModuleFactory<any> | Promise<Type<any>> | Observable<Type<any>>;
export declare type FormulaLoadChildren = string | FormulaLoadChildrenCallback;
export interface FormulaControlBase {
type: FormulaType.CONTROL;
}
export interface FormulaControlOptions {
name: string;
class?: string;
component?: Type<any>;
data?: FormulaData;
default?: any;
canLoad?: any[];
canActivate?: any[];
canDeactivate?: any[];
resolve?: FormulaResolve;
validators?: any[];
asyncValidators?: any[];
}
export declare type FormulaControl = FormulaControlBase & FormulaControlOptions;
export interface FormulaGroupBase {
type: FormulaType.GROUP;
name: string;
children: Formula[];
}
export interface FormulaGroupOptions {
name: string;
class?: string;
data?: FormulaData;
component?: Type<any>;
canLoad?: any[];
canActivateChild?: any[];
loadChildren?: FormulaLoadChildren;
resolve?: FormulaResolve;
validators?: any[];
asyncValidators?: any[];
}
export declare type FormulaGroup = FormulaGroupBase & FormulaGroupOptions;
export interface FormulaArrayBase {
type: FormulaType.ARRAY;
children: Formula[];
}
export interface FormulaArrayOptions {
name: string;
class?: string;
data?: FormulaData;
canLoad?: any[];
canActivateChild?: any[];
component?: Type<any>;
loadChildren?: FormulaLoadChildren;
resolve?: FormulaResolve;
validators?: any[];
asyncValidators?: any[];
}
export declare type FormulaArray = FormulaArrayBase & FormulaArrayOptions;
export interface FormulaContainerBase {
type: FormulaType.CONTAINER;
children?: Formula[];
}
export interface FormulaContainerOptions {
name: string;
class?: string;
component?: Type<any>;
data?: FormulaData;
canLoad?: any[];
canActivateChild?: any[];
loadChildren?: FormulaLoadChildren;
resolve?: FormulaResolve;
}
export declare type FormulaContainer = FormulaContainerBase & FormulaContainerOptions;
export declare type FormulaOptions<T> = T extends FormulaGroup ? FormulaGroupOptions : T extends FormulaArray ? FormulaArrayOptions : T extends FormulaContainer ? FormulaContainerOptions : FormulaControlOptions;
export declare abstract class FormulaContext {
abstract data: FormulaData;
abstract model: AbstractControl;
abstract resolve: FormulaResolveData;
}
export declare type FormulaRoot = FormulaOutlet & {
setForm(form: NgForm): any;
};
export interface FormulaOutlet {
root: FormulaRoot;
parent: FormulaOutlet;
node: FormulaNode;
renderer: FormulaRenderer;
injector: Injector;
}