UNPKG

@flatbiz/antd

Version:
278 lines (274 loc) 14.1 kB
/*! @flatjs/forge MIT @flatbiz/antd */ import _PlusOutlined from '@ant-design/icons/es/icons/PlusOutlined.js'; import { classNames } from '@dimjs/utils/class-names/class-names'; import { c as _toConsumableArray, b as _objectSpread2 } from './_rollupPluginBabelHelpers-BYm17lo8.js'; import { hooks } from '@wove/react/hooks'; import { useRef, Fragment, createElement, isValidElement } from 'react'; import { Form, ConfigProvider, Empty } from 'antd'; import { toArray, isUndefinedOrNull } from '@flatbiz/utils'; import { B as ButtonWrapper } from './button-wrapper-l9FUsrWl.js'; import { C as CardWrapper } from './card-wrapper-w-JbDJNk.js'; import { D as DeleteNode } from './delete-node-BF-2Gsyu.js'; import { E as EasyForm } from './form-wa_Ck4Vl.js'; import { fbaHooks } from './fba-hooks/index.js'; import { f as fbaUtils } from './fba-utils-Dfbczn1S.js'; import { F as FormItemHidden } from './form-item-hidden-BtQvJEx7.js'; import { F as FormItemWrapper } from './form-item-wrapper-BneADBjX.js'; import { T as TipsWrapper } from './tips-wrapper-Bf9nfZq3.js'; import { jsx, jsxs } from 'react/jsx-runtime'; var EditableCard = function EditableCard(props) { var form = Form.useFormInstance(); var formListName = toArray(props.formListName); var formListOperationRef = useRef(); var forceUpdate = hooks.useForceUpdate(); var _ConfigProvider$useCo = ConfigProvider.useConfig(), componentDisabled = _ConfigProvider$useCo.componentDisabled; var formListCompleteName = props.formListCompleteName || formListName; var validateRowFields = hooks.useCallbackRef(function (formItemPrevName, nameList) { return new Promise(function ($return, $error) { return Promise.resolve(form.validateFields(nameList.map(function (item) { return [].concat(_toConsumableArray(formItemPrevName), _toConsumableArray(toArray(item))); }))).then(function ($await_1) { try { return $return(); } catch ($boundEx) { return $error($boundEx); } }, $error); }); }); var getCurrentRowData = hooks.useCallbackRef(function (formItemPrevName) { return form.getFieldValue(formItemPrevName); }); var setCurrentRowField = hooks.useCallbackRef(function (formItemPrevName, dataIndexConfigs) { fbaUtils.setFormFieldsAndTriggerValuesChange(form, dataIndexConfigs.map(function (item) { return { name: [].concat(_toConsumableArray(formListCompleteName), [formItemPrevName], _toConsumableArray(toArray(item.name))), value: item.value }; })); forceUpdate(); }); var columns = fbaHooks.useMemoCustom(function () { return props.columns.map(function (column) { var _column$formItemProps; var title = column.title; var titleRender = title; if (column.tips) { titleRender = /*#__PURE__*/jsx(TipsWrapper, { tipType: "popover", popoverProps: { content: column.tips }, children: title }); } var required = column.required; if (!required && typeof column.formItemProps === 'object' && (_column$formItemProps = column.formItemProps.rules) !== null && _column$formItemProps !== void 0 && _column$formItemProps.length) { required = !!column.formItemProps.rules.find(function (item) { return !!item['required']; }); } var dataIndex = toArray(column['dataIndex']); return { dataIndex: dataIndex, render: function render(index, fieldData, operation) { var _column$remove, _column$hidden, _formItemProps, _column$render4; var value = form.getFieldValue([].concat(_toConsumableArray(formListCompleteName), [fieldData.name], _toConsumableArray(dataIndex))); if (isUndefinedOrNull(column.render)) { return /*#__PURE__*/jsx(Fragment, { children: value }); } var rowFormItemCompleteName = [].concat(_toConsumableArray(formListCompleteName), [fieldData.name]); var editable = typeof (column === null || column === void 0 ? void 0 : column.editable) === 'function' ? column === null || column === void 0 ? void 0 : column.editable({ index: index, getCurrentRowData: getCurrentRowData.bind(null, rowFormItemCompleteName) }, index) : column === null || column === void 0 ? void 0 : column.editable; var renderOperationProps = { index: index, editable: editable, add: operation.add, remove: operation.remove, move: operation.move, rowFormItemName: fieldData.name, rowFormItemCompleteName: rowFormItemCompleteName, setCurrentRowField: setCurrentRowField.bind(null, fieldData.name), validateRowFields: validateRowFields.bind(null, rowFormItemCompleteName), getCurrentRowData: getCurrentRowData.bind(null, rowFormItemCompleteName), forceUpdate: forceUpdate }; if ((_column$remove = column.remove) !== null && _column$remove !== void 0 && _column$remove.call(column, renderOperationProps, index)) { return /*#__PURE__*/jsx(Fragment, {}); } if ((_column$hidden = column.hidden) !== null && _column$hidden !== void 0 && _column$hidden.call(column, renderOperationProps, index)) { return /*#__PURE__*/jsx(FormItemHidden, { name: [fieldData.name].concat(_toConsumableArray(dataIndex)) }, fieldData.key); } var formItemProps = typeof column.formItemProps === 'function' ? column.formItemProps(renderOperationProps) : column.formItemProps; if (!((_formItemProps = formItemProps) !== null && _formItemProps !== void 0 && (_formItemProps = _formItemProps.rules) !== null && _formItemProps !== void 0 && _formItemProps.length) && required) { formItemProps = _objectSpread2(_objectSpread2({}, formItemProps), {}, { rules: [{ required: true, message: '' }] }); } if (editable === true) { var _column$render2; if (column.formItemContainer) { var _column$render; return column.formItemContainer(/*#__PURE__*/createElement(FormItemWrapper, _objectSpread2(_objectSpread2({ label: titleRender }, formItemProps), {}, { name: [fieldData.name].concat(_toConsumableArray(dataIndex)), span: column.gridNumber, key: fieldData.key }), (_column$render = column.render) === null || _column$render === void 0 ? void 0 : _column$render.call(column, renderOperationProps))); } return /*#__PURE__*/createElement(FormItemWrapper, _objectSpread2(_objectSpread2({ label: titleRender }, formItemProps), {}, { name: [fieldData.name].concat(_toConsumableArray(dataIndex)), span: column.gridNumber, key: fieldData.key }), (_column$render2 = column.render) === null || _column$render2 === void 0 ? void 0 : _column$render2.call(column, renderOperationProps)); } if (column.formItemContainer) { var _column$render3; return column.formItemContainer(/*#__PURE__*/jsx(FormItemWrapper, _objectSpread2(_objectSpread2({ label: titleRender, span: column.gridNumber }, formItemProps), {}, { children: (_column$render3 = column.render) === null || _column$render3 === void 0 ? void 0 : _column$render3.call(column, renderOperationProps) }), fieldData.key)); } return /*#__PURE__*/jsx(FormItemWrapper, _objectSpread2(_objectSpread2({ label: titleRender, span: column.gridNumber }, formItemProps), {}, { children: (_column$render4 = column.render) === null || _column$render4 === void 0 ? void 0 : _column$render4.call(column, renderOperationProps) }), fieldData.key); } }; }); }, [props.columns, form, formListCompleteName, setCurrentRowField, validateRowFields, getCurrentRowData, forceUpdate]); var className = classNames('editable-card', props.className); return /*#__PURE__*/jsx("div", { className: className, style: props.style, children: /*#__PURE__*/jsx(Form.List, { name: formListName, rules: props.rules, initialValue: props.initialValue, children: function children(fields, formListOperation, _ref) { var _props$contentBeforeR, _props$contentAfterRe; var errors = _ref.errors; formListOperationRef.current = formListOperation; return /*#__PURE__*/jsxs("div", { style: { borderRadius: '6px', border: errors !== null && errors !== void 0 && errors.length ? '1px solid #ff4d4f' : '1px solid transparent' }, children: [(_props$contentBeforeR = props.contentBeforeRender) === null || _props$contentBeforeR === void 0 ? void 0 : _props$contentBeforeR.call(props, formListOperation, fields.length), fields.map(function (fieldItem, index) { var _props$cardExtraRende, _props$cardEasyFormPr2; var title = props.onCustomGroupName ? props.onCustomGroupName(index) : index + 1; var extraData = { index: index, fields: fields, fieldItem: fieldItem, operation: formListOperation, required: props.required, key: "".concat(fieldItem.key) }; if (props.onCustomWrapper) { var _props$cardEasyFormPr; return /*#__PURE__*/jsx(Fragment, { children: props.onCustomWrapper(/*#__PURE__*/jsx(EasyForm, _objectSpread2(_objectSpread2({ nonuseFormWrapper: true }, props.cardEasyFormProps), {}, { style: _objectSpread2({ padding: 0, margin: 0 }, (_props$cardEasyFormPr = props.cardEasyFormProps) === null || _props$cardEasyFormPr === void 0 ? void 0 : _props$cardEasyFormPr.style), children: columns.map(function (column) { return column.render(index, fieldItem, formListOperation); }) })), extraData) }, fieldItem.key); } var cardExtraRenderResult = (_props$cardExtraRende = props.cardExtraRender) === null || _props$cardExtraRende === void 0 ? void 0 : _props$cardExtraRende.call(props, extraData); return /*#__PURE__*/jsx(CardWrapper, { className: props.cardClassName, title: title, size: "small", style: _objectSpread2({ padding: 0, margin: '0 0 15px 0' }, props.cardStyle), bodyStyle: { paddingBottom: 0 } // styles={{ body: { paddingBottom: 0 } }} , extra: /*#__PURE__*/isValidElement(cardExtraRenderResult) ? cardExtraRenderResult : /*#__PURE__*/jsxs("div", { style: { display: 'inline-flex', alignItems: 'center', gap: '8px' }, children: [cardExtraRenderResult === null || cardExtraRenderResult === void 0 ? void 0 : cardExtraRenderResult['before'], /*#__PURE__*/jsx(DeleteNode, { style: { color: 'red' }, hidden: props.hiddenDeleteBtn || props.required && fields.length === 1 || componentDisabled, onDelete: function onDelete() { formListOperation.remove(index); } }), cardExtraRenderResult === null || cardExtraRenderResult === void 0 ? void 0 : cardExtraRenderResult['after']] }), children: /*#__PURE__*/jsx(EasyForm, _objectSpread2(_objectSpread2({ nonuseFormWrapper: true }, props.cardEasyFormProps), {}, { style: _objectSpread2({ padding: 0, margin: 0 }, (_props$cardEasyFormPr2 = props.cardEasyFormProps) === null || _props$cardEasyFormPr2 === void 0 ? void 0 : _props$cardEasyFormPr2.style), children: columns.map(function (column) { return column.render(index, fieldItem, formListOperation); }) })) }, fieldItem.key); }), fields.length === 0 ? /*#__PURE__*/jsx("div", { className: "editable-card-empty", children: /*#__PURE__*/jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE }) }) : null, /*#__PURE__*/jsx(ButtonWrapper, { block: true, hidden: props.hiddenFooterBtn || componentDisabled, type: "dashed", icon: /*#__PURE__*/jsx(_PlusOutlined, {}), onClick: function onClick() { var _props$addRowDefaultV; var defaultValues = (_props$addRowDefaultV = props.addRowDefaultValues) === null || _props$addRowDefaultV === void 0 ? void 0 : _props$addRowDefaultV.call(props); formListOperation.add(_objectSpread2({}, defaultValues)); }, children: props.addRowBtnName || '新增' }), (_props$contentAfterRe = props.contentAfterRender) === null || _props$contentAfterRe === void 0 ? void 0 : _props$contentAfterRe.call(props, formListOperation, fields.length), errors.length ? /*#__PURE__*/jsx(Form.ErrorList, { errors: [/*#__PURE__*/jsx("div", { style: { color: '#ff4d4f', padding: '5px' }, children: errors }, "0")] }) : null] }); } }) }); }; export { EditableCard as E }; //# sourceMappingURL=editable-card-nPOaeQf0.js.map