@manojadams/metaforms
Version:
Meta-data driven forms
75 lines (74 loc) • 3.97 kB
TypeScript
import EventEmitter from "eventemitter3";
import React from "react";
import { Page, Rest } from ".";
import { IMetaForm, IForm, IFormField, IError, IDepdendencyItem, IElementTypes, IFnTypes, TCondition } from "./common-interface";
import { IConfig, IField, IOption, ISchema, ITheme, IURLLoaderConfig, TParam } from "./model-interfaces";
export default class MetaForm implements IMetaForm {
private schema;
private eventEmitter;
theme: ITheme;
form: IForm;
rest: Rest;
page: Page;
icons: IElementTypes | undefined;
fns: IFnTypes | undefined;
errorHandler: Function | undefined;
controls: IElementTypes | undefined;
controlElements: Record<string, React.FunctionComponent> | undefined;
constructor(schema: ISchema, eventEmitter: EventEmitter);
init(): void;
/** page functions */
getPage(): Page;
setPage(page: Page): void;
updatePage(pageNumber: number): void;
setEndOfPage(pageNumber: number | undefined): void;
resetEndOfPage(): void;
/** event emitter functions */
emit(eventType: string, payload: any): void;
listener(eventType: string, fn: (...args: any[]) => void): void;
removeListener(event: string, fn?: (...args: any[]) => void): void;
destroy(): void;
/** icons */
getIcon(type: string): JSX.Element | "";
setIcons(icons: IElementTypes): void;
/** rest functions */
getRestConfig(): IConfig;
api(type: string, url: string, params?: Array<TParam>, currentValue?: any, sectionName?: string, isRemote?: boolean): Promise<any>;
getData(config: IURLLoaderConfig, val: any, section: string, eventType?: string): Promise<Array<IOption>>;
/** Theme functions */
getThemeProp(themeName: string, prop: string): any;
getSection(pageNumber: number): {} | null;
setSection(section: string): void;
initField(section: string, field: IField): void;
getField(section: string, field: string): IFormField;
setField(section: string, field: string, value: any): void;
updateField(section: string, field: string, value: any): void;
getFieldProp(section: string, field: string, prop: string): any;
setFieldProp(section: string, field: string, prop: any, propVal: any): void;
getFieldDisplay(section: string, field: string): any;
setFieldDisplay(section: string, field: string, display: boolean): void;
getFieldOptions(section: string, field: string): any;
setFieldOptions(section: string, field: string, options: Array<any> | undefined): void;
setFieldDisabled(section: string, field: string, disabled: boolean): void;
getDependencies(section: string, field: string): any;
getChangeEvents(section: string, field: string): any;
applyDependencies(section: string, fields: Array<IField>): void;
handleDependencies(section: string, fieldName: string, value: any, fieldDisplayed: boolean): Promise<unknown>;
handleChangeEvents(gSection: string, gField: string, fieldValue?: any, fieldRef?: any): void;
setDisplayTypeFieldProp(displayType: string, section: string, field: string, resultOptions: Array<any>, dependency: IDepdendencyItem): void;
performDeepUpdate(section: string, field: string, value: any, ref: any): void;
/** validation functions */
setError(section: string, field: string, error: IError): void;
validate(): boolean;
parseCondition(condition: Array<TCondition>, section: string): any;
/** Function mapper */
getFn(fn: string): Function | null;
setFns(fns: IFnTypes): void;
/** Error handler */
handleError(error: any, section: string, field: string): void;
setErrorHandler(errorHandler: Function): void;
getControl(displayType: string): JSX.Element;
setControls(controls: IElementTypes): void;
getControlElements(displayType: string): any;
setControlElements(controlElements: Record<string, React.FunctionComponent>): void;
}