UNPKG

@vs-form/vs-form

Version:

A schema-based form generator component for React using material-ui

556 lines (555 loc) 20.9 kB
import { TextFieldProps, StandardTextFieldProps } from '@material-ui/core/TextField'; import { RadioGroupProps } from '@material-ui/core/RadioGroup'; import { RadioProps } from '@material-ui/core/Radio'; import { CheckboxProps } from '@material-ui/core/Checkbox'; import { SwitchProps } from '@material-ui/core/Switch'; import { ExpansionPanelProps } from '@material-ui/core/ExpansionPanel'; import { ExpansionPanelSummaryProps } from '@material-ui/core/ExpansionPanelSummary'; import { ExpansionPanelDetailsProps } from '@material-ui/core/ExpansionPanelDetails'; import { TabsProps } from '@material-ui/core/Tabs'; import { AppBarProps } from '@material-ui/core/AppBar'; import { TabProps } from '@material-ui/core/Tab'; import { PaperProps } from '@material-ui/core/Paper'; import { TypographyProps } from '@material-ui/core/Typography'; import { DividerProps } from '@material-ui/core/Divider'; import { CardMediaProps } from '@material-ui/core/CardMedia'; import { ButtonProps } from '@material-ui/core/Button'; import { IconButtonProps } from '@material-ui/core/IconButton'; import { IconProps } from '@material-ui/core/Icon'; import { SvgIconProps } from '@material-ui/core/SvgIcon'; import { FormControlProps } from '@material-ui/core/FormControl'; import { FormHelperTextProps } from '@material-ui/core/FormHelperText'; import { FormLabelProps } from '@material-ui/core/FormLabel'; import { FormControlLabelProps } from '@material-ui/core/FormControlLabel'; import { FormGroupProps } from '@material-ui/core/FormGroup'; import { CardProps } from '@material-ui/core/Card'; import { CardHeaderProps } from '@material-ui/core/CardHeader'; import { CardContentProps } from '@material-ui/core/CardContent'; import { GridProps } from '@material-ui/core/Grid'; import { SliderProps } from '@material-ui/lab/Slider'; import { SpeedDialActionProps } from '@material-ui/lab/SpeedDialAction'; import { SpeedDialProps } from '@material-ui/lab/SpeedDial'; import { TooltipProps } from '@material-ui/core/Tooltip'; import { NumberFormatProps } from 'react-number-format'; import { MaskedInputProps } from 'react-text-mask'; import SchemaManager from './schemaManager'; import * as enums from './enums'; import * as errs from './str_err'; export interface ICommonProps { id?: string; node?: string; disabled?: boolean; gridItem?: GridProps; styles?: IStylesObj; dense?: boolean; hidden?: boolean; tooltip?: string | IStringFunction; tooltipProps?: ITooltipProps; iconComp?: any; } export interface ISchema { name: string; node: string; validationMethod: enums.ValidationMethod; hideValidationErrorPanel?: boolean; label: string; values: IObj; components: IComponents; styles?: IStylesObj; disabled?: boolean; onCreated?: ISchemaEvent; onDidMount?: ISchemaEvent; onWillUnmount?: ISchemaEvent; onChange?: IDataEvent; onSubmit?: ISchemaEvent; onCancelValues?: ISchemaEvent; validate?: IValidationEvent; [key: string]: any; } export interface ISchemaDesign extends Partial<ISchema> { components: IComponents; } export interface ICommonDataProps { field: string; dataType: enums.DataType; fieldPath?: string; default?: any; onBeforeChange?: IDataEvent; onChange?: IDataEvent; validations?: IComponentDataValidation; modifiers?: IComponentDataModifier; } export interface ICommonContainerProps extends ICommonLabelOptionalProps { children: IChildrenMember; gridContainer?: GridProps; } export interface ICommonInputFieldProps { placeholder?: string | IStringFunction; hint?: string | IStringFunction; prefix?: string | string[]; suffix?: string | string[]; } export interface ICommonLabelProps { label: string | IStringFunction; } export interface ICommonLabelOptionalProps { label?: string | IStringFunction; } export interface ICommonButtonProps { action?: enums.ButtonAction; onClick?: IComponentEvent; } export interface ICommonDataPropsInput extends ICommonDataProps { dataType: enums.DataType.string; } export interface ICommonDataPropsDate extends ICommonDataProps { dataType: enums.DataType.date; } export interface ICommonDataPropsNumber extends ICommonDataProps { dataType: enums.DataType.number; } export interface ICommonDataPropsNumberFormat extends ICommonDataProps { dataType: enums.DataType.number | enums.DataType.integer; } export interface ICommonDataPropsInteger extends ICommonDataProps { dataType: enums.DataType.integer; } export interface ICommonDataPropsBool extends ICommonDataProps { dataType: enums.DataType.boolean; } export interface ICommonDataPropsSelect extends ICommonDataProps { dataType: enums.DataType.string | enums.DataType.number | enums.DataType.integer | enums.DataType.arrayString | enums.DataType.arrayNumber | enums.DataType.arrayInteger; items: ISelectItemList | ISelectItemListFunction | string[]; } export interface ICommonDataPropsRadioGroup extends ICommonDataProps { dataType: enums.DataType.string | enums.DataType.number; items: ISelectItemList | ISelectItemListFunction | string[]; } export interface ICommonDataPropChecklistbox extends ICommonDataProps { dataType: enums.DataType.arrayString | enums.DataType.arrayNumber; items: IChecklistboxItemList; } export interface ICommonDataPropsSubschema extends ICommonDataProps { dataType: enums.DataType.object | enums.DataType.array; } export interface IComponentTextInput extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.textinput; data: ICommonDataPropsInput; props?: TextFieldProps; } export interface IComponentMaskInput extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.maskinput; data: ICommonDataPropsInput; maskProps?: MaskedInputProps; props?: TextFieldProps; } export interface IComponentNumber extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.number; data: ICommonDataPropsNumber; props?: TextFieldProps; } export interface IComponentInteger extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.integer; data: ICommonDataPropsInteger; props?: TextFieldProps; } export interface IComponentSlider extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.slider; data: ICommonDataPropsNumber; props?: ISliderProps; } export interface IComponentNumberFormat extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.numberformat; data: ICommonDataPropsNumberFormat; numberFormatProps: NumberFormatProps; props?: TextFieldProps; } export interface IComponentDate extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.date | enums.Component.datetime | enums.Component.time; data: ICommonDataPropsDate; props?: TextFieldProps; } export interface IComponentDateExt extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.dateext; data: ICommonDataPropsDate; props?: IDateExtProps; } export interface IComponentSelect extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.select; data: ICommonDataPropsSelect; autocomplete?: boolean; props?: TextFieldProps; } export interface IComponentSelectExt extends ICommonProps, ICommonInputFieldProps, ICommonLabelProps { type: enums.Component.selectext; data: ICommonDataPropsSelect; props?: ISelectExtProps; } export interface IComponentRadioGroup extends ICommonProps, ICommonLabelProps { type: enums.Component.radiogroup; data: ICommonDataPropsRadioGroup; props?: IRadioGroupProps; } export interface IComponentChecklistbox extends ICommonProps, ICommonLabelProps { type: enums.Component.checklistbox; data: ICommonDataPropChecklistbox; rowDisplay?: boolean; actionIcon?: IIcon; onActionClick?: IDataItemEvent; props?: IChecklistBoxProps; } export interface IComponentCheckbox extends ICommonProps, ICommonLabelProps { type: enums.Component.checkbox; data: ICommonDataPropsBool; props?: ICheckboxProps; } export interface IComponentSwitch extends ICommonProps, ICommonLabelProps { type: enums.Component.switch; data: ICommonDataPropsBool; props?: ISwitchProps; } export interface IComponentSubschema extends ICommonProps, ICommonLabelOptionalProps { type: enums.Component.subschema; schemaName: string; schema?: ISchema; data: ICommonDataPropsSubschema; keyField?: string; columnSettings?: IDataTableColumnSettings; rowsPerPage?: number; hidePagination?: boolean; props?: IObj; } export interface IComponentForm extends ICommonProps, ICommonContainerProps { type: enums.Component.form; props?: IPanelProps; } export interface IComponentPanel extends ICommonProps, ICommonContainerProps { type: enums.Component.panel; props?: IPanelProps; } export interface IComponentTab extends ICommonProps, ICommonContainerProps { type: enums.Component.tab; icon?: IIcon; props?: IPanelProps; } export interface IComponentCard extends ICommonProps, ICommonContainerProps { type: enums.Component.card; subheader?: string; icon?: IIcon; props?: ICardProps; } export interface IComponentExpansionPanel extends ICommonProps, ICommonContainerProps { type: enums.Component.expansionpanel; expanded?: boolean; onBeforeChange?: IExpPanelBeforeChangeEvent; onChange?: IExpPanelChangedEvent; props?: IExpansionPanelProps; } export interface IComponentTabs extends ICommonProps, ICommonLabelOptionalProps { type: enums.Component.tabs; tabs: string[]; activeTab?: number; onBeforeChange?: ITabBeforeChangeEvent; onChange?: ITabChangedEvent; props?: ITabsProps; } export interface IComponentText extends ICommonProps { text: string | IStringFunction; type: enums.Component.text; props?: TypographyProps; } export interface IComponentButton extends ICommonProps, ICommonButtonProps, ICommonLabelOptionalProps { type: enums.Component.button; icon?: IIcon; iconRight?: boolean; props?: IButtonProps; } export interface IComponentIconButton extends ICommonProps, ICommonButtonProps { icon: IIcon; type: enums.Component.iconbutton; props?: IIconButtonProps; } export interface IComponentSpeediDial extends ICommonProps, ICommonButtonProps { type: enums.Component.speeddial; actions: ISpeedDialActionList; props?: ISpeedDialProps; } export interface IComponentIcon extends ICommonProps { type: enums.Component.icon; icon?: string; svg?: string; component?: any; props?: IconProps | SvgIconProps; } export interface IComponentDivider extends ICommonProps { type: enums.Component.divider; props?: DividerProps; } export interface IComponentMediaStatic extends ICommonProps { type: enums.Component.mediastatic; props?: CardMediaProps; } export interface IComponentCustom extends ICommonProps { type: enums.Component.custom; name: string; [key: string]: any; } export declare type IComponent = IComponentForm | IComponentPanel | IComponentTab | IComponentCard | IComponentExpansionPanel | IComponentTabs | IComponentTextInput | IComponentMaskInput | IComponentSelect | IComponentSelectExt | IComponentRadioGroup | IComponentChecklistbox | IComponentNumber | IComponentInteger | IComponentSlider | IComponentNumberFormat | IComponentCheckbox | IComponentSwitch | IComponentDate | IComponentDateExt | IComponentSubschema | IComponentText | IComponentButton | IComponentIconButton | IComponentSpeediDial | IComponentIcon | IComponentDivider | IComponentMediaStatic | IComponentCustom; export interface IComponentList extends Array<IComponent> { } export declare type IStringFunction = (params: IComponentEventParams) => string; export declare type ISelectItemListFunction = (params: IComponentEventParams) => ISelectItemList | string[]; export declare type ISchemaEvent = (params: ISchemaEventParams) => void; export declare type IComponentEvent = (params: IComponentEventParams) => void; export declare type ITabBeforeChangeEvent = (params: ITabBeforeChangeParams) => void; export declare type ITabChangedEvent = (params: ITabChangedParams) => void; export declare type IExpPanelBeforeChangeEvent = (params: IExpPanelBeforeChangeParams) => void; export declare type IExpPanelChangedEvent = (params: IExpPanelChangedParams) => void; export declare type IDataEvent = (params: IDataEventParams) => void; export declare type IDataItemEvent = (params: ISchemaEventItemParams) => void; export declare type IDataValidationEvent = (params: IDataEventParams) => string; export declare type IDataValidationRequiredEvent = (params: IDataEventParams) => boolean; export declare type IValidationEvent = (params: ISchemaEventParams) => IValidationError | undefined; export declare type IChildrenMember = string[]; export declare type IIcon = string | string[]; export interface IComponentDataValidation { required?: boolean | IDataValidationRequiredEvent; allowedValues?: any[]; min?: number; max?: number; step?: number; regex?: any; validate?: IDataValidationEvent; } export interface IComponentDataModifier { trim?: boolean; toLowerCase?: boolean; toUpperCase?: boolean; capitalize?: boolean; } export interface IStylesObj { [key: string]: IObj; } export interface IObj { [key: string]: any; } export interface IDataTableColumnSetting { compId: string; autowidth?: boolean; width?: number; widthUnit?: string; alignRight?: boolean; sortable?: boolean; sortDirection?: enums.SortDirection; } export interface IDataTableColumnSettings extends Array<IDataTableColumnSetting> { } export interface ISelectItem { value: string | number; text: string; } export interface IChecklistboxItem extends ISelectItem { actionIcon?: IIcon; } export interface ISpeedDialAction { id?: string | number; icon: string; tooltip: string; onClick?: IComponentEvent; } export interface ISpeedDialActionList extends Array<ISpeedDialAction> { } export interface ISelectItemList extends Array<ISelectItem> { } export interface IChecklistboxItemList extends Array<IChecklistboxItem> { } export interface IComponents { root: IComponent; [key: string]: IComponent; } export interface IComponentIndex { node: IComponent; index: number; } export interface ISchemaEventParams { schemaManager: SchemaManager; schema: ISchema; } export interface IComponentEventParams extends ISchemaEventParams { component: IComponent; } export interface IDataEventParams extends IComponentEventParams { value: any; } export interface ISchemaEventItemParams extends IDataEventParams { item: ISelectItem; } export interface ITabChangedParams extends IComponentEventParams { newTab: number; } export interface ITabBeforeChangeParams extends ITabChangedParams { canChange: boolean; } export interface IExpPanelChangedParams extends IComponentEventParams { expanded: boolean; } export interface IExpPanelBeforeChangeParams extends IExpPanelChangedParams { canChange: boolean; } export interface IProcessSchemaParamsBase { schema: ISchema | ISchemaDesign; parentComp?: IComponent; options: { done?: boolean; processSubSchemas?: boolean; }; } export interface IProcessSchemaParams extends IProcessSchemaParamsBase { parentSchema?: ISchema | ISchemaDesign; parentCompKey?: string; schemaCallback?: ISchemaCallback; componentCallback?: IComponentCallback; } export interface IProcessSchemaParamsComponent extends IProcessSchemaParamsBase { comp: IComponent; key?: string; } export interface IProcessSchemaParamsSchema extends IProcessSchemaParamsBase { parentSchema?: ISchema | ISchemaDesign; parentCompKey?: string; key?: string; } export declare type ISchemaCallback = (p: IProcessSchemaParamsSchema) => void; export declare type IComponentCallback = (p: IProcessSchemaParamsComponent) => void; export interface ISchemaList extends Array<ISchemaDesign> { } export interface IValidationError { error: string; comp: IComponent; arrayId: any; } export interface IValidationErrorList extends Array<IValidationError> { } export declare type IValidatorSchema = (schemaManager: SchemaManager) => ISchemaError | string; export interface IValidatorSchemaList extends Array<IValidatorSchema> { } export declare type IValidatorComponent = (validSchema: IObj, component: IComponent, schema: ISchema | ISchemaDesign) => ISchemaError | string; export interface IValidatorComponentList extends Array<IValidatorComponent> { } export interface ICounter { count: number; max: number; } export interface ISortableProps { className?: string; onChange: any; options: any; children?: any; } export interface ISubschemaArrayProps { subschemaFieldName: string; arrayValue: object[]; arrayRecord: object; } export interface IAddComponentType { componentType: enums.ComponentType; component: enums.Component; id: string; label: string; field: string; dataType: enums.DataType; subschema: string; text: string; } export declare enum SchemaErrorType { error = "error", warning = "warning" } export interface ISchemaError { errcode: errs.ErrorCode; schemaName?: string; msg?: string; key?: string; prop?: string; addOn?: string; type?: SchemaErrorType; itemNo?: string; } export interface ISchemaErrorList extends Array<ISchemaError> { } export interface IBaseFormControlProps { FormControlProps?: FormControlProps; FormLabelProps?: FormLabelProps; FormHelperTextProps?: FormHelperTextProps; } export interface ISliderProps extends SliderProps, IBaseFormControlProps { } export interface ISwitchProps extends SwitchProps, IBaseFormControlProps { FormControlLabelProps?: Partial<FormControlLabelProps>; } export interface IChecklistBoxProps extends FormGroupProps, IBaseFormControlProps { FormControlLabelProps?: Partial<FormControlLabelProps>; CheckboxProps?: CheckboxProps; IconButtonProps?: IconButtonProps; } export interface ISelectExtProps extends ICommonProps, ICommonLabelOptionalProps { isMulti?: boolean; placeholder?: string; label?: string; isSearchable?: boolean; style?: any; autofocus?: boolean; clases?: any; TextFieldProps?: TextFieldProps; inputRef?: any; [key: string]: any; } export interface IDateExtProps extends StandardTextFieldProps { type: enums.Component; [key: string]: any; } export interface IRadioGroupProps extends RadioGroupProps, IBaseFormControlProps { FormControlLabelProps?: Partial<FormControlLabelProps>; RadioProps?: RadioProps; } export interface IExpansionPanelProps extends ExpansionPanelProps { ExpansionPanelSummaryProps?: ExpansionPanelSummaryProps; ExpansionPanelDetailsProps?: ExpansionPanelDetailsProps; TypographyProps?: TypographyProps; IconProps?: IconProps; } export interface ITabsProps extends PaperProps { AppBarProps?: AppBarProps; TabsProps?: TabsProps; TabProps?: TabProps; IconProps?: IconProps; } export interface ICardProps extends CardProps { CardHeaderProps?: CardHeaderProps; CardContentProps?: CardContentProps; HeaderTypographyProps?: TypographyProps; SubHeaderTypographyProps?: TypographyProps; } export interface IButtonProps extends ButtonProps { LabelProps?: TypographyProps; IconProps?: IconProps; } export interface ICheckboxProps extends CheckboxProps, IBaseFormControlProps { FormControlLabelProps?: Partial<FormControlLabelProps>; } export interface ISwitchProps extends SwitchProps, IBaseFormControlProps { FormControlLabelProps?: Partial<FormControlLabelProps>; } export interface IPanelProps { className?: string; style?: object; HeaderTypographyProps?: TypographyProps; } export interface IIconButtonProps extends IconButtonProps { IconProps?: IconProps; } export interface ISpeedDialProps extends Partial<SpeedDialProps> { SpeedDialActionProps?: SpeedDialActionProps; } export interface ITooltipProps extends Partial<TooltipProps> { }