@ant-design/pro-form
Version:
237 lines (236 loc) • 12.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ProFormListItem = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _icons = require("@ant-design/icons");
var _proProvider = require("@ant-design/pro-provider");
var _antd = require("antd");
var _classnames = _interopRequireDefault(require("classnames"));
var _toArray = _interopRequireDefault(require("rc-util/lib/Children/toArray"));
var _set = _interopRequireDefault(require("rc-util/lib/utils/set"));
var _react = _interopRequireWildcard(require("react"));
var _ = require(".");
var _EditOrReadOnlyContext = require("../../BaseForm/EditOrReadOnlyContext");
var _helpers = require("../../helpers");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["creatorButtonProps", "deleteIconProps", "copyIconProps", "itemContainerRender", "itemRender", "alwaysShowItemLabel", "prefixCls", "creatorRecord", "action", "actionGuard", "children", "actionRender", "fields", "meta", "field", "index", "formInstance", "originName", "containerClassName", "containerStyle", "min", "max", "count"];
/** Antd 自带的toArray 不支持方法,所以需要自己搞一个 */
var listToArray = function listToArray(children) {
if (Array.isArray(children)) {
return children;
}
if (typeof children === 'function') {
return [children];
}
return (0, _toArray.default)(children);
};
var ProFormListItem = exports.ProFormListItem = function ProFormListItem(props) {
var _ConfigProvider$useCo, _formInstance$getFiel2;
var creatorButtonProps = props.creatorButtonProps,
deleteIconProps = props.deleteIconProps,
copyIconProps = props.copyIconProps,
itemContainerRender = props.itemContainerRender,
itemRender = props.itemRender,
alwaysShowItemLabel = props.alwaysShowItemLabel,
prefixCls = props.prefixCls,
creatorRecord = props.creatorRecord,
action = props.action,
actionGuard = props.actionGuard,
children = props.children,
actionRender = props.actionRender,
fields = props.fields,
meta = props.meta,
field = props.field,
index = props.index,
formInstance = props.formInstance,
originName = props.originName,
containerClassName = props.containerClassName,
containerStyle = props.containerStyle,
min = props.min,
max = props.max,
count = props.count,
rest = (0, _objectWithoutProperties2.default)(props, _excluded);
var _useContext = (0, _react.useContext)(_proProvider.ProProvider),
hashId = _useContext.hashId;
var _ref = ((_ConfigProvider$useCo = _antd.ConfigProvider.useConfig) === null || _ConfigProvider$useCo === void 0 ? void 0 : _ConfigProvider$useCo.call(_antd.ConfigProvider)) || {
componentSize: 'middle'
},
componentSize = _ref.componentSize;
var listContext = (0, _react.useContext)(_.FormListContext);
var unmountedRef = (0, _react.useRef)(false);
var _useContext2 = (0, _react.useContext)(_EditOrReadOnlyContext.EditOrReadOnlyContext),
mode = _useContext2.mode;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
loadingRemove = _useState2[0],
setLoadingRemove = _useState2[1];
var _useState3 = (0, _react.useState)(false),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
loadingCopy = _useState4[0],
setLoadingCopy = _useState4[1];
(0, _react.useEffect)(function () {
return function () {
unmountedRef.current = true;
};
}, []);
var getCurrentRowData = function getCurrentRowData() {
return formInstance.getFieldValue([listContext.listName, originName, index === null || index === void 0 ? void 0 : index.toString()].flat(1).filter(function (item) {
return item !== null && item !== undefined;
}));
};
var formListAction = {
getCurrentRowData: getCurrentRowData,
setCurrentRowData: function setCurrentRowData(data) {
var _formInstance$getFiel;
var oldTableDate = (formInstance === null || formInstance === void 0 || (_formInstance$getFiel = formInstance.getFieldsValue) === null || _formInstance$getFiel === void 0 ? void 0 : _formInstance$getFiel.call(formInstance)) || {};
var rowKeyName = [listContext.listName, originName, index === null || index === void 0 ? void 0 : index.toString()].flat(1).filter(function (item) {
return item !== null && item !== undefined;
});
var updateValues = (0, _set.default)(oldTableDate, rowKeyName, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, getCurrentRowData()), data || {}));
return formInstance.setFieldsValue(updateValues);
}
};
var childrenArray = listToArray(children).map(function (childrenItem) {
if (typeof childrenItem === 'function') {
return childrenItem === null || childrenItem === void 0 ? void 0 : childrenItem(field, index, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, action), formListAction), count);
}
return childrenItem;
}).map(function (childrenItem, itemIndex) {
if ( /*#__PURE__*/_react.default.isValidElement(childrenItem)) {
var _childrenItem$props;
return /*#__PURE__*/_react.default.cloneElement(childrenItem, (0, _objectSpread2.default)({
key: childrenItem.key || (childrenItem === null || childrenItem === void 0 || (_childrenItem$props = childrenItem.props) === null || _childrenItem$props === void 0 ? void 0 : _childrenItem$props.name) || itemIndex
}, (childrenItem === null || childrenItem === void 0 ? void 0 : childrenItem.props) || {}));
}
return childrenItem;
});
var copyIcon = (0, _react.useMemo)(function () {
if (mode === 'read') return null;
/** 复制按钮的配置 */
if (copyIconProps === false || max === count) return null;
var _ref2 = copyIconProps,
_ref2$Icon = _ref2.Icon,
Icon = _ref2$Icon === void 0 ? _icons.CopyOutlined : _ref2$Icon,
tooltipText = _ref2.tooltipText;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Tooltip, {
title: tooltipText,
children: loadingCopy ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.LoadingOutlined, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, {
className: (0, _classnames.default)("".concat(prefixCls, "-action-icon action-copy"), hashId),
onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
var row;
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
setLoadingCopy(true);
row = formInstance === null || formInstance === void 0 ? void 0 : formInstance.getFieldValue([listContext.listName, originName, field.name].filter(function (item) {
return item !== undefined;
}).flat(1));
_context.next = 4;
return action.add(row);
case 4:
setLoadingCopy(false);
case 5:
case "end":
return _context.stop();
}
}, _callee);
}))
})
}, "copy");
}, [copyIconProps, max, count, loadingCopy, prefixCls, hashId, formInstance, listContext.listName, field.name, originName, action]);
var deleteIcon = (0, _react.useMemo)(function () {
if (mode === 'read') return null;
if (deleteIconProps === false || min === count) return null;
var _ref4 = deleteIconProps,
_ref4$Icon = _ref4.Icon,
Icon = _ref4$Icon === void 0 ? _icons.DeleteOutlined : _ref4$Icon,
tooltipText = _ref4.tooltipText;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Tooltip, {
title: tooltipText,
children: loadingRemove ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.LoadingOutlined, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, {
className: (0, _classnames.default)("".concat(prefixCls, "-action-icon action-remove"), hashId),
onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2() {
return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
setLoadingRemove(true);
_context2.next = 3;
return action.remove(field.name);
case 3:
if (!unmountedRef.current) {
setLoadingRemove(false);
}
case 4:
case "end":
return _context2.stop();
}
}, _callee2);
}))
})
}, "delete");
}, [deleteIconProps, min, count, loadingRemove, prefixCls, hashId, action, field.name]);
var defaultActionDom = (0, _react.useMemo)(function () {
return [copyIcon, deleteIcon].filter(function (item) {
return item !== null && item !== undefined;
});
}, [copyIcon, deleteIcon]);
var actions = (actionRender === null || actionRender === void 0 ? void 0 : actionRender(field, action, defaultActionDom, count)) || defaultActionDom;
var dom = actions.length > 0 && mode !== 'read' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-action"), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-action-small"), componentSize === 'small'), hashId),
children: actions
}) : null;
var options = {
name: rest.name,
field: field,
index: index,
record: formInstance === null || formInstance === void 0 || (_formInstance$getFiel2 = formInstance.getFieldValue) === null || _formInstance$getFiel2 === void 0 ? void 0 : _formInstance$getFiel2.call(formInstance, [listContext.listName, originName, field.name].filter(function (item) {
return item !== undefined;
}).flat(1)),
fields: fields,
operation: action,
meta: meta
};
var _useGridHelpers = (0, _helpers.useGridHelpers)(),
grid = _useGridHelpers.grid;
var itemContainer = (itemContainerRender === null || itemContainerRender === void 0 ? void 0 : itemContainerRender(childrenArray, options)) || childrenArray;
var contentDom = (itemRender === null || itemRender === void 0 ? void 0 : itemRender({
listDom: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-container"), containerClassName, hashId),
style: (0, _objectSpread2.default)({
width: grid ? '100%' : undefined
}, containerStyle),
children: itemContainer
}),
action: dom
}, options)) || /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-item"), hashId, (0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-item-default"), alwaysShowItemLabel === undefined), "".concat(prefixCls, "-item-show-label"), alwaysShowItemLabel)),
style: {
display: 'flex',
alignItems: 'flex-end'
},
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-container"), containerClassName, hashId),
style: (0, _objectSpread2.default)({
width: grid ? '100%' : undefined
}, containerStyle),
children: itemContainer
}), dom]
});
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_.FormListContext.Provider, {
value: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, field), {}, {
listName: [listContext.listName, originName, field.name].filter(function (item) {
return item !== undefined;
}).flat(1)
}),
children: contentDom
});
};