UNPKG

@jannie-shao/components-antd4

Version:
274 lines (273 loc) 11.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; require("antd/es/button/style"); var _button = _interopRequireDefault(require("antd/es/button")); require("antd/es/space/style"); var _space = _interopRequireDefault(require("antd/es/space")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); require("antd/es/form/style"); var _form = _interopRequireDefault(require("antd/es/form")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames2 = _interopRequireDefault(require("classnames")); var _lodash = require("lodash"); var _icons = require("@ant-design/icons"); var _config = require("../style/config"); var _utils = require("../utils"); var _const = require("./const"); var _index = _interopRequireWildcard(require("./maker/index")); var _excluded = ["className", "isLoading", "layout", "col", "row", "perMaxWidth", "initialCol", "minCol", "model", "btnGroup", "onChange", "onSubmit", "onReset", "onCancel", "onValuesChange"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var prefix = _config.rootPrefix + "-form"; var CompForm = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) { var _classnames; var className = _ref.className, isLoading = _ref.isLoading, layout = _ref.layout, col = _ref.col, row = _ref.row, perMaxWidth = _ref.perMaxWidth, initialCol = _ref.initialCol, minCol = _ref.minCol, model = _ref.model, btnGroup = _ref.btnGroup, onChange = _ref.onChange, onSubmit = _ref.onSubmit, onReset = _ref.onReset, onCancel = _ref.onCancel, onValuesChange = _ref.onValuesChange, more = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded); var _Form$useForm = _form["default"].useForm(), form = _Form$useForm[0]; var compForm = (0, _react.useRef)(); var _useState = (0, _react.useState)([]), itemObj = _useState[0], setItemObj = _useState[1]; var _useState2 = (0, _react.useState)(false), showMore = _useState2[0], setShowMore = _useState2[1]; var _useState3 = (0, _react.useState)(col || initialCol || (0, _index.getRealCol)(compForm === null || compForm === void 0 ? void 0 : compForm.current, perMaxWidth, minCol)), realCol = _useState3[0], setRealCol = _useState3[1]; var ifUseHideShow = (0, _react.useMemo)(function () { return layout === 'horizontal' && col > -1 && row > 0; }, [layout, col, row]); var ifShowMoreA = (0, _react.useMemo)(function () { return ifUseHideShow && realCol * row <= model.length; }, [ifUseHideShow, realCol, row, model]); var customStyle = (0, _react.useMemo)(function () { if (!ifUseHideShow) return {}; var c = Number(realCol); var spaceWidth = (c - 1) * _const.GRID_GAP; return { gridTemplateColumns: "repeat(" + realCol + ", calc(calc(100% - " + spaceWidth + "px) / " + c + ")" }; }, [ifUseHideShow, realCol]); var formatFields = function formatFields(formData) { var dataNow = (0, _utils.filterEmptyObj)(formData) || {}; var dataCall = {}; Object.keys(dataNow).forEach(function (k) { var v = dataNow[k]; var temp = itemObj.filter(function (i) { return i.name === k; })[0] || {}; if (temp.type === 'KV' && Object.prototype.toString.call(v) === '[object Object]') { dataCall[v.key || k] = v.value || v; } else if (temp.type === 'OBJ' && Object.prototype.toString.call(v) === '[object Object]') { dataCall = (0, _extends2["default"])({}, dataCall, v); } else { dataCall[k] = v; } }); return (0, _utils.filterEmptyObj)(dataCall) || {}; }; var handleValueChange = function handleValueChange(changed, all) { if (changed === void 0) { changed = {}; } if (all === void 0) { all = {}; } onValuesChange(changed, all); // 字段值更新,格式化数据 var keysChanged = Object.keys(changed); var valueAll = formatFields(all); onChange(keysChanged, valueAll); }; var doSubmit = function doSubmit() { return setTimeout(function () { return form.submit(); }); }; var handleSubmit = function handleSubmit(formData) { if (formData === void 0) { formData = {}; } onSubmit(formatFields(formData)); }; var handleResetSubmit = function handleResetSubmit() { form.resetFields(); doSubmit(); }; var handleReset = function handleReset() { form.resetFields(); onReset(); }; var handleCancel = function handleCancel() { form.resetFields(); onCancel(); }; var doGetRealCol = (0, _lodash.debounce)(function () { setRealCol((0, _index.getRealCol)(compForm === null || compForm === void 0 ? void 0 : compForm.current, perMaxWidth, minCol)); }, 300); (0, _react.useEffect)(function () { var temp = []; model.forEach(function (m) { if (_const.SPEC_ITEM_KV.includes(m.type)) { temp.push({ name: m.name, type: 'KV' }); } else if (_const.SPEC_ITEM_OBJ.includes(m.type)) { temp.push({ name: m.name, type: 'OBJ' }); } }); setItemObj(temp); }, [model]); (0, _react.useEffect)(function () { if (layout === 'horizontal' && col === 0) { doGetRealCol(); window.addEventListener('resize', doGetRealCol); return function () { window.removeEventListener('resize', doGetRealCol); }; } return function () {}; }, []); (0, _react.useImperativeHandle)(ref, function () { return (0, _extends2["default"])({}, form, { getFieldsValue: function getFieldsValue(keys) { return formatFields(form.getFieldsValue(keys)); }, handleSubmit: function handleSubmit() { return doSubmit(); }, handleReset: handleReset, handleResetSubmit: handleResetSubmit }); }); return /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-parent", ref: compForm }, /*#__PURE__*/_react["default"].createElement(_form["default"], (0, _extends2["default"])({}, more, { className: (0, _classnames2["default"])(prefix, className, (_classnames = {}, _classnames[prefix + "-grid"] = ifUseHideShow, _classnames[prefix + "-grid-hide-" + realCol * row] = ifUseHideShow && !showMore, _classnames)), form: form, layout: layout, onFinish: handleSubmit, scrollToFirstError: true, onValuesChange: handleValueChange, style: (0, _extends2["default"])({}, more.style || {}, customStyle) }), (0, _index["default"])(model), btnGroup.length > 0 && /*#__PURE__*/_react["default"].createElement(_form["default"].Item, { className: prefix + "-actions", style: ifUseHideShow ? { gridColumnStart: realCol } : {}, label: layout === 'horizontal' ? ' ' : '', colon: false }, /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-actions-content" }, ifShowMoreA && /*#__PURE__*/_react["default"].createElement("a", { onClick: function onClick() { return setShowMore(!showMore); } }, /*#__PURE__*/_react["default"].createElement(_space["default"], { size: 5 }, showMore ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", null, "Collapse"), /*#__PURE__*/_react["default"].createElement(_icons.UpOutlined, null)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", null, "Expand"), /*#__PURE__*/_react["default"].createElement(_icons.DownOutlined, null)))), /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-btns" }, btnGroup.map(function (btn) { var b = typeof btn === 'string' ? { opType: btn } : btn; if (b.opType === 'submit') { return /*#__PURE__*/_react["default"].createElement(_button["default"], { key: "submit", type: b.type || 'primary', htmlType: "submit", loading: isLoading }, b.btnText || 'Submit'); } if (b.opType === 'resetSubmit') { return /*#__PURE__*/_react["default"].createElement(_button["default"], { key: "resetSubmit", type: b.type || 'link', onClick: handleResetSubmit, loading: isLoading }, b.btnText || 'Reset'); } if (b.opType === 'reset') { return /*#__PURE__*/_react["default"].createElement(_button["default"], { key: "reset", type: b.type || 'link', onClick: handleReset, loading: isLoading }, b.btnText || 'Reset'); } if (b.opType === 'cancel') { return /*#__PURE__*/_react["default"].createElement(_button["default"], { key: "cancel", type: b.type || 'default', onClick: handleCancel, disabled: isLoading }, b.btnText || 'Cancel'); } if (b.render && typeof b.render === 'function' && !/[A-Z]/.test(b.render.name[0])) { return b.render({ loading: isLoading }); } return ''; })))))); }); CompForm.propTypes = { className: _propTypes["default"].string, isLoading: _propTypes["default"].bool, layout: _propTypes["default"].string, col: _propTypes["default"].number, row: _propTypes["default"].number, perMaxWidth: _propTypes["default"].number, initialCol: _propTypes["default"].number, minCol: _propTypes["default"].number, model: _propTypes["default"].array, btnGroup: _propTypes["default"].array, onChange: _propTypes["default"].func, onSubmit: _propTypes["default"].func, onReset: _propTypes["default"].func, onCancel: _propTypes["default"].func, onValuesChange: _propTypes["default"].func }; CompForm.defaultProps = { className: '', isLoading: false, layout: 'inline', col: -1, row: 1, perMaxWidth: 240, initialCol: 0, minCol: 1, model: [], btnGroup: ['submit', 'cancel'], onChange: function onChange() {}, onSubmit: function onSubmit() {}, onReset: function onReset() {}, onCancel: function onCancel() {}, onValuesChange: function onValuesChange() {} }; var _default = CompForm; exports["default"] = _default;