/* eslint-disable no-use-before-define */ import React, { Fragment, useContext } from 'react'; import { Modal, Form, Row, Col, Spin } from 'antd'; import _debounce from 'lodash/debounce'; import { ColProps } from "antd/lib/col"; import { ModalProps } from 'antd/lib/modal'; import { FormComponentProps } from 'antd/lib/form'; import { WrappedFormUtils } from 'antd/lib/form/Form'; import ConfigContext from '../../config-provider/context'; import { ItemConfig } from 'antd-form-mate/dist/lib/props'; import { injectChildren } from '../../utils'; export interface PopupProps extends FormComponentProps { loading?: boolean; setItemsConfig: (form: WrappedFormUtils) => ItemConfig[]; itemsLayout?: { labelCol?: ColProps; wrapperCol?: ColProps; }; getFormInstance?: (form: WrappedFormUtils) => void; mode?: string; onOk?: (fieldsValue: any) => void; onClose?: () => void; visible?: boolean; afterClose?: () => void; title?: string; } export type CustomModalProps = Omit export interface DetailModalProps extends PopupProps { modalProps?: CustomModalProps; itemsWrapperProps?: React.HTMLAttributes; cols?: 1 | 2 | 3 | 4 | 6 | 8 | 12 | 24; children?: JSX.Element; } function DetailModal(props: DetailModalProps) { const { debounceWait, createFormItemsFn } = useContext(ConfigContext); const { loading = false, setItemsConfig, itemsLayout, getFormInstance = () => { }, mode, onOk: handleOk = () => { }, onClose, visible, afterClose, title, modalProps, cols = 1, itemsWrapperProps = {} as any, form = {} as WrappedFormUtils, children, } = props; getFormInstance(form); const itemsConfig = setItemsConfig(form); const onOk = _debounce(() => { console.log('DetailFormModal _debounce onOk'); form.validateFieldsAndScroll((err?: any, fieldsValue?: any) => { if (err) return; handleOk(fieldsValue); }); }, debounceWait); const colsItems = cols === 1 ? ( createFormItemsFn(form)(itemsConfig, itemsLayout) ) : ( {createFormItemsFn(form)(itemsConfig, itemsLayout).map(item => { return ( {item} ); })} ); return (
{colsItems}
{mode ? injectChildren(children, { mode }) : children}
); } export default Form.create()(DetailModal);