UNPKG

@jannie-shao/components-antd4

Version:
227 lines 7.65 kB
import "antd/es/form/style"; import _Form from "antd/es/form"; import "antd/es/input/style"; import _Input from "antd/es/input"; import _extends from "@babel/runtime/helpers/extends"; import React, { useImperativeHandle, forwardRef } from 'react'; import { cloneDeep } from 'lodash'; import { PlusSquareOutlined } from '@ant-design/icons'; import Table from "../../../table"; import IconFont from "../../../icon-font"; import { rootPrefix } from "../../../style/config"; import { makerFun } from "../../maker/render-fun"; var prefix = rootPrefix + "-form-item"; var Item = /*#__PURE__*/forwardRef(function (props, ref) { var maxKey = props.maxKey, eleCount = props.eleCount, operation = props.operation, model = props.model, data = props.data, onChange = props.onChange; var _ref = model.props || {}, _ref$disabled = _ref.disabled, disabled = _ref$disabled === void 0 ? false : _ref$disabled, max = _ref.max, _ref$startIdx = _ref.startIdx, startIdx = _ref$startIdx === void 0 ? 0 : _ref$startIdx, _ref$snConfig = _ref.snConfig, snConfig = _ref$snConfig === void 0 ? {} : _ref$snConfig, _ref$showSN = _ref.showSN, showSN = _ref$showSN === void 0 ? true : _ref$showSN, _ref$useKeyAsSN = _ref.useKeyAsSN, useKeyAsSN = _ref$useKeyAsSN === void 0 ? false : _ref$useKeyAsSN, _ref$useOperation = _ref.useOperation, useOperation = _ref$useOperation === void 0 ? true : _ref$useOperation, opRender = _ref.opRender, _ref$checkOpt = _ref.checkOpt, checkOpt = _ref$checkOpt === void 0 ? function () { return true; } : _ref$checkOpt; var _snConfig$snKey = snConfig.snKey, snKey = _snConfig$snKey === void 0 ? 'sn' : _snConfig$snKey, _snConfig$snLabel = snConfig.snLabel, snLabel = _snConfig$snLabel === void 0 ? 'SN' : _snConfig$snLabel; var _add = operation.add, remove = operation.remove; var getDefaultSN = function getDefaultSN(record) { if (record === void 0) { record = {}; } return record[snKey] === undefined ? maxKey : record[snKey]; }; var handleAdd = function handleAdd(d) { var _ref2; if (d === void 0) { d = {}; } if (disabled) return; if (max && eleCount.current >= max) return; var defaultData = useKeyAsSN ? (_ref2 = {}, _ref2[snKey] = maxKey + 1, _ref2) : {}; var dataToAdd = _extends({}, d, defaultData); _add(dataToAdd); }; var handleRemove = function handleRemove(idx) { remove(idx); if (eleCount.current < 1) { handleAdd(); } }; var handleUpdateFields = function handleUpdateFields(idx, values) { if (values === void 0) { values = {}; } if (disabled) return; var dataNow = cloneDeep(data); if (!dataNow[idx]) { dataNow[idx] = {}; } Object.keys(values).forEach(function (key) { dataNow[idx][key] = values[key]; }); onChange && onChange(dataNow); }; useImperativeHandle(ref, function () { return _extends({}, operation, { add: function add(d) { if (d === void 0) { d = {}; } if (disabled) return; if (max && eleCount.current >= max) return; _add(d); }, remove: handleRemove }); }); return /*#__PURE__*/React.createElement("div", { className: prefix + "-table" }, /*#__PURE__*/React.createElement(Table, { pagination: false, dataSource: data.map(function (d, idx) { return _extends({}, d, { __rowKey__: "row:" + d[snKey] + ":" + idx }); }), rowKey: "__rowKey__", columns: [].concat(showSN ? [{ title: snLabel, dataIndex: snKey, width: 62, render: function render(_, record, idx) { if (record === void 0) { record = {}; } if (!useKeyAsSN) { return startIdx + idx; } return /*#__PURE__*/React.createElement(_Form.Item, { key: [idx, snKey], name: [idx, snKey], fieldKey: [idx, snKey], initialValue: getDefaultSN(record) }, /*#__PURE__*/React.createElement(_Input, { bordered: false, style: { color: 'rgba(0, 0, 0, 0.85)', cursor: 'default' }, disabled: true })); } }] : [], model.items.map(function (item) { var label = typeof item === 'string' ? item : item.label; return { title: label, dataIndex: item.name, render: function render(_, record, idx) { if (record === void 0) { record = {}; } var sn = getDefaultSN(record); var recordInfo = { sn: sn, record: record, idx: idx, dataSource: data }; var updateFields = function updateFields(values) { return handleUpdateFields(idx, values); }; // 构造子组件 var itemNow = cloneDeep(item); // 获取子组件的 props 并改造 onChange 事件 itemNow.props = typeof itemNow.props === 'function' ? itemNow.props(recordInfo) : itemNow.props || {}; itemNow.props.disabled = disabled || itemNow.props.disabled; if (itemNow.props.onChange) { itemNow.props.onChange = function () { var _item$props; for (var _len = arguments.length, arg = new Array(_len), _key = 0; _key < _len; _key++) { arg[_key] = arguments[_key]; } return (_item$props = item.props).onChange.apply(_item$props, [_extends({}, recordInfo, { updateFields: updateFields })].concat(arg)); }; } return /*#__PURE__*/React.createElement(_Form.Item, _extends({}, item.formProps || {}, { key: [idx, item.name], name: [idx, item.name], fieldKey: [idx, item.name] }), typeof item.render === 'function' ? item.render(_extends({}, recordInfo, { updateFields: updateFields })) : makerFun(itemNow)); } }; }), useOperation ? [{ title: 'Operation', dataIndex: '__OPERATION', render: function render(_, record, idx) { if (record === void 0) { record = {}; } if (disabled) return /*#__PURE__*/React.createElement(React.Fragment, null); var isLast = idx === data.length - 1 && !(max && data.length >= max); var isOnly = idx === 0 && isLast; var optConfig = { record: record, idx: idx, maxKey: maxKey, isLast: isLast, isOnly: isOnly }; var render = opRender ? opRender(optConfig, { add: handleAdd, remove: handleRemove }) : null; if (render) return render; var opts = []; if (!isOnly && checkOpt({ type: 'remove', optConfig: optConfig })) { opts.push( /*#__PURE__*/React.createElement(IconFont.Delete, { key: "remove", onClick: function onClick() { return handleRemove(idx); }, className: prefix + "-table-operation" })); } if (isLast && checkOpt({ type: 'add', optConfig: optConfig })) { opts.push( /*#__PURE__*/React.createElement(PlusSquareOutlined, { key: "add", onClick: function onClick() { return handleAdd(); }, className: prefix + "-table-operation" })); } return opts; } }] : []) })); }); export default Item;