UNPKG

@jannie-shao/components-antd4

Version:
167 lines 5.32 kB
import "antd/es/modal/style"; import _Modal from "antd/es/modal"; import _extends from "@babel/runtime/helpers/extends"; import "antd/es/button/style"; import _Button from "antd/es/button"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose"; var _excluded = ["btnText", "btnGroup", "title", "addonBefore", "model", "beforePop", "afterPopSubmit", "afterClose", "onSubmit", "className", "initialValues", "values", "children", "useChildren", "getContainer", "formProps"]; import React, { useImperativeHandle, forwardRef, useRef, useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { merge, isEqual } from 'lodash'; import Form from "../form"; import { callFun, cloneElement } from "../utils"; import { rootPrefix } from "../style/config"; var prefix = rootPrefix + "-pop-form"; var PopForm = /*#__PURE__*/forwardRef(function (_ref, ref) { var btnText = _ref.btnText, btnGroup = _ref.btnGroup, title = _ref.title, addonBefore = _ref.addonBefore, model = _ref.model, beforePop = _ref.beforePop, afterPopSubmit = _ref.afterPopSubmit, afterClose = _ref.afterClose, onSubmit = _ref.onSubmit, className = _ref.className, initialValues = _ref.initialValues, values = _ref.values, children = _ref.children, useChildren = _ref.useChildren, getContainer = _ref.getContainer, formProps = _ref.formProps, moreProps = _objectWithoutPropertiesLoose(_ref, _excluded); var compForm = useRef(); var _useState = useState(false), visible = _useState[0], setVisible = _useState[1]; var _useState2 = useState(false), loading = _useState2[0], setLoading = _useState2[1]; var _useState3 = useState(values), lastValues = _useState3[0], setLastValues = _useState3[1]; var handleShowForm = function handleShowForm() { return callFun(function () { return beforePop(); }, function (res) { setVisible(true); if (res && compForm.current) { compForm.current.setFieldsValue(res); } }); }; var handleCancel = function handleCancel() { setVisible(false); setLoading(false); }; var handleAfterClose = function handleAfterClose() { compForm.current && compForm.current.resetFields(); afterClose(); }; var handleSubmit = function handleSubmit(data) { setLoading(true); callFun(function () { return onSubmit(data); }, function () { handleCancel(); afterPopSubmit(); }, function () { return setLoading(false); }); }; useEffect(function () { if (!isEqual(values, lastValues) && compForm.current) { compForm.current.setFieldsValue(values); setLastValues(values); } }, [values]); useEffect(function () { compForm.current && compForm.current.setFieldsValue(merge({}, initialValues, values)); }, []); useImperativeHandle(ref, function () { return { handleShowForm: handleShowForm }; }); return /*#__PURE__*/React.createElement(React.Fragment, null, function () { if (children) { return cloneElement(children, { onClick: handleShowForm }); } if (useChildren) { return /*#__PURE__*/React.createElement(_Button, { type: "primary", onClick: handleShowForm }, btnText); } return ''; }(), /*#__PURE__*/React.createElement(_Modal, _extends({ className: classnames(prefix, className), getContainer: getContainer, maskClosable: false, title: title, width: 690, footer: null }, moreProps, { open: visible, onCancel: handleCancel, afterClose: handleAfterClose }), /*#__PURE__*/React.createElement("div", { className: prefix + "-addon-before" }, addonBefore), /*#__PURE__*/React.createElement("div", { className: prefix + "-content" }, /*#__PURE__*/React.createElement(Form, _extends({ ref: compForm, layout: "horizontal", colon: false, model: model, btnGroup: btnGroup }, formProps, { isLoading: loading, initialValues: initialValues, onSubmit: handleSubmit, onCancel: handleCancel }))))); }); PopForm.propTypes = { btnText: PropTypes.string, btnGroup: PropTypes.array, title: PropTypes.string, addonBefore: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), model: PropTypes.array, beforePop: PropTypes.func, afterPopSubmit: PropTypes.func, afterClose: PropTypes.func, onSubmit: PropTypes.func, className: PropTypes.string, initialValues: PropTypes.object, values: PropTypes.object, useChildren: PropTypes.bool, getContainer: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.node]), formProps: PropTypes.object }; PopForm.defaultProps = { btnText: 'Create', btnGroup: [{ opType: 'submit', btnText: 'Ok' }, 'cancel'], addonBefore: /*#__PURE__*/React.createElement(React.Fragment, null), model: [], title: 'New', beforePop: function beforePop() {}, afterPopSubmit: function afterPopSubmit() {}, afterClose: function afterClose() {}, onSubmit: function onSubmit() {}, className: '', initialValues: {}, values: {}, useChildren: true, getContainer: function getContainer() { return document.body; }, formProps: {} }; export default PopForm;