UNPKG

@jannie-shao/components-antd4

Version:
81 lines 3.08 kB
import "antd/es/form/style"; import _Form from "antd/es/form"; import _extends from "@babel/runtime/helpers/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose"; var _excluded = ["model"]; import React, { useImperativeHandle, forwardRef, useEffect, useMemo, useRef, useState } from 'react'; import { max } from 'lodash'; import Item from "./Item"; var FormItemTable = /*#__PURE__*/forwardRef(function (_ref, ref) { var model = _ref.model, props = _objectWithoutPropertiesLoose(_ref, _excluded); var value = props.value; var _ref2 = model.props || {}, _ref2$startIdx = _ref2.startIdx, startIdx = _ref2$startIdx === void 0 ? 0 : _ref2$startIdx, _ref2$showSN = _ref2.showSN, showSN = _ref2$showSN === void 0 ? true : _ref2$showSN, _ref2$useKeyAsSN = _ref2.useKeyAsSN, useKeyAsSN = _ref2$useKeyAsSN === void 0 ? false : _ref2$useKeyAsSN, _ref2$snConfig = _ref2.snConfig, snConfig = _ref2$snConfig === void 0 ? {} : _ref2$snConfig; var _snConfig$snKey = snConfig.snKey, snKey = _snConfig$snKey === void 0 ? 'sn' : _snConfig$snKey; var compItem = useRef(); var defaultKey = useMemo(function () { return startIdx || 0; }, [startIdx]); var defaultData = useMemo(function () { var _ref3; return showSN && useKeyAsSN ? [(_ref3 = {}, _ref3[snKey] = defaultKey, _ref3)] : [{}]; }, [showSN, useKeyAsSN, defaultKey]); var _useState = useState(defaultKey), maxKey = _useState[0], setMaxKey = _useState[1]; var _useState2 = useState(defaultData), data = _useState2[0], setData = _useState2[1]; // 用于透出 add 方法时,实现条数限制 var eleCount = useRef(1); useEffect(function () { var val = value || []; if (val.length === 0) { (props === null || props === void 0 ? void 0 : props.onChange) && props.onChange(defaultData); return; } var unFillValLen = val.filter(function (v) { return (v === null || v === void 0 ? void 0 : v[snKey]) === undefined; }).length; var fillValSN = val.filter(function (v) { return (v === null || v === void 0 ? void 0 : v[snKey]) !== undefined; }).map(function (v) { return v[snKey]; }); var maxSN = maxKey.current; if (unFillValLen === 0 && fillValSN.length === 0) { maxSN = defaultKey; } else if (fillValSN.length === 0) { maxSN = defaultKey + unFillValLen - 1; } else { maxSN = max(fillValSN) + unFillValLen; } setMaxKey(maxSN); setData(value); eleCount.current = value.length; }, [value]); useImperativeHandle(ref, function () { return _extends({}, compItem.current || {}); }); return /*#__PURE__*/React.createElement(_Form.List, props, function (_, operation) { return /*#__PURE__*/React.createElement(Item, { ref: compItem, maxKey: maxKey, eleCount: eleCount, operation: operation, model: model, data: data, onChange: props === null || props === void 0 ? void 0 : props.onChange }); }); }); export default FormItemTable;