dynamic-modal
Version:
The dynamic-modal is a solution of creation different modals into project using a json configuration file
69 lines (58 loc) • 1.89 kB
text/typescript
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';
export type IModalField =
| IMakeSelect
| IMakeInput
| IMakeFieldGroup
| IMakeTextarea
| IMakeToggle
| IMakeDescription
| IMakeUpload
| IMakeButton;
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 IModalConfigProps {
reservedData?: Record<string, any>;
title: string;
fields: Array<IModalField>;
out: (data: any) => void;
onClose?: () => void;
style?: CSSProperties;
overFlowBody?: string | number;
minHeightBody?: string | number;
useSubmit?: 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;
}