UNPKG

@flatbiz/antd

Version:
776 lines (757 loc) 36.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 { b as _objectSpread2, a as _slicedToArray, _ as _objectWithoutProperties, c as _toConsumableArray } from './_rollupPluginBabelHelpers-BspM60Sw.js'; import { useMemo, useState, useEffect, Fragment, useRef, isValidElement } from 'react'; import { Form, Checkbox, InputNumber, Radio, Tag, Space, Button, message, Table } from 'antd'; import { toArray, arrayField2LabelValue, isUndefinedOrNull } from '@flatbiz/utils'; import { B as ButtonWrapper } from './button-wrapper-BGjkUPpk.js'; import { T as TextSymbolWrapper } from './symbol-DcM8okBP.js'; import { T as TipsWrapper } from './tips-wrapper-DvbgHMwl.js'; import { isArray } from '@dimjs/lang/is-array'; import { F as FormItemHidden } from './form-item-hidden-BtQvJEx7.js'; import { extend } from '@dimjs/utils/extend/extend'; import { useMemoizedFn } from 'ahooks'; import { t as tableCellRender } from './cell-render-CTYJNYaY.js'; import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime'; import { D as DatePickerWrapper } from './date-BRcPn0kr.js'; import { D as DateRangePickerWrapper } from './date-range-picker-wrapper-CIlffuw2.js'; import { I as InputWrapper } from './input-wrapper-BlzWXhi9.js'; import { S as SelectorWrapper } from './selector-wrapper-BQPBflNE.js'; import { S as SwitchWrapper } from './switch-wrapper-4CaXzwYq.js'; import { isBoolean } from '@dimjs/lang/is-boolean'; import { isNumber } from '@dimjs/lang/is-number'; import { isString } from '@dimjs/lang/is-string'; import { I as InputTextAreaWrapper } from './input-text-area-wrapper-xOYbr_W-.js'; import { U as UploadWrapper } from './upload-wrapper-DmZglNR4.js'; import _DeleteOutlined from '@ant-design/icons/es/icons/DeleteOutlined.js'; var getEditable = function getEditable(editable, tableRowIndex) { return typeof editable === 'boolean' ? editable : editable === null || editable === void 0 ? void 0 : editable({ tableRowIndex: tableRowIndex }); }; var CheckboxGroupFormItemContent = function CheckboxGroupFormItemContent(props) { var _props$fieldConfig = props.fieldConfig, editableConfig = _props$fieldConfig.editableConfig, editable = _props$fieldConfig.editable, render = _props$fieldConfig.render; var editableComptProps = editableConfig.editableComptProps; var options = useMemo(function () { return editableComptProps.options || []; }, [editableComptProps.options]); var onChange = useMemoizedFn(function (value) { var _props$onChange, _editableComptProps$o; (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, value); (_editableComptProps$o = editableComptProps.onChange) === null || _editableComptProps$o === void 0 || _editableComptProps$o.call(editableComptProps, value); }); if (editable) { return /*#__PURE__*/jsx(Checkbox.Group, _objectSpread2(_objectSpread2({}, editableComptProps), {}, { value: props.value, onChange: onChange })); } return /*#__PURE__*/jsx("span", { className: "editable-checkbox-group-view", children: render ? render(props.value, options) : tableCellRender.selectorCell(options)(props.value) }); }; var CheckboxGroupFormItem = function CheckboxGroupFormItem(props) { var formItemProps = props.fieldConfig.formItemProps; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-checkbox-group-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(CheckboxGroupFormItemContent, _objectSpread2({}, props)) })); }; var DatePickerWrapperFormItem = function DatePickerWrapperFormItem(props) { var _props$fieldConfig = props.fieldConfig, formItemProps = _props$fieldConfig.formItemProps, editableConfig = _props$fieldConfig.editableConfig; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-date-picker-wraper-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(DatePickerWrapper, _objectSpread2({ allowClear: true }, editableConfig.editableComptProps)) })); }; var FormItemContent$2 = function FormItemContent(props) { var _props$fieldConfig = props.fieldConfig, editableConfig = _props$fieldConfig.editableConfig, editable = _props$fieldConfig.editable, render = _props$fieldConfig.render; var editableComptProps = editableConfig.editableComptProps; var onChange = useMemoizedFn(function (data) { var _props$onChange, _editableComptProps$o; (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, data); editableComptProps === null || editableComptProps === void 0 || (_editableComptProps$o = editableComptProps.onChange) === null || _editableComptProps$o === void 0 || _editableComptProps$o.call(editableComptProps, data); }); var viewLabel = useMemo(function () { var value = toArray(props.value); if (editable) return undefined; return value.join('~'); }, [editable, props.value]); if (editable) { return /*#__PURE__*/jsx(DateRangePickerWrapper, _objectSpread2(_objectSpread2({ allowClear: true }, editableComptProps), {}, { value: props.value, onChange: onChange })); } return /*#__PURE__*/jsx("span", { className: "editable-date-range-picker-view", children: render ? render(props.value) : viewLabel }); }; var DateRangePickerWrapperFormItem = function DateRangePickerWrapperFormItem(props) { var formItemProps = props.fieldConfig.formItemProps; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-date-range-picker-wraper-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(FormItemContent$2, _objectSpread2({}, props)) })); }; var InputFormItem = function InputFormItem(props) { var _props$fieldConfig = props.fieldConfig, formItemProps = _props$fieldConfig.formItemProps, editableConfig = _props$fieldConfig.editableConfig; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, children: /*#__PURE__*/jsx(InputWrapper, _objectSpread2({ allowClear: true }, editableConfig.editableComptProps)) })); }; var InputNumberFormItem = function InputNumberFormItem(props) { var _props$fieldConfig = props.fieldConfig, formItemProps = _props$fieldConfig.formItemProps, editableConfig = _props$fieldConfig.editableConfig; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-input-number-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(InputNumber, _objectSpread2({}, editableConfig.editableComptProps)) })); }; var RadioGroupFormItemContent = function RadioGroupFormItemContent(props) { var _props$fieldConfig = props.fieldConfig, editableConfig = _props$fieldConfig.editableConfig, editable = _props$fieldConfig.editable, render = _props$fieldConfig.render; var editableComptProps = editableConfig.editableComptProps; var options = useMemo(function () { return editableComptProps.options || []; }, [editableComptProps.options]); var onChange = useMemoizedFn(function (e) { var _props$onChange, _editableComptProps$o; (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, e.target.value); (_editableComptProps$o = editableComptProps.onChange) === null || _editableComptProps$o === void 0 || _editableComptProps$o.call(editableComptProps, e); }); if (editable) { return /*#__PURE__*/jsx(Radio.Group, _objectSpread2(_objectSpread2({}, editableComptProps), {}, { value: props.value, onChange: onChange })); } return /*#__PURE__*/jsx("span", { className: "editable-radio-group-view", children: render ? render(props.value, options) : tableCellRender.selectorCell(options)(props.value) }); }; var RadioGroupFormItem = function RadioGroupFormItem(props) { var formItemProps = props.fieldConfig.formItemProps; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-radio-group-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(RadioGroupFormItemContent, _objectSpread2({}, props)) })); }; var FormItemContent$1 = function FormItemContent(props) { var _props$fieldConfig = props.fieldConfig, editableConfig = _props$fieldConfig.editableConfig, editable = _props$fieldConfig.editable, render = _props$fieldConfig.render; var editableComptProps = editableConfig.editableComptProps; var _useState = useState([]), _useState2 = _slicedToArray(_useState, 2), selectorList = _useState2[0], setSelectorList = _useState2[1]; var _useState3 = useState([]), _useState4 = _slicedToArray(_useState3, 2), viewLabelList = _useState4[0], setviewLabelList = _useState4[1]; useEffect(function () { if (!editable) { var value = toArray(props.value); if (selectorList.length === 0) { setviewLabelList(value === null || value === void 0 ? void 0 : value.map(function (item) { return { label: item, value: item }; })); } var returnList = []; value === null || value === void 0 || value.forEach(function (item) { var target = selectorList.find(function (temp) { return temp.value === item; }); returnList.push(target ? target : { label: String(item), value: item }); }); setviewLabelList(returnList); } }, [editable, editableComptProps.fieldNames, props.value, selectorList]); var onSelectorListAllChange = useMemoizedFn(function (dataList) { setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames)); }); var onChange = useMemoizedFn(function (value, selectList) { var _props$onChange, _editableComptProps$o; (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, value); (_editableComptProps$o = editableComptProps.onChange) === null || _editableComptProps$o === void 0 || _editableComptProps$o.call(editableComptProps, value, selectList); }); if (editable) { return /*#__PURE__*/jsx(SelectorWrapper, _objectSpread2(_objectSpread2({}, editableComptProps), {}, { value: props.value, onChange: onChange, onSelectorListAllChange: onSelectorListAllChange })); } return /*#__PURE__*/jsxs(Fragment, { children: [/*#__PURE__*/jsx("div", { style: { display: 'none' }, children: /*#__PURE__*/jsx(SelectorWrapper, _objectSpread2(_objectSpread2({}, editableComptProps), {}, { onSelectorListAllChange: onSelectorListAllChange })) }), /*#__PURE__*/jsx("span", { className: "editable-selector-view", children: render ? render(props.value, selectorList) : viewLabelList.map(function (tag, index) { return /*#__PURE__*/jsx(Tag, { color: 'geekblue', children: tag.label }, index); }) })] }); }; var SelectorWrapperFormItem = function SelectorWrapperFormItem(props) { var formItemProps = props.fieldConfig.formItemProps; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-selector-wrapper-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(FormItemContent$1, _objectSpread2({}, props)) })); }; var FormItemContent = function FormItemContent(props) { var _props$fieldConfig = props.fieldConfig, editableConfig = _props$fieldConfig.editableConfig, editable = _props$fieldConfig.editable, render = _props$fieldConfig.render; var editableComptProps = editableConfig.editableComptProps; var onChange = useMemoizedFn(function (data) { var _props$onChange, _editableComptProps$o; (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, data); editableComptProps === null || editableComptProps === void 0 || (_editableComptProps$o = editableComptProps.onChange) === null || _editableComptProps$o === void 0 || _editableComptProps$o.call(editableComptProps, data); }); var viewData = useMemo(function () { var defaultCheckedText = editableComptProps.checkedChildren || '是'; var defaultUnCheckedText = editableComptProps.unCheckedChildren || '否'; return { checkedText: defaultCheckedText, unCheckedText: defaultUnCheckedText }; }, [editableComptProps.checkedChildren, editableComptProps.unCheckedChildren]); if (editable) { return /*#__PURE__*/jsx(SwitchWrapper, _objectSpread2(_objectSpread2({}, editableComptProps), {}, { value: props.value, onChange: onChange })); } if (render) { return /*#__PURE__*/jsx("span", { className: "editable-switch-wrapper-view", children: render(props.value) }); } return /*#__PURE__*/jsx("span", { className: "editable-switch-wrapper-view", children: editableComptProps.checkedValue == props.value ? /*#__PURE__*/jsx(Tag, { color: "geekblue", style: { marginRight: 0 }, children: viewData.checkedText }) : /*#__PURE__*/jsx(Tag, { style: { marginRight: 0 }, children: viewData.unCheckedText }) }); }; var SwitchWrapperFormItem = function SwitchWrapperFormItem(props) { var formItemProps = props.fieldConfig.formItemProps; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-switch-wrapper-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(FormItemContent, _objectSpread2({}, props)) })); }; var FormItemTextContent = function FormItemTextContent(props) { var _props$fieldConfig2, _props$fieldConfig3, _props$fieldConfig3$r; var value = useMemo(function () { var _props$fieldConfig; if ((_props$fieldConfig = props.fieldConfig) !== null && _props$fieldConfig !== void 0 && _props$fieldConfig.render) return undefined; var isBaseData = isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value; if (!isBaseData) { console.warn("Form.List name:\u3010".concat(props.name, "\u3011\u6570\u636E\u3010").concat(JSON.stringify(props.value), "\u3011\u4E0D\u80FD\u6E32\u67D3\u5728\u9875\u9762\u4E2D")); } return isBaseData ? props.value : undefined; }, [(_props$fieldConfig2 = props.fieldConfig) === null || _props$fieldConfig2 === void 0 ? void 0 : _props$fieldConfig2.render, props.name, props.value]); var viewText = ((_props$fieldConfig3 = props.fieldConfig) === null || _props$fieldConfig3 === void 0 || (_props$fieldConfig3$r = _props$fieldConfig3.render) === null || _props$fieldConfig3$r === void 0 ? void 0 : _props$fieldConfig3$r.call(_props$fieldConfig3, props.value)) || value; return /*#__PURE__*/jsx("span", { children: viewText }); }; var TextFormItem = function TextFormItem(props) { return /*#__PURE__*/jsx(Form.Item, { noStyle: true, name: props.name, children: /*#__PURE__*/jsx(FormItemTextContent, { name: props.name, fieldConfig: props.fieldConfig }) }); }; var TextAreaFormItem = function TextAreaFormItem(props) { var _props$fieldConfig = props.fieldConfig, formItemProps = _props$fieldConfig.formItemProps, editableConfig = _props$fieldConfig.editableConfig; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, children: /*#__PURE__*/jsx(InputTextAreaWrapper, _objectSpread2({}, editableConfig.editableComptProps)) })); }; var _excluded$1 = ["children"]; var UploadWrapperFormItemContent = function UploadWrapperFormItemContent(props) { var _props$fieldConfig = props.fieldConfig, editableConfig = _props$fieldConfig.editableConfig, render = _props$fieldConfig.render, editable = _props$fieldConfig.editable; var _editableComptProps = editableConfig.editableComptProps, children = _editableComptProps.children, otherProps = _objectWithoutProperties(_editableComptProps, _excluded$1); if (editable) { return /*#__PURE__*/jsx(UploadWrapper, _objectSpread2(_objectSpread2({ listType: "text" }, otherProps), {}, { value: props.value, onChange: props.onChange, children: children })); } return /*#__PURE__*/jsx("div", { className: "upload-wrapper-selector-view", children: render ? render(props.value) : /*#__PURE__*/jsx(UploadWrapper, _objectSpread2(_objectSpread2({ listType: "text" }, otherProps), {}, { value: props.value, disabled: true })) }); }; var UploadWrapperFormItem = function UploadWrapperFormItem(props) { var formItemProps = props.fieldConfig.formItemProps; return /*#__PURE__*/jsx(Form.Item, _objectSpread2(_objectSpread2({}, formItemProps), {}, { name: props.name, className: classNames('editable-upload-wrapper-form-item', formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.className), children: /*#__PURE__*/jsx(UploadWrapperFormItemContent, _objectSpread2({}, props)) })); }; var FormItemAdapter = function FormItemAdapter(props) { var _props$fieldConfig = props.fieldConfig, editableConfig = _props$fieldConfig.editableConfig, editable = _props$fieldConfig.editable; var newEditable = getEditable(editable, props.tableRowIndex); var fieldConfig = extend({}, props.fieldConfig, { editable: newEditable }); var commomProps = { name: props.name, fieldConfig: fieldConfig }; if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'input' && newEditable) { return /*#__PURE__*/jsx(InputFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'inputNumber' && newEditable) { return /*#__PURE__*/jsx(InputNumberFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'textArea' && newEditable) { return /*#__PURE__*/jsx(TextAreaFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'datePickerWrapper' && newEditable) { return /*#__PURE__*/jsx(DatePickerWrapperFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'dateRangePickerWrapper') { return /*#__PURE__*/jsx(DateRangePickerWrapperFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'selectorWrapper') { return /*#__PURE__*/jsx(SelectorWrapperFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'checkboxGroup') { return /*#__PURE__*/jsx(CheckboxGroupFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'radioGroup') { return /*#__PURE__*/jsx(RadioGroupFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'uploadWrapper') { return /*#__PURE__*/jsx(UploadWrapperFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'switchWrapper') { return /*#__PURE__*/jsx(SwitchWrapperFormItem, _objectSpread2({}, commomProps)); } else if ((editableConfig === null || editableConfig === void 0 ? void 0 : editableConfig.type) === 'custom') { return editableConfig.editableComptProps({ name: props.name, editable: newEditable, completeName: props.completeName, tableRowIndex: props.tableRowIndex }); } return /*#__PURE__*/jsx(TextFormItem, _objectSpread2({}, commomProps)); }; var FormList = function FormList(props) { var from = Form.useFormInstance(); var _props$formListConfig = props.formListConfig, onFormListBeforeRender = _props$formListConfig.onFormListBeforeRender, editableConfigList = _props$formListConfig.editableConfigList, onFormListAfterRender = _props$formListConfig.onFormListAfterRender, onFormListItemBeforeRender = _props$formListConfig.onFormListItemBeforeRender, onFormListItemAfterRender = _props$formListConfig.onFormListItemAfterRender, deleteOperateRender = _props$formListConfig.deleteOperateRender; return /*#__PURE__*/jsx(Form.List, { name: props.name, children: function children(fields, _ref) { var add = _ref.add, _remove = _ref.remove; return /*#__PURE__*/jsxs(Fragment$1, { children: [onFormListBeforeRender ? onFormListBeforeRender({ tableRowIndex: props.tableRowIndex, add: add, get value() { return from.getFieldValue(props.completeName); } }) : null, fields.map(function (fieldChild, index) { var hasEditable = editableConfigList.find(function (item) { return getEditable(item.editable, props.tableRowIndex); }); var className = classNames('editable-inner-formlist-item', "editable-inner-formlist-item-".concat(props.name[1]), { 'editable-inner-formlist-item_preview': !hasEditable }); return /*#__PURE__*/jsxs("div", { className: className, children: [onFormListItemBeforeRender === null || onFormListItemBeforeRender === void 0 ? void 0 : onFormListItemBeforeRender({ add: add, remove: function remove() { _remove(index); }, formListItemIndex: index, tableRowIndex: props.tableRowIndex, get value() { return from.getFieldValue([].concat(_toConsumableArray(props.completeName), [fieldChild.name])); } }), /*#__PURE__*/jsxs(Space, { children: [editableConfigList.map(function (fieldItem, index) { return /*#__PURE__*/jsx(FormItemAdapter, { name: [fieldChild.name, fieldItem.fieldName], fieldConfig: fieldItem, tableRowIndex: props.tableRowIndex, completeName: [].concat(_toConsumableArray(props.completeName), [fieldChild.name]) }, index); }), hasEditable ? /*#__PURE__*/jsx(DeleteFormListItem, { deleteOperateRender: deleteOperateRender, remove: function remove() { _remove(index); }, index: index }) : undefined] }), onFormListItemAfterRender === null || onFormListItemAfterRender === void 0 ? void 0 : onFormListItemAfterRender({ add: add, formListItemIndex: index, tableRowIndex: props.tableRowIndex, remove: function remove() { _remove(index); }, get value() { return from.getFieldValue([].concat(_toConsumableArray(props.completeName), [fieldChild.name])); } })] }, index); }), onFormListAfterRender ? onFormListAfterRender({ tableRowIndex: props.tableRowIndex, add: add, get value() { return from.getFieldValue(props.completeName); } }) : null] }); } }); }; var DeleteFormListItem = function DeleteFormListItem(props) { return /*#__PURE__*/jsx(Form.Item, { children: props.deleteOperateRender ? props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index }) : /*#__PURE__*/jsx(Button, { type: "link", danger: true, icon: /*#__PURE__*/jsx(_DeleteOutlined, {}), onClick: props.remove, children: "\u5220\u9664" }) }); }; var FormListItem = function FormListItem(props) { if (props.fieldConfig) { if (isArray(props.fieldConfig['editableConfigList'])) { var formListConfig = props.fieldConfig; return /*#__PURE__*/jsx(FormList, { name: props.name, completeName: props.completeName, formListConfig: formListConfig, tableRowIndex: props.tableRowIndex }); } else { var _props$hiddenFieldLis; return /*#__PURE__*/jsxs(Fragment, { children: [/*#__PURE__*/jsx(FormItemAdapter, { name: props.name, fieldConfig: props.fieldConfig, tableRowIndex: props.tableRowIndex, completeName: props.completeName }), (_props$hiddenFieldLis = props.hiddenFieldList) === null || _props$hiddenFieldLis === void 0 ? void 0 : _props$hiddenFieldLis.map(function (item, index) { return /*#__PURE__*/jsx(FormItemHidden, { name: [props.tableRowIndex].concat(_toConsumableArray(toArray(item.dataIndex))) }, index); })] }); } } return /*#__PURE__*/jsx(TextFormItem, { name: props.name }); }; var _excluded = ["fieldConfig", "renderMiddleware", "tableChildrenColumnRender", "title", "tipsWrapperProps", "required", "align"]; /** * 可编辑表格(通过FormList实现) * @deprecated 已过期,请使用 EditableTablePro 组件 * demo:https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable1 * ``` * 1. 表格数据必须要有唯一值字段,通过属性uidFieldKey设置 * 2. 通过 tableProps 设置Table属性,table size默认:small * 3. Table children column 不可编辑 * 4. 当存在折叠children数据时,组件会在children中内置_isChildrenItem字段 * 5. 可通过tableChildrenColumnRender自定义渲染 table children column 显示 * 6. 4.5.0版本移除 ref.getTableItemDataByFormListItemKey 功能,可选择表格参考(https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable2) * ``` */ var EditableTable = function EditableTable(props) { var form = Form.useFormInstance(); var formListFieldsRef = useRef([]); var columnsIncludeUidKey = useMemo(function () { var hasUid = props.columns.find(function (item) { return item['dataIndex'] === props.uidFieldKey; }); return !!hasUid; }, [props.columns, props.uidFieldKey]); var columns = useMemo(function () { if (!props.columns) return []; return props.columns.map(function (columnItem) { var fieldConfig = columnItem.fieldConfig, renderMiddleware = columnItem.renderMiddleware, tableChildrenColumnRender = columnItem.tableChildrenColumnRender, title = columnItem.title, tipsWrapperProps = columnItem.tipsWrapperProps, required = columnItem.required, align = columnItem.align, otherColumnItem = _objectWithoutProperties(columnItem, _excluded); var support = /*#__PURE__*/isValidElement(title) || typeof title === 'string'; var titleRender; if (tipsWrapperProps && support) { if (typeof tipsWrapperProps === 'string') { titleRender = /*#__PURE__*/jsx(TipsWrapper, { tipType: "popover", popoverProps: { content: tipsWrapperProps }, children: title }); } else { titleRender = /*#__PURE__*/jsx(TipsWrapper, _objectSpread2(_objectSpread2({}, tipsWrapperProps), {}, { children: title })); } } // else if (tooltip) { // titleRender = <TableTitleTooltip title={title as string} tooltip={tooltip} />; // } else { titleRender = title; } return _objectSpread2(_objectSpread2({ title: required ? /*#__PURE__*/jsx(TextSymbolWrapper, { style: { marginLeft: align === 'center' ? undefined : 10 }, text: titleRender, position: "before", symbolType: "required" }) : titleRender, onCell: function onCell() { var _props$tableProps; return { valign: ((_props$tableProps = props.tableProps) === null || _props$tableProps === void 0 ? void 0 : _props$tableProps.cellVerticalAlign) || 'middle' }; } }, otherColumnItem), {}, { render: function render(value, record, index) { if (record['_isChildrenItem']) { if (tableChildrenColumnRender) { return tableChildrenColumnRender(value, record, index); } return value; } var tableRowName = [].concat(_toConsumableArray(toArray(props.name)), [record.name]); var completeName = columnItem.dataIndex ? [].concat(_toConsumableArray(tableRowName), [columnItem.dataIndex]) : tableRowName; var customRender = renderMiddleware === null || renderMiddleware === void 0 ? void 0 : renderMiddleware({ name: completeName, tableRowIndex: record.name, operation: record.operation, tableRowName: tableRowName, index: index, getTableRowData: function getTableRowData() { if (props.completeName) { return form.getFieldValue([].concat(_toConsumableArray(props.completeName), [record.name])); } return form.getFieldValue(tableRowName); } }); if (customRender) { return customRender; } var fieldConfigActual = typeof fieldConfig === 'function' ? fieldConfig({ name: completeName, tableRowIndex: record.name, tableRowName: tableRowName, getTableRowData: function getTableRowData() { if (props.completeName) { return form.getFieldValue([].concat(_toConsumableArray(props.completeName), [record.name])); } return form.getFieldValue(tableRowName); } }) : fieldConfig; var hiddenFieldList = toArray(columnItem.hiddenField); if (!columnsIncludeUidKey && index === 0) { hiddenFieldList = hiddenFieldList.concat([{ dataIndex: props.uidFieldKey }]); } return /*#__PURE__*/jsx(FormListItem, { name: columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name], completeName: completeName, fieldConfig: fieldConfigActual, tableRowIndex: record.name, hiddenFieldList: hiddenFieldList }); } }); }); }, [props.columns, props.tableProps, props.name, props.completeName, props.uidFieldKey, columnsIncludeUidKey, form]); var formListDataSource = Form.useWatch(props.completeName ? props.completeName : props.name, form); useEffect(function () { var names = toArray(props.name); if (/^\d+$/.test("".concat(names === null || names === void 0 ? void 0 : names[0])) && props.completeName === undefined) { void message.error('当前Editable处在FormList内部,必须赋值completeName参数'); } }, [props.completeName, props.name]); return /*#__PURE__*/jsx("div", { className: classNames('editable-table', { 'et-empty-show-large': props.emptyShowSize === 'large' }, props.className), style: props.style, children: /*#__PURE__*/jsx(Form.List, { name: props.name, rules: props.rules, children: function children(fields, formListOperation, _ref) { var errors = _ref.errors; formListFieldsRef.current = fields; return /*#__PURE__*/jsxs("div", { style: { borderRadius: '6px', border: errors !== null && errors !== void 0 && errors.length ? '1px solid #ff4d4f' : '1px solid transparent' }, children: [props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null, /*#__PURE__*/jsx(Table, _objectSpread2(_objectSpread2({ scroll: { x: 'max-content' }, pagination: false, size: "small" }, props.tableProps), {}, { rowKey: function rowKey(record) { var _target; var completeName = props.completeName || []; var names = toArray(props.name); var prevName = completeName.length ? completeName : names; var target; if (record['_isChildrenItem']) { target = form.getFieldValue([].concat(_toConsumableArray(prevName), [record['_parentIndex'], 'children', record['_index']])); } else { target = form.getFieldValue([].concat(_toConsumableArray(prevName), [record['_index']])); } var key = (_target = target) === null || _target === void 0 ? void 0 : _target[props.uidFieldKey]; if (isUndefinedOrNull(key)) { console.warn("EditableTable \u901A\u8FC7\u5165\u53C2uidFieldKey\uFF1A".concat(props.uidFieldKey, "\uFF0C\u672A\u83B7\u53D6\u5230\u8868\u683C\u884C\u552F\u4E00\u503C\u6570\u636E")); } return key; }, dataSource: fields.map(function (item, index) { var _formListDataSource$i; var children = formListDataSource === null || formListDataSource === void 0 || (_formListDataSource$i = formListDataSource[item.name]) === null || _formListDataSource$i === void 0 ? void 0 : _formListDataSource$i.children; if (children) { children.forEach(function (item, itemIndex) { item['_isChildrenItem'] = true; item['_parentIndex'] = index; item['_index'] = itemIndex; }); } return _objectSpread2(_objectSpread2({}, item), {}, { _index: index, operation: formListOperation, children: children }); }), columns: columns })), props.onTableAfterRender ? props.onTableAfterRender(formListOperation, fields.length) : /*#__PURE__*/jsx(ButtonWrapper, { type: "dashed", hidden: props.hiddenFooterBtn, onClick: function onClick() { var _props$getAddRowDefau; return formListOperation.add((_props$getAddRowDefau = props.getAddRowDefaultValues) === null || _props$getAddRowDefau === void 0 ? void 0 : _props$getAddRowDefau.call(props)); }, block: true, icon: /*#__PURE__*/jsx(_PlusOutlined, {}), style: { marginTop: 15 }, children: "\u65B0\u589E" }), /*#__PURE__*/jsx(Form.ErrorList, { errors: errors.length ? [/*#__PURE__*/jsx("div", { style: { color: '#ff4d4f', padding: '5px' }, children: errors }, "0")] : undefined })] }); } }) }); }; export { EditableTable as E }; //# sourceMappingURL=editable-table-BaKnBuHT.js.map