// @ts-nocheck
import React, {
useState,
useRef,
forwardRef,
useImperativeHandle,
useMemo,
memo,
} from 'react';
import { Form, Row, Button, Col, Card, Modal, Drawer } from 'antd';
import { throttle } from 'lodash';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { transformData, setFormLayout } from '../../support/utils/formUtil';
import useHandle from '../../support/hooks/useHandle';
import styles from './index.less';
export interface IProps {
dataSource: DataSourceItem[];
form?: any;
config?: Object;
formLayout?: Object;
onSuccessCallback?: () => void;
onCancel?: () => void;
submitParams?: () => void;
onSubmit: any;
visible?: Boolean;
cardParams?: Object;
buttonParams?: Object;
formStyle?: Object;
children?: Node;
footer?: any;
}
export interface DataSourceItem {
key: String;
}
interface FormConfig {
mode: 1 | 2 | 3 | 4 | 5;
bodyFlexDirection: String;
}
const FormItem = Form.Item;
const tailFormItemLayout = {
wrapperCol: {
xs: { span: 24, offset: 0 },
sm: { span: 6, offset: 4 },
},
};
const BasicForm = (props: IProps, ref) => {
const {
dataSource = [],
form,
config = {},
onSuccessCallback,
onCancel,
submitParams,
visible = false,
children,
cardParams,
footer,
formLayout = { labelCol: 4, wrapperCol: 20 },
buttonParams = {
text: '提交',
offset: 0,
span: 24,
style: { width: '100%' },
},
formStyle,
} = props;
useImperativeHandle(ref, () => ({
props,
}));
const { isLoading, isError, onHandle } = useHandle();
function handleSubmit() {}
const { getFieldDecorator, getFieldValue } = props.form;
// function renderFormItems() {
// return (
//
// {dataSource.map(item => {
// const {
// key,
// formItemOptions,
// fieldDecoratorOptions,
// render,
// extraRender,
// visibility,
// } = transformData(item);
// return (
//
// {getFieldDecorator(key, fieldDecoratorOptions)(render)}
// {extraRender}
//
// );
// })}
//
// );
// }
const renderFormItem = item => {
const {
key,
formItemOptions,
fieldDecoratorOptions,
render,
extraRender,
visibility,
} = transformData(item);
if (!visibility) return;
const getFormItem = () => (
{getFieldDecorator(key, fieldDecoratorOptions)(render)}
{extraRender}
);
return key && render ? (
item.span && typeof item.span === 'number' ? (
{getFormItem()}
) : (
getFormItem()
)
) : (
item
);
};
const transformItem = (item, index = 0) => {
if (item.componentName === 'Div' && item.children) {
return (
{item.children.map(renderFormItem)}
);
} else {
return renderFormItem(item, index);
}
};
function transFormChildren(children) {
return children.map((item, index) => {
if (Array.isArray(item)) {
return transFormChildren(item);
} else if (
(item && item.hasOwnProperty('componentName')) ||
item.hasOwnProperty('component')
) {
return transformItem(item);
} else {
return item;
}
});
}
const onSubmit = event => {
form.validateFields((err, values) => {
throttle(async () => {
if (!err && props.onSubmit) {
props.onSubmit(values, onHandle);
} else if (!err && submitParams) {
onHandle(submitParams(values), result => {
if (onSuccessCallback) {
onSuccessCallback(result);
} else {
onCancel();
}
});
}
}, 1000)();
});
};
function initFormView() {
return (
);
}
const mode = (config && config.mode) || 1;
const container = (
{initFormView()}
);
switch (mode) {
case 1:
return (
{container}
);
case 2:
const bodyStyle = {
paddingBottom: '50px',
height: '100vh',
overflow: 'auto',
};
return (
{initFormView()}
{footer != null ? (
footer({ isLoading, onSubmit, onCancel })
) : (
)}
);
case 3: {
return (
{container}
);
}
case 4:
return initFormView();
default:
return null;
}
};
export default Form.create()(memo(forwardRef(BasicForm)));