@jannie-shao/components-antd4
Version:
81 lines • 3.08 kB
JavaScript
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;