UNPKG

@jannie-shao/components-antd4

Version:
152 lines (151 loc) 7.06 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")); var _react = _interopRequireWildcard(require("react")); var _lodash = require("lodash"); var _icons = require("@ant-design/icons"); var _iconFont = _interopRequireDefault(require("../../../icon-font")); var _config = require("../../../style/config"); 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-item"; var Item = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) { var eleCount = props.eleCount, fields = props.fields, operation = props.operation, model = props.model, data = props.data, onChange = props.onChange, itemRender = props.itemRender; var add = operation.add, remove = operation.remove; var _ref = model.props || {}, _ref$layout = _ref.layout, layout = _ref$layout === void 0 ? 'vertical' : _ref$layout, max = _ref.max, _ref$disabled = _ref.disabled, disabled = _ref$disabled === void 0 ? false : _ref$disabled; var handleAdd = function handleAdd(d) { if (d === void 0) { d = {}; } if (disabled) return; if (max && eleCount.current >= max) return; add(d); }; var handleUpdateFields = function handleUpdateFields(idx, values) { if (values === void 0) { values = {}; } if (disabled) return; var dataNow = (0, _lodash.cloneDeep)(data); if (!dataNow[idx]) { dataNow[idx] = {}; } Object.keys(values).forEach(function (key) { dataNow[idx][key] = values[key]; }); onChange && onChange(dataNow); }; var makeItems = function makeItems(_ref2, idx) { var key = _ref2.key, name = _ref2.name, fieldKey = _ref2.fieldKey; var recordInfo = { sn: key, record: data[idx] || {}, idx: idx, dataSource: data }; var updateFields = function updateFields(values) { return handleUpdateFields(idx, values); }; // 获取子组件 var items = Object.prototype.toString.call(model.items) === '[object Function]' ? model.items((0, _extends2["default"])({}, recordInfo, { updateFields: updateFields })) : model.items; // 构造子组件 return items.map(function (item) { var itemNow = (0, _lodash.cloneDeep)(item); itemNow.name = [name, item.name]; itemNow.formProps = (0, _extends2["default"])({}, item.formProps || {}, { name: [name, item.name], key: [key, item.name], fieldKey: [fieldKey, item.name] }); // 获取子组件的 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, [(0, _extends2["default"])({}, recordInfo, { updateFields: updateFields })].concat(arg)); }; } return itemRender([itemNow]); }); }; (0, _react.useImperativeHandle)(ref, function () { return (0, _extends2["default"])({}, operation, { add: handleAdd }); }); return (fields || []).map(function (field, idx) { var isLast = idx === data.length - 1 && !(max && data.length === max); var isOnly = idx === 0 && isLast; var canAdd = isLast && !disabled; var canRemove = !isOnly && !disabled; return /*#__PURE__*/_react["default"].createElement("div", { key: field.key, className: prefix + "-list", "data-layout": layout }, layout === 'inline' && /*#__PURE__*/_react["default"].createElement(_space["default"], { className: prefix + "-list-item", align: "baseline" }, makeItems(field, idx), canRemove && /*#__PURE__*/_react["default"].createElement(_icons.MinusCircleOutlined, { onClick: function onClick() { return remove(idx); } }), canAdd && /*#__PURE__*/_react["default"].createElement(_icons.PlusCircleOutlined, { onClick: function onClick() { return handleAdd(); } })), layout === 'vertical' && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-list-item" }, /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-list-item-fields" }, makeItems(field, idx)), /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-list-item-opts" }, canRemove && /*#__PURE__*/_react["default"].createElement(_iconFont["default"].Delete, { onClick: function onClick() { return remove(idx); } }))), canAdd && /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-list-item" }, /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-list-item-fields" }, /*#__PURE__*/_react["default"].createElement(_button["default"], { type: "dashed", onClick: function onClick() { return handleAdd(); }, block: true, icon: /*#__PURE__*/_react["default"].createElement(_icons.PlusOutlined, null) }, "Add")), /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-list-item-opts" })))); }); }); var _default = Item; exports["default"] = _default;