UNPKG

dynamic-modal

Version:

The dynamic-modal is a solution of creation different modals into project using a json configuration file

65 lines (64 loc) 2.5 kB
import { CSSProperties } from 'react'; import { IMakeSelect } from './make-select'; import { IMakeInput } from './make-input'; import { IMakeTextarea } from './make-textarea'; import { IMakeToggle } from './make-toggle'; import { IMakeDescription } from './make-description'; import { IMakeFieldGroup } from './make-field-group'; import { IMakeUpload } from './make-upload'; import { IOption } from './option'; import { IMakeButton } from './make-button'; import { IMakeCustomUpload } from './make-custom-upload'; import { IMakeWatcher } from './make-watcher'; import { IMakeTable } from './make-table'; export type IModalField = IMakeSelect | IMakeInput | IMakeFieldGroup | IMakeTextarea | IMakeToggle | IMakeDescription | IMakeUpload | IMakeCustomUpload | IMakeWatcher | IMakeButton | IMakeTable; export type IFormField = IMakeSelect | IMakeInput | IMakeTextarea | IMakeToggle; export interface IModalRenderAction { action: (data: string, ...args: any[]) => Promise<boolean>; condition: Array<string>; } export type IModalRenderCriteria = Record<string, Array<string | number | boolean> | undefined>; export type IModalRenderCondition = IModalRenderAction | IModalRenderCriteria; export type IModalLiveDataCondition = { action: (data: string, ...args: any[]) => Promise<Array<IOption>>; condition: Array<string>; }; export interface IModalSectionStyleConfig { className?: string; style?: CSSProperties; } export interface IModalLayoutConfig { container?: IModalSectionStyleConfig; header?: IModalSectionStyleConfig & { showDivider?: boolean; }; title?: IModalSectionStyleConfig; body?: IModalSectionStyleConfig; footer?: IModalSectionStyleConfig & { showDivider?: boolean; }; } export interface IModalConfigProps { reservedData?: Record<string, any>; title: string; layout?: IModalLayoutConfig; fields: Array<IModalField>; out: (data: any) => void; onClose?: () => void; style?: CSSProperties; overFlowBody?: string | number; minHeightBody?: string | number; useSubmit?: boolean; useBlur?: boolean; actions: { containerStyle?: CSSProperties; cancel?: Omit<IMakeButton, 'elementType'>; action: Omit<IMakeButton, 'elementType'>; }; } export type IModalConfigLoader<T = any, D = any> = (props: T, action: (modalResult: D) => void) => IModalConfigProps; export interface IModal { open: boolean; close: () => void; config: IModalConfigProps; }