@ant-design/pro-components 3.0.1-0 → 3.1.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pro-components.min.js +1 -1
- package/es/card/ProCard.js +4 -2
- package/es/card/components/Actions/style.d.ts +1 -1
- package/es/card/components/Card/index.js +8 -4
- package/es/card/components/Card/style.d.ts +1 -1
- package/es/card/components/CheckCard/index.d.ts +6 -0
- package/es/card/components/CheckCard/index.js +2 -1
- package/es/card/components/CheckCard/style.d.ts +1 -1
- package/es/card/components/Divider/style.d.ts +1 -1
- package/es/card/components/Loading/style.d.ts +1 -1
- package/es/card/components/Operation/style.d.ts +1 -1
- package/es/card/components/Statistic/style.d.ts +1 -1
- package/es/card/components/Statistic/style.js +2 -6
- package/es/card/components/StatisticCard/index.js +4 -2
- package/es/card/components/StatisticCard/style.d.ts +1 -1
- package/es/card/typing.d.ts +5 -0
- package/es/descriptions/index.js +2 -1
- package/es/field/ValueTypeToComponent.js +4 -4
- package/es/field/components/Cascader/index.d.ts +0 -1
- package/es/field/components/Checkbox/index.d.ts +0 -1
- package/es/field/components/ColorPicker/index.d.ts +1 -1
- package/es/field/components/Percent/util.d.ts +1 -1
- package/es/field/components/Radio/index.d.ts +0 -1
- package/es/field/components/Segmented/index.d.ts +0 -1
- package/es/field/components/Select/LightSelect/index.js +1 -2
- package/es/field/components/Select/SearchSelect/index.d.ts +6 -1
- package/es/field/components/Select/SearchSelect/index.js +101 -15
- package/es/field/components/Select/index.d.ts +0 -3
- package/es/field/components/Select/index.js +5 -3
- package/es/field/components/TreeSelect/index.d.ts +0 -1
- package/es/form/BaseForm/BaseForm.d.ts +3 -0
- package/es/form/BaseForm/BaseForm.js +9 -2
- package/es/form/BaseForm/LightWrapper/style.d.ts +1 -1
- package/es/form/components/Captcha/index.d.ts +8 -2
- package/es/form/components/Captcha/index.js +9 -1
- package/es/form/components/DatePicker/BaseDatePicker.js +20 -12
- package/es/form/components/DateRangePicker/BaseDateRanger.js +38 -13
- package/es/form/components/FormItem/Group/index.js +1 -1
- package/es/form/components/FormItem/Group/style.d.ts +1 -1
- package/es/form/components/List/index.d.ts +1 -1
- package/es/form/components/List/style.d.ts +1 -1
- package/es/form/components/SchemaForm/index.js +1 -2
- package/es/form/components/Text/index.js +4 -2
- package/es/form/components/UploadButton/index.d.ts +1 -1
- package/es/form/components/UploadButton/index.js +3 -3
- package/es/form/index.d.ts +1 -0
- package/es/form/layouts/DrawerForm/index.d.ts +1 -1
- package/es/form/layouts/DrawerForm/index.js +3 -2
- package/es/form/layouts/DrawerForm/style.d.ts +1 -1
- package/es/form/layouts/LightFilter/style.d.ts +1 -1
- package/es/form/layouts/LoginForm/index.d.ts +1 -1
- package/es/form/layouts/LoginForm/style.d.ts +1 -1
- package/es/form/layouts/LoginFormPage/index.d.ts +1 -1
- package/es/form/layouts/LoginFormPage/style.d.ts +1 -1
- package/es/form/layouts/ModalForm/index.js +2 -1
- package/es/form/layouts/ProForm/index.d.ts +1 -1
- package/es/form/layouts/QueryFilter/index.d.ts +2 -1
- package/es/form/layouts/QueryFilter/style.d.ts +1 -1
- package/es/form/layouts/StepsForm/index.js +15 -2
- package/es/form/layouts/StepsForm/style.d.ts +1 -1
- package/es/layout/components/AppsLogoComponents/index.js +3 -1
- package/es/layout/components/AppsLogoComponents/style/index.d.ts +1 -1
- package/es/layout/components/CollapsedIcon/style.d.ts +1 -1
- package/es/layout/components/FooterToolbar/style/index.d.ts +1 -1
- package/es/layout/components/FooterToolbar/style/stylish.d.ts +1 -1
- package/es/layout/components/GlobalFooter/index.d.ts +1 -1
- package/es/layout/components/GlobalFooter/style.d.ts +1 -1
- package/es/layout/components/GlobalHeader/rightContentStyle.d.ts +1 -1
- package/es/layout/components/GlobalHeader/style.d.ts +1 -1
- package/es/layout/components/GridContent/style.d.ts +1 -1
- package/es/layout/components/Header/style/header.d.ts +1 -1
- package/es/layout/components/Header/style/stylish.d.ts +1 -1
- package/es/layout/components/Help/ProHelpDrawer.d.ts +1 -1
- package/es/layout/components/Help/ProHelpDrawer.js +3 -1
- package/es/layout/components/Help/ProHelpPopover.js +1 -1
- package/es/layout/components/Help/style.d.ts +1 -1
- package/es/layout/components/PageContainer/style/index.d.ts +1 -1
- package/es/layout/components/PageContainer/style/stylish.d.ts +1 -1
- package/es/layout/components/PageHeader/style/index.d.ts +1 -1
- package/es/layout/components/SettingDrawer/index.js +2 -2
- package/es/layout/components/SettingDrawer/style/index.d.ts +1 -1
- package/es/layout/components/SiderMenu/BaseMenu.d.ts +1 -1
- package/es/layout/components/SiderMenu/BaseMenu.js +3 -3
- package/es/layout/components/SiderMenu/SiderMenu.js +8 -8
- package/es/layout/components/SiderMenu/index.js +11 -6
- package/es/layout/components/SiderMenu/style/index.d.ts +1 -1
- package/es/layout/components/SiderMenu/style/menu.d.ts +1 -1
- package/es/layout/components/SiderMenu/style/stylish.d.ts +1 -1
- package/es/layout/components/TopNavHeader/style.d.ts +1 -1
- package/es/layout/defaultSettings.d.ts +6 -0
- package/es/layout/style/index.d.ts +1 -1
- package/es/list/style/index.d.ts +1 -1
- package/es/provider/index.d.ts +1 -0
- package/es/provider/index.js +11 -6
- package/es/provider/useStyle/index.d.ts +2 -1
- package/es/provider/useStyle/index.js +20 -12
- package/es/table/Table.js +412 -280
- package/es/table/components/Alert/index.d.ts +1 -1
- package/es/table/components/Alert/style.d.ts +1 -1
- package/es/table/components/ColumnSetting/index.d.ts +1 -1
- package/es/table/components/ColumnSetting/index.js +15 -3
- package/es/table/components/ColumnSetting/style.d.ts +1 -1
- package/es/table/components/DragSortTable/index.d.ts +1 -1
- package/es/table/components/DragSortTable/style.d.ts +1 -1
- package/es/table/components/EditableTable/index.js +530 -197
- package/es/table/components/ListToolBar/style.d.ts +1 -1
- package/es/table/style/index.d.ts +1 -1
- package/es/table/typing.d.ts +37 -12
- package/es/table/useFetchData.js +8 -13
- package/es/table/utils/columnRender.d.ts +1 -1
- package/es/table/utils/genProColumnToColumn.d.ts +2 -2
- package/es/table/utils/genProColumnToColumn.js +5 -17
- package/es/table/utils/index.d.ts +60 -5
- package/es/table/utils/index.js +157 -18
- package/es/utils/components/DropdownFooter/style.d.ts +1 -1
- package/es/utils/components/FieldLabel/style.d.ts +1 -1
- package/es/utils/components/FilterDropdown/index.js +1 -1
- package/es/utils/components/FilterDropdown/style.d.ts +1 -1
- package/es/utils/components/InlineErrorFormItem/style.d.ts +1 -1
- package/es/utils/components/LabelIconTip/style.d.ts +1 -1
- package/es/utils/conversionMomentValue/index.js +14 -2
- package/es/utils/proFieldParsingText/index.js +1 -1
- package/es/utils/typing.d.ts +1 -1
- package/es/utils/useEditableArray/index.d.ts +3 -6
- package/es/utils/useEditableArray/index.js +562 -318
- package/es/utils/useEditableMap/index.js +82 -25
- package/es/utils/useMediaQuery/query.js +11 -5
- package/lib/card/ProCard.js +4 -2
- package/lib/card/components/Actions/style.d.ts +1 -1
- package/lib/card/components/Card/index.js +8 -4
- package/lib/card/components/Card/style.d.ts +1 -1
- package/lib/card/components/CheckCard/index.d.ts +6 -0
- package/lib/card/components/CheckCard/index.js +2 -1
- package/lib/card/components/CheckCard/style.d.ts +1 -1
- package/lib/card/components/Divider/style.d.ts +1 -1
- package/lib/card/components/Loading/style.d.ts +1 -1
- package/lib/card/components/Operation/style.d.ts +1 -1
- package/lib/card/components/Statistic/style.d.ts +1 -1
- package/lib/card/components/Statistic/style.js +2 -6
- package/lib/card/components/StatisticCard/index.js +4 -2
- package/lib/card/components/StatisticCard/style.d.ts +1 -1
- package/lib/card/typing.d.ts +5 -0
- package/lib/descriptions/index.js +2 -1
- package/lib/field/ValueTypeToComponent.js +4 -4
- package/lib/field/components/Cascader/index.d.ts +0 -1
- package/lib/field/components/Checkbox/index.d.ts +0 -1
- package/lib/field/components/ColorPicker/index.d.ts +1 -1
- package/lib/field/components/Percent/util.d.ts +1 -1
- package/lib/field/components/Radio/index.d.ts +0 -1
- package/lib/field/components/Segmented/index.d.ts +0 -1
- package/lib/field/components/Select/LightSelect/index.js +1 -2
- package/lib/field/components/Select/SearchSelect/index.d.ts +6 -1
- package/lib/field/components/Select/SearchSelect/index.js +101 -15
- package/lib/field/components/Select/index.d.ts +0 -3
- package/lib/field/components/Select/index.js +5 -3
- package/lib/field/components/TreeSelect/index.d.ts +0 -1
- package/lib/form/BaseForm/BaseForm.d.ts +3 -0
- package/lib/form/BaseForm/BaseForm.js +9 -2
- package/lib/form/BaseForm/LightWrapper/style.d.ts +1 -1
- package/lib/form/components/Captcha/index.d.ts +8 -2
- package/lib/form/components/Captcha/index.js +9 -1
- package/lib/form/components/DatePicker/BaseDatePicker.js +19 -11
- package/lib/form/components/DateRangePicker/BaseDateRanger.js +37 -12
- package/lib/form/components/Digit/DigitRange.d.ts +1 -1
- package/lib/form/components/FormItem/Group/index.js +1 -1
- package/lib/form/components/FormItem/Group/style.d.ts +1 -1
- package/lib/form/components/List/index.d.ts +1 -1
- package/lib/form/components/List/style.d.ts +1 -1
- package/lib/form/components/SchemaForm/index.js +1 -2
- package/lib/form/components/Text/index.js +4 -2
- package/lib/form/components/UploadButton/index.d.ts +1 -1
- package/lib/form/components/UploadButton/index.js +3 -3
- package/lib/form/index.d.ts +1 -0
- package/lib/form/layouts/DrawerForm/index.d.ts +1 -1
- package/lib/form/layouts/DrawerForm/index.js +3 -2
- package/lib/form/layouts/DrawerForm/style.d.ts +1 -1
- package/lib/form/layouts/LightFilter/style.d.ts +1 -1
- package/lib/form/layouts/LoginForm/index.d.ts +1 -1
- package/lib/form/layouts/LoginForm/style.d.ts +1 -1
- package/lib/form/layouts/LoginFormPage/index.d.ts +1 -1
- package/lib/form/layouts/LoginFormPage/style.d.ts +1 -1
- package/lib/form/layouts/ModalForm/index.js +2 -1
- package/lib/form/layouts/ProForm/index.d.ts +2 -2
- package/lib/form/layouts/QueryFilter/index.d.ts +2 -1
- package/lib/form/layouts/QueryFilter/style.d.ts +1 -1
- package/lib/form/layouts/StepsForm/index.js +15 -2
- package/lib/form/layouts/StepsForm/style.d.ts +1 -1
- package/lib/layout/components/AppsLogoComponents/index.js +3 -1
- package/lib/layout/components/AppsLogoComponents/style/index.d.ts +1 -1
- package/lib/layout/components/CollapsedIcon/style.d.ts +1 -1
- package/lib/layout/components/FooterToolbar/style/index.d.ts +1 -1
- package/lib/layout/components/FooterToolbar/style/stylish.d.ts +1 -1
- package/lib/layout/components/GlobalFooter/index.d.ts +1 -1
- package/lib/layout/components/GlobalFooter/style.d.ts +1 -1
- package/lib/layout/components/GlobalHeader/rightContentStyle.d.ts +1 -1
- package/lib/layout/components/GlobalHeader/style.d.ts +1 -1
- package/lib/layout/components/GridContent/style.d.ts +1 -1
- package/lib/layout/components/Header/style/header.d.ts +1 -1
- package/lib/layout/components/Header/style/stylish.d.ts +1 -1
- package/lib/layout/components/Help/ProHelpDrawer.d.ts +1 -1
- package/lib/layout/components/Help/ProHelpDrawer.js +3 -1
- package/lib/layout/components/Help/ProHelpPopover.js +1 -1
- package/lib/layout/components/Help/style.d.ts +1 -1
- package/lib/layout/components/PageContainer/style/index.d.ts +1 -1
- package/lib/layout/components/PageContainer/style/stylish.d.ts +1 -1
- package/lib/layout/components/PageHeader/style/index.d.ts +1 -1
- package/lib/layout/components/SettingDrawer/index.js +2 -2
- package/lib/layout/components/SettingDrawer/style/index.d.ts +1 -1
- package/lib/layout/components/SiderMenu/BaseMenu.d.ts +1 -1
- package/lib/layout/components/SiderMenu/BaseMenu.js +3 -3
- package/lib/layout/components/SiderMenu/SiderMenu.js +8 -8
- package/lib/layout/components/SiderMenu/index.js +11 -6
- package/lib/layout/components/SiderMenu/style/index.d.ts +1 -1
- package/lib/layout/components/SiderMenu/style/menu.d.ts +1 -1
- package/lib/layout/components/SiderMenu/style/stylish.d.ts +1 -1
- package/lib/layout/components/TopNavHeader/style.d.ts +1 -1
- package/lib/layout/defaultSettings.d.ts +6 -0
- package/lib/layout/style/index.d.ts +1 -1
- package/lib/list/style/index.d.ts +1 -1
- package/lib/provider/index.d.ts +1 -0
- package/lib/provider/index.js +11 -6
- package/lib/provider/useStyle/index.d.ts +2 -1
- package/lib/provider/useStyle/index.js +20 -12
- package/lib/table/Table.js +422 -290
- package/lib/table/components/Alert/index.d.ts +1 -1
- package/lib/table/components/Alert/style.d.ts +1 -1
- package/lib/table/components/ColumnSetting/index.d.ts +1 -1
- package/lib/table/components/ColumnSetting/index.js +15 -3
- package/lib/table/components/ColumnSetting/style.d.ts +1 -1
- package/lib/table/components/DragSortTable/index.d.ts +1 -1
- package/lib/table/components/DragSortTable/style.d.ts +1 -1
- package/lib/table/components/EditableTable/index.js +529 -196
- package/lib/table/components/ListToolBar/style.d.ts +1 -1
- package/lib/table/style/index.d.ts +1 -1
- package/lib/table/typing.d.ts +37 -12
- package/lib/table/useFetchData.js +8 -13
- package/lib/table/utils/columnRender.d.ts +1 -1
- package/lib/table/utils/genProColumnToColumn.d.ts +2 -2
- package/lib/table/utils/genProColumnToColumn.js +4 -16
- package/lib/table/utils/index.d.ts +60 -5
- package/lib/table/utils/index.js +159 -20
- package/lib/utils/components/DropdownFooter/style.d.ts +1 -1
- package/lib/utils/components/FieldLabel/style.d.ts +1 -1
- package/lib/utils/components/FilterDropdown/index.js +1 -1
- package/lib/utils/components/FilterDropdown/style.d.ts +1 -1
- package/lib/utils/components/InlineErrorFormItem/style.d.ts +1 -1
- package/lib/utils/components/LabelIconTip/style.d.ts +1 -1
- package/lib/utils/conversionMomentValue/index.js +14 -2
- package/lib/utils/proFieldParsingText/index.js +1 -1
- package/lib/utils/typing.d.ts +1 -1
- package/lib/utils/useEditableArray/index.d.ts +3 -6
- package/lib/utils/useEditableArray/index.js +568 -324
- package/lib/utils/useEditableMap/index.js +82 -25
- package/lib/utils/useMediaQuery/query.js +10 -4
- package/package.json +45 -45
|
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
10
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
12
13
|
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
13
14
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
15
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
@@ -19,10 +20,11 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
19
20
|
var _form = _interopRequireWildcard(require("../../../form"));
|
|
20
21
|
var _provider = require("../../../provider");
|
|
21
22
|
var _utils = require("../../../utils");
|
|
23
|
+
var _useEditableArray = require("../../../utils/useEditableArray");
|
|
22
24
|
var _Table = _interopRequireDefault(require("../../Table"));
|
|
23
25
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
24
|
-
var _excluded = ["
|
|
25
|
-
_excluded2 = ["
|
|
26
|
+
var _excluded = ["record", "position", "creatorButtonText", "newRecordType", "parentKey", "style"],
|
|
27
|
+
_excluded2 = ["onTableChange", "maxLength", "formItemProps", "recordCreatorProps", "rowKey", "controlled", "defaultValue", "onChange", "editableFormRef"];
|
|
26
28
|
var EditableTableActionContext = /*#__PURE__*/_react.default.createContext(undefined);
|
|
27
29
|
|
|
28
30
|
/** 可编辑表格的按钮 */
|
|
@@ -36,7 +38,7 @@ function RecordCreator(props) {
|
|
|
36
38
|
return /*#__PURE__*/_react.default.cloneElement(children, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, children.props), {}, {
|
|
37
39
|
onClick: function () {
|
|
38
40
|
var _onClick = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(e) {
|
|
39
|
-
var _children$props$onCli, _children$props
|
|
41
|
+
var _children$props$onCli, _children$props;
|
|
40
42
|
var isOk;
|
|
41
43
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
42
44
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -51,11 +53,13 @@ function RecordCreator(props) {
|
|
|
51
53
|
}
|
|
52
54
|
return _context.abrupt("return");
|
|
53
55
|
case 5:
|
|
54
|
-
actionRef
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
if (actionRef !== null && actionRef !== void 0 && actionRef.current) {
|
|
57
|
+
actionRef.current.addEditRecord(record, {
|
|
58
|
+
position: position,
|
|
59
|
+
newRecordType: newRecordType,
|
|
60
|
+
parentKey: parentKey
|
|
61
|
+
});
|
|
62
|
+
}
|
|
59
63
|
case 6:
|
|
60
64
|
case "end":
|
|
61
65
|
return _context.stop();
|
|
@@ -70,13 +74,195 @@ function RecordCreator(props) {
|
|
|
70
74
|
}));
|
|
71
75
|
}
|
|
72
76
|
|
|
77
|
+
/**
|
|
78
|
+
* 处理嵌套行的新增
|
|
79
|
+
*/
|
|
80
|
+
function handleNestedRowInsert(baseData, defaultValue, newLineOptions, getRowKey, childrenColumnName) {
|
|
81
|
+
var _recordKeyToString;
|
|
82
|
+
if (!newLineOptions.recordKey) {
|
|
83
|
+
return baseData;
|
|
84
|
+
}
|
|
85
|
+
var actionProps = {
|
|
86
|
+
data: baseData,
|
|
87
|
+
getRowKey: getRowKey,
|
|
88
|
+
row: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, defaultValue), {}, {
|
|
89
|
+
map_row_parentKey: (_recordKeyToString = (0, _useEditableArray.recordKeyToString)(newLineOptions.parentKey)) === null || _recordKeyToString === void 0 ? void 0 : _recordKeyToString.toString()
|
|
90
|
+
}),
|
|
91
|
+
key: newLineOptions.recordKey,
|
|
92
|
+
childrenColumnName: childrenColumnName
|
|
93
|
+
};
|
|
94
|
+
return (0, _useEditableArray.editableRowByKey)(actionProps, newLineOptions.position === 'top' ? 'top' : 'update');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 处理分页场景下的新增
|
|
99
|
+
*/
|
|
100
|
+
function handlePaginationInsert(baseData, defaultValue, pageConfig) {
|
|
101
|
+
if (pageConfig.pageSize > baseData.length) {
|
|
102
|
+
return [].concat((0, _toConsumableArray2.default)(baseData), [defaultValue]);
|
|
103
|
+
}
|
|
104
|
+
var insertIndex = pageConfig.current * pageConfig.pageSize - 1;
|
|
105
|
+
var result = (0, _toConsumableArray2.default)(baseData);
|
|
106
|
+
result.splice(insertIndex, 0, defaultValue);
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
function useEditableDataSource(_ref) {
|
|
110
|
+
var actionDataSource = _ref.actionDataSource,
|
|
111
|
+
editableUtils = _ref.editableUtils,
|
|
112
|
+
pagination = _ref.pagination,
|
|
113
|
+
getRowKey = _ref.getRowKey,
|
|
114
|
+
childrenColumnName = _ref.childrenColumnName;
|
|
115
|
+
return (0, _react.useMemo)(function () {
|
|
116
|
+
var newLineConfig = editableUtils === null || editableUtils === void 0 ? void 0 : editableUtils.newLineRecord;
|
|
117
|
+
var baseData = Array.isArray(actionDataSource) ? (0, _toConsumableArray2.default)(actionDataSource) : [];
|
|
118
|
+
if (!(newLineConfig !== null && newLineConfig !== void 0 && newLineConfig.defaultValue)) {
|
|
119
|
+
return baseData;
|
|
120
|
+
}
|
|
121
|
+
var newLineOptions = newLineConfig.options,
|
|
122
|
+
defaultValue = newLineConfig.defaultValue;
|
|
123
|
+
if (newLineOptions !== null && newLineOptions !== void 0 && newLineOptions.parentKey) {
|
|
124
|
+
return handleNestedRowInsert(baseData, defaultValue, newLineOptions, getRowKey, childrenColumnName || 'children');
|
|
125
|
+
}
|
|
126
|
+
if ((newLineOptions === null || newLineOptions === void 0 ? void 0 : newLineOptions.position) === 'top') {
|
|
127
|
+
return [defaultValue].concat((0, _toConsumableArray2.default)(baseData));
|
|
128
|
+
}
|
|
129
|
+
var pageConfig = pagination && (0, _typeof2.default)(pagination) === 'object' ? pagination : undefined;
|
|
130
|
+
if (pageConfig !== null && pageConfig !== void 0 && pageConfig.current && pageConfig !== null && pageConfig !== void 0 && pageConfig.pageSize) {
|
|
131
|
+
return handlePaginationInsert(baseData, defaultValue, pageConfig);
|
|
132
|
+
}
|
|
133
|
+
return [].concat((0, _toConsumableArray2.default)(baseData), [defaultValue]);
|
|
134
|
+
}, [actionDataSource, childrenColumnName, editableUtils === null || editableUtils === void 0 ? void 0 : editableUtils.newLineRecord, getRowKey, pagination]);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* 检查是否应该显示创建按钮
|
|
139
|
+
*/
|
|
140
|
+
function shouldShowCreatorButton(maxLength, valueLength, recordCreatorProps) {
|
|
141
|
+
if (typeof maxLength === 'number' && maxLength <= valueLength) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return recordCreatorProps !== false;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* 创建按钮 DOM
|
|
149
|
+
*/
|
|
150
|
+
function createButtonDom(recordCreatorProps, value, intl) {
|
|
151
|
+
var record = recordCreatorProps.record,
|
|
152
|
+
position = recordCreatorProps.position,
|
|
153
|
+
creatorButtonText = recordCreatorProps.creatorButtonText,
|
|
154
|
+
newRecordType = recordCreatorProps.newRecordType,
|
|
155
|
+
parentKey = recordCreatorProps.parentKey,
|
|
156
|
+
style = recordCreatorProps.style,
|
|
157
|
+
restButtonProps = (0, _objectWithoutProperties2.default)(recordCreatorProps, _excluded);
|
|
158
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(RecordCreator, {
|
|
159
|
+
record: (0, _utils.runFunction)(record, value === null || value === void 0 ? void 0 : value.length, value) || {},
|
|
160
|
+
position: position,
|
|
161
|
+
parentKey: (0, _utils.runFunction)(parentKey, value === null || value === void 0 ? void 0 : value.length, value),
|
|
162
|
+
newRecordType: newRecordType,
|
|
163
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Button, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
164
|
+
type: "dashed",
|
|
165
|
+
style: (0, _objectSpread2.default)({
|
|
166
|
+
display: 'block',
|
|
167
|
+
margin: '10px 0',
|
|
168
|
+
width: '100%'
|
|
169
|
+
}, style),
|
|
170
|
+
icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.PlusOutlined, {})
|
|
171
|
+
}, restButtonProps), {}, {
|
|
172
|
+
children: creatorButtonText || intl.getMessage('editableTable.action.add', '添加一行数据')
|
|
173
|
+
}))
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* 创建顶部按钮的渲染属性
|
|
179
|
+
*/
|
|
180
|
+
function createTopButtonProps(creatorButtonDom, columnsLength) {
|
|
181
|
+
return {
|
|
182
|
+
components: {
|
|
183
|
+
header: {
|
|
184
|
+
wrapper: function wrapper(_ref2) {
|
|
185
|
+
var className = _ref2.className,
|
|
186
|
+
children = _ref2.children;
|
|
187
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("thead", {
|
|
188
|
+
className: className,
|
|
189
|
+
children: [children, /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
|
|
190
|
+
style: {
|
|
191
|
+
position: 'relative'
|
|
192
|
+
},
|
|
193
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
194
|
+
colSpan: 0,
|
|
195
|
+
style: {
|
|
196
|
+
visibility: 'hidden'
|
|
197
|
+
},
|
|
198
|
+
children: creatorButtonDom
|
|
199
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
200
|
+
style: {
|
|
201
|
+
position: 'absolute',
|
|
202
|
+
left: 0,
|
|
203
|
+
width: '100%'
|
|
204
|
+
},
|
|
205
|
+
colSpan: columnsLength,
|
|
206
|
+
children: creatorButtonDom
|
|
207
|
+
})]
|
|
208
|
+
})]
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* 创建底部按钮的渲染属性
|
|
218
|
+
*/
|
|
219
|
+
function createBottomButtonProps(creatorButtonDom, _tableViewRender) {
|
|
220
|
+
return {
|
|
221
|
+
tableViewRender: function tableViewRender(_, dom) {
|
|
222
|
+
var _tableViewRender2;
|
|
223
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
224
|
+
children: [(_tableViewRender2 = _tableViewRender === null || _tableViewRender === void 0 ? void 0 : _tableViewRender(_, dom)) !== null && _tableViewRender2 !== void 0 ? _tableViewRender2 : dom, creatorButtonDom]
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function useCreatorButton(_ref3) {
|
|
230
|
+
var recordCreatorProps = _ref3.recordCreatorProps,
|
|
231
|
+
maxLength = _ref3.maxLength,
|
|
232
|
+
value = _ref3.value,
|
|
233
|
+
intl = _ref3.intl,
|
|
234
|
+
isTop = _ref3.isTop,
|
|
235
|
+
columnsLength = _ref3.columnsLength,
|
|
236
|
+
tableViewRender = _ref3.tableViewRender;
|
|
237
|
+
var creatorButtonDom = (0, _react.useMemo)(function () {
|
|
238
|
+
if (!shouldShowCreatorButton(maxLength, (value === null || value === void 0 ? void 0 : value.length) || 0, recordCreatorProps)) {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
if (!recordCreatorProps) {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
return createButtonDom(recordCreatorProps, value, intl);
|
|
245
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
246
|
+
}, [maxLength, recordCreatorProps, value === null || value === void 0 ? void 0 : value.length, intl]);
|
|
247
|
+
var buttonRenderProps = (0, _react.useMemo)(function () {
|
|
248
|
+
if (!creatorButtonDom) {
|
|
249
|
+
return {};
|
|
250
|
+
}
|
|
251
|
+
return isTop ? createTopButtonProps(creatorButtonDom, columnsLength) : createBottomButtonProps(creatorButtonDom, tableViewRender);
|
|
252
|
+
}, [columnsLength, creatorButtonDom, isTop, tableViewRender]);
|
|
253
|
+
return {
|
|
254
|
+
creatorButtonDom: creatorButtonDom,
|
|
255
|
+
buttonRenderProps: buttonRenderProps
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
73
259
|
/**
|
|
74
260
|
* 可以直接放到 Form 中的可编辑表格
|
|
75
261
|
* A React component that is used to create a table.
|
|
76
262
|
* @param props
|
|
77
263
|
*/
|
|
78
264
|
function EditableTable(props) {
|
|
79
|
-
var _props$editable2,
|
|
265
|
+
var _props$editable2, _rest$columns;
|
|
80
266
|
var intl = (0, _provider.useIntl)();
|
|
81
267
|
var onTableChange = props.onTableChange,
|
|
82
268
|
maxLength = props.maxLength,
|
|
@@ -87,20 +273,40 @@ function EditableTable(props) {
|
|
|
87
273
|
defaultValue = props.defaultValue,
|
|
88
274
|
onChange = props.onChange,
|
|
89
275
|
editableFormRef = props.editableFormRef,
|
|
90
|
-
rest = (0, _objectWithoutProperties2.default)(props,
|
|
276
|
+
rest = (0, _objectWithoutProperties2.default)(props, _excluded2);
|
|
91
277
|
var preData = (0, _react.useRef)(undefined);
|
|
92
278
|
var actionRef = (0, _react.useRef)();
|
|
93
279
|
var formRef = (0, _react.useRef)();
|
|
280
|
+
var form = _antd.Form.useFormInstance();
|
|
94
281
|
|
|
95
282
|
// 设置 ref
|
|
96
283
|
(0, _react.useImperativeHandle)(rest.actionRef, function () {
|
|
97
284
|
return actionRef.current;
|
|
98
285
|
}, [actionRef.current]);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
286
|
+
|
|
287
|
+
// 在 name 模式下,如果没有传递 value prop,尝试从表单值中获取初始值
|
|
288
|
+
var getInitialValue = function getInitialValue() {
|
|
289
|
+
if (props.value) {
|
|
290
|
+
return props.value;
|
|
291
|
+
}
|
|
292
|
+
if (defaultValue) {
|
|
293
|
+
return defaultValue;
|
|
294
|
+
}
|
|
295
|
+
// 如果使用了 name 且没有 value,尝试从表单获取初始值
|
|
296
|
+
if (props.name && form) {
|
|
297
|
+
var namePath = [props.name].flat(1).filter(Boolean);
|
|
298
|
+
var formValue = form.getFieldValue(namePath);
|
|
299
|
+
if (Array.isArray(formValue)) {
|
|
300
|
+
return formValue;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return [];
|
|
304
|
+
};
|
|
305
|
+
var _useMergedState = (0, _util.useMergedState)(getInitialValue, {
|
|
102
306
|
value: props.value,
|
|
103
|
-
onChange
|
|
307
|
+
// 在非受控模式下,onChange 应该在 onDataSourceChange 中触发
|
|
308
|
+
// 这样可以确保数据已经正确更新
|
|
309
|
+
onChange: props.controlled ? props.onChange : undefined
|
|
104
310
|
}),
|
|
105
311
|
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
|
|
106
312
|
value = _useMergedState2[0],
|
|
@@ -115,207 +321,305 @@ function EditableTable(props) {
|
|
|
115
321
|
}, [rowKey]);
|
|
116
322
|
|
|
117
323
|
/**
|
|
118
|
-
*
|
|
119
|
-
* @param finlayRowKey
|
|
120
|
-
* @returns string | number
|
|
324
|
+
* 创建编辑 keys 的 Set,用于快速查找
|
|
121
325
|
*/
|
|
122
|
-
var
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
326
|
+
var createEditingKeysSet = (0, _utils.useRefFunction)(function (editingKeys) {
|
|
327
|
+
return new Set((editingKeys || []).map(function (key) {
|
|
328
|
+
return String(key);
|
|
329
|
+
}));
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* 同步表单值,排除正在编辑的行
|
|
334
|
+
*/
|
|
335
|
+
var syncFormValuesExcludingEditing = (0, _utils.useRefFunction)(function (dataSource, editingKeysSet, namePath) {
|
|
336
|
+
if (!formRef.current) return;
|
|
337
|
+
try {
|
|
338
|
+
if (namePath && namePath.length > 0) {
|
|
339
|
+
// name 模式:需要保留正在编辑的行
|
|
340
|
+
var currentFormValues = formRef.current.getFieldsValue() || {};
|
|
341
|
+
var currentList = (0, _util.get)(currentFormValues, namePath);
|
|
342
|
+
if (currentList && Array.isArray(currentList)) {
|
|
343
|
+
// 构建新的表单值,保留正在编辑的行
|
|
344
|
+
// 使用 Map 优化查找性能,将 O(n²) 降低到 O(n)
|
|
345
|
+
var currentListMap = new Map();
|
|
346
|
+
currentList.forEach(function (item, idx) {
|
|
347
|
+
var key = getRowKey(item, idx);
|
|
348
|
+
currentListMap.set(String(key), item);
|
|
349
|
+
});
|
|
350
|
+
var newList = dataSource.map(function (item, index) {
|
|
351
|
+
var key = getRowKey(item, index);
|
|
352
|
+
var keyStr = String(key);
|
|
353
|
+
|
|
354
|
+
// 如果该行正在编辑,保留表单中的值
|
|
355
|
+
if (editingKeysSet.has(keyStr)) {
|
|
356
|
+
return currentListMap.get(keyStr) || item;
|
|
357
|
+
}
|
|
358
|
+
return item;
|
|
359
|
+
});
|
|
360
|
+
var newValue = (0, _util.set)({}, namePath, newList);
|
|
361
|
+
formRef.current.setFieldsValue(newValue);
|
|
362
|
+
} else {
|
|
363
|
+
var _newValue = (0, _util.set)({}, namePath, dataSource);
|
|
364
|
+
formRef.current.setFieldsValue(_newValue);
|
|
365
|
+
}
|
|
366
|
+
} else {
|
|
367
|
+
// 非 name 模式:直接设置值
|
|
368
|
+
var formValues = {};
|
|
369
|
+
dataSource.forEach(function (current, index) {
|
|
370
|
+
var key = getRowKey(current, index);
|
|
371
|
+
var keyStr = String(key);
|
|
372
|
+
if (!editingKeysSet.has(keyStr)) {
|
|
373
|
+
formValues[keyStr] = current;
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
if (Object.keys(formValues).length > 0) {
|
|
377
|
+
formRef.current.setFieldsValue(formValues);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
} catch (error) {
|
|
381
|
+
console.warn('Failed to sync form values:', error);
|
|
130
382
|
}
|
|
383
|
+
});
|
|
131
384
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
385
|
+
/**
|
|
386
|
+
* 将数字索引转换为实际的 rowKey(非 name 模式)
|
|
387
|
+
*/
|
|
388
|
+
var convertIndexToRowKey = (0, _utils.useRefFunction)(function (index) {
|
|
389
|
+
var _value$length;
|
|
390
|
+
var dataLength = (_value$length = value === null || value === void 0 ? void 0 : value.length) !== null && _value$length !== void 0 ? _value$length : 0;
|
|
391
|
+
if (index >= dataLength) return index;
|
|
392
|
+
var rowData = value === null || value === void 0 ? void 0 : value[index];
|
|
393
|
+
return getRowKey === null || getRowKey === void 0 ? void 0 : getRowKey(rowData, index);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* 将 rowKey 转换为数字索引(name 模式)
|
|
398
|
+
*/
|
|
399
|
+
var convertRowKeyToIndex = (0, _utils.useRefFunction)(function (rowKey) {
|
|
400
|
+
var _value$length2;
|
|
401
|
+
var dataLength = (_value$length2 = value === null || value === void 0 ? void 0 : value.length) !== null && _value$length2 !== void 0 ? _value$length2 : 0;
|
|
402
|
+
if (typeof rowKey === 'string' || rowKey >= dataLength) {
|
|
136
403
|
var _rowIndex = value.findIndex(function (item, index) {
|
|
137
404
|
var _getRowKey;
|
|
138
|
-
return (getRowKey === null || getRowKey === void 0 || (_getRowKey = getRowKey(item, index)) === null || _getRowKey === void 0 ? void 0 : _getRowKey.toString()) === (
|
|
405
|
+
return (getRowKey === null || getRowKey === void 0 || (_getRowKey = getRowKey(item, index)) === null || _getRowKey === void 0 ? void 0 : _getRowKey.toString()) === (rowKey === null || rowKey === void 0 ? void 0 : rowKey.toString());
|
|
139
406
|
});
|
|
140
407
|
if (_rowIndex !== -1) return _rowIndex;
|
|
141
408
|
}
|
|
409
|
+
return rowKey;
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* 根据不同的情况返回不同的 rowKey
|
|
414
|
+
*/
|
|
415
|
+
var coverRowKey = (0, _utils.useRefFunction)(function (finlayRowKey) {
|
|
416
|
+
if (typeof finlayRowKey === 'number' && !props.name) {
|
|
417
|
+
return convertIndexToRowKey(finlayRowKey);
|
|
418
|
+
}
|
|
419
|
+
if (props.name) {
|
|
420
|
+
return convertRowKeyToIndex(finlayRowKey);
|
|
421
|
+
}
|
|
142
422
|
return finlayRowKey;
|
|
143
423
|
});
|
|
144
424
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
425
|
+
/**
|
|
426
|
+
* 构建表单字段路径
|
|
427
|
+
*/
|
|
428
|
+
var buildFormFieldPath = (0, _utils.useRefFunction)(function (rowKey) {
|
|
429
|
+
var _rowKey$toString;
|
|
430
|
+
return [props.name, (_rowKey$toString = rowKey === null || rowKey === void 0 ? void 0 : rowKey.toString()) !== null && _rowKey$toString !== void 0 ? _rowKey$toString : ''].flat(1).filter(Boolean);
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* 获取一行数据
|
|
435
|
+
*/
|
|
436
|
+
var getRowData = (0, _utils.useRefFunction)(function (rowIndex) {
|
|
437
|
+
var _formRef$current;
|
|
438
|
+
if (rowIndex == null) {
|
|
439
|
+
throw new Error('rowIndex is required');
|
|
440
|
+
}
|
|
441
|
+
var finlayRowKey = coverRowKey(rowIndex);
|
|
442
|
+
var rowKeyName = buildFormFieldPath(finlayRowKey);
|
|
443
|
+
return (_formRef$current = formRef.current) === null || _formRef$current === void 0 ? void 0 : _formRef$current.getFieldValue(rowKeyName);
|
|
444
|
+
});
|
|
161
445
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
var
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return
|
|
174
|
-
|
|
446
|
+
/**
|
|
447
|
+
* 获取整个表格的数据
|
|
448
|
+
*/
|
|
449
|
+
var getRowsData = (0, _utils.useRefFunction)(function () {
|
|
450
|
+
var _formRef$current3;
|
|
451
|
+
var rowKeyName = [props.name].flat(1).filter(Boolean);
|
|
452
|
+
if (Array.isArray(rowKeyName) && rowKeyName.length === 0) {
|
|
453
|
+
var _formRef$current2;
|
|
454
|
+
var rowData = (_formRef$current2 = formRef.current) === null || _formRef$current2 === void 0 ? void 0 : _formRef$current2.getFieldsValue();
|
|
455
|
+
if (Array.isArray(rowData)) return rowData;
|
|
456
|
+
return Object.keys(rowData).map(function (key) {
|
|
457
|
+
return rowData[key];
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return (_formRef$current3 = formRef.current) === null || _formRef$current3 === void 0 ? void 0 : _formRef$current3.getFieldValue(rowKeyName);
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* 设置一行数据
|
|
465
|
+
*/
|
|
466
|
+
var setRowData = (0, _utils.useRefFunction)(function (rowIndex, data) {
|
|
467
|
+
if (rowIndex == null) {
|
|
468
|
+
throw new Error('rowIndex is required');
|
|
469
|
+
}
|
|
470
|
+
var finlayRowKey = coverRowKey(rowIndex);
|
|
471
|
+
var rowKeyName = buildFormFieldPath(finlayRowKey);
|
|
472
|
+
var currentRowData = getRowData(rowIndex);
|
|
473
|
+
var newRowData = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, currentRowData), data || {});
|
|
474
|
+
|
|
475
|
+
// 在 name 模式下,需要更新整个数组
|
|
476
|
+
if (props.name) {
|
|
477
|
+
var _formRef$current4;
|
|
478
|
+
var tableName = [props.name].flat(1).filter(Boolean);
|
|
479
|
+
// 优先从 value prop 获取数据(受控模式),否则从表单值获取
|
|
480
|
+
var currentTableData = props.value || ((_formRef$current4 = formRef.current) === null || _formRef$current4 === void 0 ? void 0 : _formRef$current4.getFieldValue(tableName));
|
|
481
|
+
if (Array.isArray(currentTableData)) {
|
|
482
|
+
// 找到要更新的行的索引
|
|
483
|
+
var rowIndexToUpdate = typeof finlayRowKey === 'number' ? finlayRowKey : currentTableData.findIndex(function (row, index) {
|
|
484
|
+
var rowKey = getRowKey === null || getRowKey === void 0 ? void 0 : getRowKey(row, index);
|
|
485
|
+
return rowKey === finlayRowKey || (rowKey === null || rowKey === void 0 ? void 0 : rowKey.toString()) === (finlayRowKey === null || finlayRowKey === void 0 ? void 0 : finlayRowKey.toString());
|
|
175
486
|
});
|
|
487
|
+
if (rowIndexToUpdate >= 0 && rowIndexToUpdate < currentTableData.length) {
|
|
488
|
+
var _formRef$current5;
|
|
489
|
+
// 更新数组中的对应行
|
|
490
|
+
var updatedTableData = (0, _toConsumableArray2.default)(currentTableData);
|
|
491
|
+
updatedTableData[rowIndexToUpdate] = newRowData;
|
|
492
|
+
|
|
493
|
+
// 设置整个数组,使用 set 来构建正确的路径
|
|
494
|
+
// 使用与 syncFormValuesExcludingEditing 相同的路径格式(数组路径)
|
|
495
|
+
// 这样可以确保 getFieldValue 能正确获取值
|
|
496
|
+
var updateValues = (0, _util.set)({}, tableName, updatedTableData);
|
|
497
|
+
(_formRef$current5 = formRef.current) === null || _formRef$current5 === void 0 || _formRef$current5.setFieldsValue(updateValues);
|
|
498
|
+
|
|
499
|
+
// 在受控模式下,触发 onChange
|
|
500
|
+
if (props.controlled && props.onChange) {
|
|
501
|
+
props.onChange(updatedTableData);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
} else {
|
|
505
|
+
var _formRef$current6;
|
|
506
|
+
// 如果当前没有数据,直接设置单个字段
|
|
507
|
+
var _updateValues = (0, _util.set)({}, rowKeyName, newRowData);
|
|
508
|
+
(_formRef$current6 = formRef.current) === null || _formRef$current6 === void 0 || _formRef$current6.setFieldsValue(_updateValues);
|
|
176
509
|
}
|
|
177
|
-
|
|
178
|
-
|
|
510
|
+
} else {
|
|
511
|
+
var _formRef$current7;
|
|
512
|
+
// 非 name 模式下,直接设置单个字段
|
|
513
|
+
var _updateValues2 = (0, _util.set)({}, rowKeyName, newRowData);
|
|
514
|
+
(_formRef$current7 = formRef.current) === null || _formRef$current7 === void 0 || _formRef$current7.setFieldsValue(_updateValues2);
|
|
515
|
+
}
|
|
516
|
+
return true;
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
// 设置 editableFormRef
|
|
520
|
+
(0, _react.useImperativeHandle)(editableFormRef, function () {
|
|
179
521
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, formRef.current), {}, {
|
|
180
522
|
getRowData: getRowData,
|
|
181
523
|
getRowsData: getRowsData,
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
524
|
+
setRowData: setRowData
|
|
525
|
+
});
|
|
526
|
+
}, [coverRowKey, props.name, getRowData, getRowsData, setRowData]);
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* 受控模式下同步表单值
|
|
530
|
+
* 在受控模式下,即使正在编辑的行也要同步更新,因为数据由外部完全控制
|
|
531
|
+
* 使用深度比较优化性能,避免频繁的序列化操作
|
|
532
|
+
* 注意:只有当 value 明确传递时才同步,避免覆盖表单中的初始值
|
|
533
|
+
*/
|
|
534
|
+
(0, _utils.useDeepCompareEffect)(function () {
|
|
535
|
+
if (!props.controlled || !formRef.current) return;
|
|
536
|
+
|
|
537
|
+
// 在受控模式下,只有当 value 明确传递时才同步
|
|
538
|
+
// 避免在 value 为 undefined 时覆盖表单中的初始值
|
|
539
|
+
if (value === undefined) return;
|
|
540
|
+
|
|
541
|
+
// 在受控模式下,同步所有值(包括正在编辑的行)
|
|
542
|
+
// 因为数据由外部完全控制,应该同步更新
|
|
543
|
+
try {
|
|
544
|
+
if (props.name) {
|
|
545
|
+
// name 模式:直接设置整个数组
|
|
546
|
+
var namePath = [props.name].flat(1);
|
|
547
|
+
var newValue = (0, _util.set)({}, namePath, value);
|
|
548
|
+
formRef.current.setFieldsValue(newValue);
|
|
549
|
+
} else {
|
|
550
|
+
// 非 name 模式:直接设置值
|
|
551
|
+
var formValues = {};
|
|
552
|
+
value.forEach(function (item, index) {
|
|
553
|
+
var key = getRowKey(item, index);
|
|
554
|
+
var keyStr = String(key);
|
|
555
|
+
formValues[keyStr] = item;
|
|
556
|
+
});
|
|
557
|
+
if (Object.keys(formValues).length > 0) {
|
|
558
|
+
formRef.current.setFieldsValue(formValues);
|
|
192
559
|
}
|
|
193
|
-
var finlayRowKey = coverRowKey(rowIndex);
|
|
194
|
-
var rowKeyName = [props.name, (_finlayRowKey$toStrin2 = finlayRowKey === null || finlayRowKey === void 0 ? void 0 : finlayRowKey.toString()) !== null && _finlayRowKey$toStrin2 !== void 0 ? _finlayRowKey$toStrin2 : ''].flat(1).filter(Boolean);
|
|
195
|
-
var newRowData = Object.assign({}, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, getRowData(rowIndex)), data || {}));
|
|
196
|
-
var updateValues = (0, _util.set)({}, rowKeyName, newRowData);
|
|
197
|
-
(_formRef$current4 = formRef.current) === null || _formRef$current4 === void 0 || _formRef$current4.setFieldsValue(updateValues);
|
|
198
|
-
return true;
|
|
199
560
|
}
|
|
200
|
-
})
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}, [(0, _utils.stringify)(value), props.controlled]);
|
|
561
|
+
} catch (error) {
|
|
562
|
+
console.warn('Failed to sync form values in controlled mode:', error);
|
|
563
|
+
}
|
|
564
|
+
}, [value, props.controlled, props.name, getRowKey]);
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* 同步表单实例引用
|
|
568
|
+
* 只在 name 模式下且 form 存在时更新
|
|
569
|
+
*/
|
|
210
570
|
(0, _react.useEffect)(function () {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
formRef.current = props
|
|
571
|
+
var _props$editable;
|
|
572
|
+
if (props.name && props !== null && props !== void 0 && (_props$editable = props.editable) !== null && _props$editable !== void 0 && _props$editable.form) {
|
|
573
|
+
formRef.current = props.editable.form;
|
|
214
574
|
}
|
|
215
575
|
}, [(_props$editable2 = props.editable) === null || _props$editable2 === void 0 ? void 0 : _props$editable2.form, props.name]);
|
|
216
|
-
var
|
|
217
|
-
|
|
218
|
-
position = _ref.position,
|
|
219
|
-
creatorButtonText = _ref.creatorButtonText,
|
|
220
|
-
newRecordType = _ref.newRecordType,
|
|
221
|
-
parentKey = _ref.parentKey,
|
|
222
|
-
style = _ref.style,
|
|
223
|
-
restButtonProps = (0, _objectWithoutProperties2.default)(_ref, _excluded2);
|
|
576
|
+
var _ref4 = recordCreatorProps || {},
|
|
577
|
+
position = _ref4.position;
|
|
224
578
|
var isTop = position === 'top';
|
|
225
|
-
var
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
style: (0, _objectSpread2.default)({
|
|
237
|
-
display: 'block',
|
|
238
|
-
margin: '10px 0',
|
|
239
|
-
width: '100%'
|
|
240
|
-
}, style),
|
|
241
|
-
icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.PlusOutlined, {})
|
|
242
|
-
}, restButtonProps), {}, {
|
|
243
|
-
children: creatorButtonText || intl.getMessage('editableTable.action.add', '添加一行数据')
|
|
244
|
-
}))
|
|
245
|
-
});
|
|
246
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
247
|
-
}, [recordCreatorProps, maxLength, value === null || value === void 0 ? void 0 : value.length]);
|
|
248
|
-
var buttonRenderProps = (0, _react.useMemo)(function () {
|
|
249
|
-
if (!creatorButtonDom) {
|
|
250
|
-
return {};
|
|
251
|
-
}
|
|
252
|
-
if (isTop) {
|
|
253
|
-
return {
|
|
254
|
-
components: {
|
|
255
|
-
header: {
|
|
256
|
-
wrapper: function wrapper(_ref2) {
|
|
257
|
-
var _rest$columns;
|
|
258
|
-
var className = _ref2.className,
|
|
259
|
-
children = _ref2.children;
|
|
260
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("thead", {
|
|
261
|
-
className: className,
|
|
262
|
-
children: [children, /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
|
|
263
|
-
style: {
|
|
264
|
-
position: 'relative'
|
|
265
|
-
},
|
|
266
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
267
|
-
colSpan: 0,
|
|
268
|
-
style: {
|
|
269
|
-
visibility: 'hidden'
|
|
270
|
-
},
|
|
271
|
-
children: creatorButtonDom
|
|
272
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
273
|
-
style: {
|
|
274
|
-
position: 'absolute',
|
|
275
|
-
left: 0,
|
|
276
|
-
width: '100%'
|
|
277
|
-
},
|
|
278
|
-
colSpan: (_rest$columns = rest.columns) === null || _rest$columns === void 0 ? void 0 : _rest$columns.length,
|
|
279
|
-
children: creatorButtonDom
|
|
280
|
-
})]
|
|
281
|
-
})]
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
return {
|
|
289
|
-
tableViewRender: function tableViewRender(_, dom) {
|
|
290
|
-
var _props$tableViewRende, _props$tableViewRende2;
|
|
291
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
292
|
-
children: [(_props$tableViewRende = (_props$tableViewRende2 = props.tableViewRender) === null || _props$tableViewRende2 === void 0 ? void 0 : _props$tableViewRende2.call(props, _, dom)) !== null && _props$tableViewRende !== void 0 ? _props$tableViewRende : dom, creatorButtonDom]
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
};
|
|
296
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
297
|
-
}, [isTop, creatorButtonDom]);
|
|
298
|
-
var editableProps = (0, _objectSpread2.default)({}, props.editable);
|
|
579
|
+
var _useCreatorButton = useCreatorButton({
|
|
580
|
+
recordCreatorProps: recordCreatorProps,
|
|
581
|
+
maxLength: maxLength,
|
|
582
|
+
value: value,
|
|
583
|
+
intl: intl,
|
|
584
|
+
isTop: isTop,
|
|
585
|
+
columnsLength: (_rest$columns = rest.columns) === null || _rest$columns === void 0 ? void 0 : _rest$columns.length,
|
|
586
|
+
tableViewRender: props.tableViewRender
|
|
587
|
+
}),
|
|
588
|
+
creatorButtonDom = _useCreatorButton.creatorButtonDom,
|
|
589
|
+
buttonRenderProps = _useCreatorButton.buttonRenderProps;
|
|
299
590
|
|
|
300
591
|
/**
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
592
|
+
* 处理值变化回调
|
|
593
|
+
* 注意:受控模式下不调用 onChange,避免循环更新
|
|
594
|
+
* onChange 应该由外部控制,而不是在内部触发
|
|
304
595
|
*/
|
|
305
|
-
var
|
|
596
|
+
var handleValuesChange = (0, _utils.useRefFunction)(function (r, dataSource) {
|
|
306
597
|
var _props$editable3, _props$editable3$onVa, _props$onValuesChange;
|
|
307
598
|
(_props$editable3 = props.editable) === null || _props$editable3 === void 0 || (_props$editable3$onVa = _props$editable3.onValuesChange) === null || _props$editable3$onVa === void 0 || _props$editable3$onVa.call(_props$editable3, r, dataSource);
|
|
308
599
|
(_props$onValuesChange = props.onValuesChange) === null || _props$onValuesChange === void 0 || _props$onValuesChange.call(props, dataSource, r);
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
600
|
+
|
|
601
|
+
// 在受控模式下,当表单值变化时也应该触发 onChange
|
|
602
|
+
// 这样外部可以同步更新 value,实现真正的受控
|
|
603
|
+
if (props.controlled && props !== null && props !== void 0 && props.onChange) {
|
|
604
|
+
props.onChange(dataSource);
|
|
312
605
|
}
|
|
606
|
+
// 非受控模式下,onChange 应该在 onDataSourceChange 中触发
|
|
607
|
+
// 这样可以确保数据已经正确更新
|
|
313
608
|
});
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
609
|
+
|
|
610
|
+
/**
|
|
611
|
+
* 构建可编辑属性
|
|
612
|
+
* 使用 useMemo 优化性能,避免不必要的重新创建
|
|
613
|
+
*/
|
|
614
|
+
var editableProps = (0, _react.useMemo)(function () {
|
|
615
|
+
var _props$editable4;
|
|
616
|
+
var baseProps = (0, _objectSpread2.default)({}, props.editable);
|
|
617
|
+
var hasOnValuesChange = Boolean(props === null || props === void 0 ? void 0 : props.onValuesChange) || Boolean((_props$editable4 = props.editable) === null || _props$editable4 === void 0 ? void 0 : _props$editable4.onValuesChange) || Boolean(props.controlled && (props === null || props === void 0 ? void 0 : props.onChange));
|
|
618
|
+
if (hasOnValuesChange) {
|
|
619
|
+
baseProps.onValuesChange = handleValuesChange;
|
|
620
|
+
}
|
|
621
|
+
return baseProps;
|
|
622
|
+
}, [props.editable, props.onValuesChange, props.controlled, props.onChange, handleValuesChange]);
|
|
319
623
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
320
624
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(EditableTableActionContext.Provider, {
|
|
321
625
|
value: actionRef,
|
|
@@ -336,34 +640,63 @@ function EditableTable(props) {
|
|
|
336
640
|
}),
|
|
337
641
|
dataSource: value,
|
|
338
642
|
onDataSourceChange: function onDataSourceChange(dataSource) {
|
|
643
|
+
// setValue 会触发 onChange,但我们需要确保数据已经正确更新
|
|
644
|
+
// 所以先设置数据,然后手动触发 onChange
|
|
339
645
|
setValue(dataSource);
|
|
646
|
+
|
|
340
647
|
/**
|
|
341
|
-
* 如果是
|
|
648
|
+
* 如果是 name 模式,需要同步表单值
|
|
649
|
+
* 避免表单值和数据源不一致
|
|
650
|
+
* 注意:不会覆盖正在编辑的行
|
|
342
651
|
*/
|
|
343
|
-
if (props.name &&
|
|
344
|
-
var
|
|
345
|
-
var
|
|
346
|
-
|
|
652
|
+
if (props.name && formRef.current) {
|
|
653
|
+
var _props$editable5;
|
|
654
|
+
var editingKeys = (_props$editable5 = props.editable) === null || _props$editable5 === void 0 ? void 0 : _props$editable5.editableKeys;
|
|
655
|
+
var editingKeysSet = createEditingKeysSet(editingKeys);
|
|
656
|
+
var namePath = [props.name].flat(1).filter(Boolean);
|
|
657
|
+
syncFormValuesExcludingEditing(dataSource, editingKeysSet, namePath);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// 在非受控模式下,通过 onDataSourceChange 触发 onChange
|
|
661
|
+
// 这样可以确保数据已经正确更新
|
|
662
|
+
if (!props.controlled && props.onChange) {
|
|
663
|
+
props.onChange(dataSource);
|
|
347
664
|
}
|
|
348
665
|
}
|
|
349
666
|
}))
|
|
350
667
|
}), props.name ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_form.ProFormDependency, {
|
|
351
668
|
name: [props.name],
|
|
352
669
|
children: function children(changeValue) {
|
|
353
|
-
|
|
670
|
+
// 初始化 preData
|
|
354
671
|
if (!preData.current) {
|
|
355
672
|
preData.current = value;
|
|
356
673
|
return null;
|
|
357
674
|
}
|
|
358
|
-
var
|
|
359
|
-
var
|
|
675
|
+
var namePath = [props.name].flat(1);
|
|
676
|
+
var list = (0, _util.get)(changeValue, namePath);
|
|
677
|
+
|
|
678
|
+
// 添加空值检查,避免后续操作出错
|
|
679
|
+
if (!list || !Array.isArray(list)) {
|
|
680
|
+
preData.current = value;
|
|
681
|
+
return null;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// 在更新 preData 之前找到变化的项
|
|
685
|
+
// 使用 findIndex 可以同时获取变化的项和索引
|
|
686
|
+
var changeIndex = list.findIndex(function (item, index) {
|
|
360
687
|
var _preData$current;
|
|
361
688
|
return !(0, _utils.isDeepEqualReact)(item, (_preData$current = preData.current) === null || _preData$current === void 0 ? void 0 : _preData$current[index]);
|
|
362
689
|
});
|
|
690
|
+
|
|
691
|
+
// 只有在找到变化项时才触发回调
|
|
692
|
+
if (changeIndex !== -1) {
|
|
693
|
+
var _props$editable6, _props$editable6$onVa;
|
|
694
|
+
var changeItem = list[changeIndex];
|
|
695
|
+
props === null || props === void 0 || (_props$editable6 = props.editable) === null || _props$editable6 === void 0 || (_props$editable6$onVa = _props$editable6.onValuesChange) === null || _props$editable6$onVa === void 0 || _props$editable6$onVa.call(_props$editable6, changeItem, list);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// 在找到 changeItem 之后再更新 preData,确保后续比较正确
|
|
363
699
|
preData.current = value;
|
|
364
|
-
if (!changeItem) return null;
|
|
365
|
-
// 如果不存在 preData 说明是初始化,此时不需要触发 onValuesChange
|
|
366
|
-
props === null || props === void 0 || (_props$editable5 = props.editable) === null || _props$editable5 === void 0 || (_props$editable5$onVa = _props$editable5.onValuesChange) === null || _props$editable5$onVa === void 0 || _props$editable5$onVa.call(_props$editable5, changeItem, list);
|
|
367
700
|
return null;
|
|
368
701
|
}
|
|
369
702
|
}) : null]
|