UNPKG

@uiw-admin/components

Version:
137 lines (135 loc) 4.44 kB
import _extends from "@babel/runtime/helpers/extends"; import React, { useRef, useEffect } from 'react'; import { Form, Button, Col, Row } from 'uiw'; import { useStore, useColPropsContext } from './hooks/store'; import { fromValidate } from './utils'; import './style/form-item.css'; import { createElement as _createElement } from "react"; import { jsx as _jsx } from "react/jsx-runtime"; import { jsxs as _jsxs } from "react/jsx-runtime"; function FormDom(_ref) { var { formDatas = [], formfields, formType, onSubmit: _onSubmit, onChange: _onChange, onSubmitError: _onSubmitError, buttonsContainer, showSaveButton = false, showResetButton = false, saveButtonProps = {}, resetButtonProps = {}, formInstanceRef, className, style } = _ref; var baseRef = useRef(null); var store = useStore(); var colProps = useColPropsContext(); var { setFormState } = store; // 通过store获取表单实例 useEffect(() => setFormState == null ? void 0 : setFormState(baseRef), [baseRef]); // 通过ref获取表单实例 useEffect(() => { if (baseRef && baseRef.current) { formInstanceRef.current = baseRef; } }, [baseRef]); var styles = _extends({ paddingBottom: 10 }, style); if (formType !== 'pure') { styles.background = '#fff'; } return /*#__PURE__*/_jsx(Form, { className: className, ref: baseRef, style: styles, resetOnSubmit: false, onSubmit: _ref2 => { var { initial, current } = _ref2; // 如果传入了onSubmit走onSubmit,否则主动验证 var filterFormDatas = formDatas.filter(item => item.hide !== true); var validateList = filterFormDatas.map(item => ({ key: item.key, value: current[item.key], rules: item.rules, required: item.required })) || []; var errorObj = fromValidate(validateList); if (Object.keys(errorObj).length > 0) { var err = new Error(); err.filed = errorObj; throw err; } _onSubmit == null ? void 0 : _onSubmit(initial, current); }, onChange: _ref3 => { var { initial, current } = _ref3; return _onChange == null ? void 0 : _onChange(initial, current); }, onSubmitError: error => { if (_onSubmitError) { _onSubmitError == null ? void 0 : _onSubmitError(error); } else { return error.filed ? _extends({}, error.filed) : null; } }, fields: formfields, children: _ref4 => { var { fields = {}, state, canSubmit = () => false, resetForm } = _ref4; return /*#__PURE__*/_jsxs(React.Fragment, { children: [/*#__PURE__*/_jsx(Row, { gutter: 10, children: Object.keys(fields).map(key => { var _fields$key, _fields$key$props, _fields$key2, _fields$key2$props; var colSpan = ((_fields$key = fields[key]) == null ? void 0 : (_fields$key$props = _fields$key.props) == null ? void 0 : _fields$key$props.span) || colProps && colProps.span || '8'; var colstyle = ((_fields$key2 = fields[key]) == null ? void 0 : (_fields$key2$props = _fields$key2.props) == null ? void 0 : _fields$key2$props.colstyle) || {}; return /*#__PURE__*/_createElement(Col, _extends({}, colProps, { style: _extends({}, colProps && colProps.style || {}, colstyle), key: key, span: colSpan }), fields[key]); }) }), /*#__PURE__*/_jsxs("div", { className: "w-form-item-center", style: _extends({}, buttonsContainer), children: [/*#__PURE__*/_jsx(Button, _extends({ className: "uiw-admin-proform-btn", style: { display: showSaveButton ? 'flex' : 'none' }, disabled: !canSubmit(), type: "primary", htmlType: "submit" }, saveButtonProps, { children: saveButtonProps.label || '提交' })), /*#__PURE__*/_jsx(Button, _extends({ className: "uiw-admin-proform-btn", style: { display: showResetButton ? 'flex' : 'none' }, onClick: resetForm }, resetButtonProps, { children: resetButtonProps.label || '重置' }))] })] }); } }); } export default FormDom;