@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
|
@@ -18,7 +18,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
18
18
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
19
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
20
20
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
21
|
-
var
|
|
21
|
+
var _objectSpread4 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
22
22
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
23
23
|
var _icons = require("@ant-design/icons");
|
|
24
24
|
var _util = require("@rc-component/util");
|
|
@@ -34,7 +34,7 @@ var _merge = require("../merge");
|
|
|
34
34
|
var _useMountMergeState5 = require("../useMountMergeState");
|
|
35
35
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
36
36
|
var _excluded = ["map_row_parentKey"],
|
|
37
|
-
_excluded2 = ["map_row_parentKey", "map_row_key"],
|
|
37
|
+
_excluded2 = ["map_row_parentKey", "map_row_key", "isNewRecord"],
|
|
38
38
|
_excluded3 = ["map_row_key"];
|
|
39
39
|
/* eslint-disable react-hooks/exhaustive-deps */
|
|
40
40
|
var noteOnce = _util.warning.noteOnce;
|
|
@@ -50,11 +50,132 @@ var recordKeyToString = exports.recordKeyToString = function recordKeyToString(r
|
|
|
50
50
|
if (Array.isArray(rowKey)) return rowKey.join(',');
|
|
51
51
|
return rowKey;
|
|
52
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* 扁平化记录树结构为 Map
|
|
55
|
+
*/
|
|
56
|
+
function flattenRecordsToMap(records, getRowKey, childrenColumnName, parentKey, parentIndex) {
|
|
57
|
+
var kvMap = new Map();
|
|
58
|
+
records.forEach(function (record, index) {
|
|
59
|
+
var eachIndex = (parentIndex || 0) * 10 + index;
|
|
60
|
+
var recordKey = getRowKey(record, eachIndex).toString();
|
|
61
|
+
var hasChildren = record && (0, _typeof2.default)(record) === 'object' && childrenColumnName in record;
|
|
62
|
+
if (hasChildren) {
|
|
63
|
+
var children = record[childrenColumnName] || [];
|
|
64
|
+
var childrenMap = flattenRecordsToMap(children, getRowKey, childrenColumnName, recordKey, eachIndex);
|
|
65
|
+
childrenMap.forEach(function (value, key) {
|
|
66
|
+
return kvMap.set(key, value);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
var newRecord = (0, _objectSpread4.default)((0, _objectSpread4.default)({}, record), {}, {
|
|
70
|
+
map_row_key: recordKey,
|
|
71
|
+
map_row_parentKey: parentKey
|
|
72
|
+
});
|
|
73
|
+
delete newRecord.children;
|
|
74
|
+
if (!parentKey) {
|
|
75
|
+
delete newRecord.map_row_parentKey;
|
|
76
|
+
}
|
|
77
|
+
kvMap.set(recordKey, newRecord);
|
|
78
|
+
});
|
|
79
|
+
return kvMap;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 重建树结构
|
|
84
|
+
*/
|
|
85
|
+
function rebuildTreeStructure(map, childrenColumnName, action) {
|
|
86
|
+
var childrenMap = new Map();
|
|
87
|
+
var result = [];
|
|
88
|
+
var addNewRecordToChildren = function addNewRecordToChildren(fillChildren) {
|
|
89
|
+
map.forEach(function (value) {
|
|
90
|
+
if (value.map_row_parentKey != null && !value.map_row_key) {
|
|
91
|
+
var map_row_parentKey = value.map_row_parentKey,
|
|
92
|
+
rest = (0, _objectWithoutProperties2.default)(value, _excluded);
|
|
93
|
+
var parentKeyStr = String(map_row_parentKey);
|
|
94
|
+
if (!childrenMap.has(parentKeyStr)) {
|
|
95
|
+
childrenMap.set(parentKeyStr, []);
|
|
96
|
+
}
|
|
97
|
+
if (fillChildren) {
|
|
98
|
+
var _childrenMap$get;
|
|
99
|
+
(_childrenMap$get = childrenMap.get(parentKeyStr)) === null || _childrenMap$get === void 0 || _childrenMap$get.push(rest);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
addNewRecordToChildren(action === 'top');
|
|
105
|
+
|
|
106
|
+
// 第一步:将所有有 parentKey 的节点添加到 childrenMap
|
|
107
|
+
// 这一步不获取 children,只是添加节点到对应的父节点下
|
|
108
|
+
map.forEach(function (value) {
|
|
109
|
+
if (value.map_row_parentKey != null && value.map_row_key) {
|
|
110
|
+
var _ref = value,
|
|
111
|
+
map_row_parentKey = _ref.map_row_parentKey,
|
|
112
|
+
map_row_key = _ref.map_row_key,
|
|
113
|
+
isNewRecord = _ref.isNewRecord,
|
|
114
|
+
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded2);
|
|
115
|
+
var _record = (0, _objectSpread4.default)((0, _objectSpread4.default)({}, rest), {}, {
|
|
116
|
+
map_row_key: map_row_key
|
|
117
|
+
});
|
|
118
|
+
// 确保 parentKey 的类型转换与 flattenRecordsToMap 中的 recordKey 一致
|
|
119
|
+
// 在 flattenRecordsToMap 中,recordKey 被转换为字符串:getRowKey(record, eachIndex).toString()
|
|
120
|
+
// 所以这里也需要确保 parentKey 被转换为字符串,并且类型一致
|
|
121
|
+
var parentKeyStr = map_row_parentKey != null ? String(map_row_parentKey) : null;
|
|
122
|
+
if (!parentKeyStr) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (!childrenMap.has(parentKeyStr)) {
|
|
126
|
+
childrenMap.set(parentKeyStr, []);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// 如果是新记录且 action 为 'top',添加到数组开头;否则添加到末尾
|
|
130
|
+
if (isNewRecord && action === 'top') {
|
|
131
|
+
var _childrenMap$get2;
|
|
132
|
+
(_childrenMap$get2 = childrenMap.get(parentKeyStr)) === null || _childrenMap$get2 === void 0 || _childrenMap$get2.unshift(_record);
|
|
133
|
+
} else {
|
|
134
|
+
var _childrenMap$get3;
|
|
135
|
+
(_childrenMap$get3 = childrenMap.get(parentKeyStr)) === null || _childrenMap$get3 === void 0 || _childrenMap$get3.push(_record);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// 第二步:为所有节点获取 children
|
|
141
|
+
// 这一步确保所有子节点都已经被添加到 childrenMap,所以可以正确获取 children
|
|
142
|
+
map.forEach(function (value) {
|
|
143
|
+
if (value.map_row_parentKey != null && value.map_row_key) {
|
|
144
|
+
var _ref2 = value,
|
|
145
|
+
map_row_parentKey = _ref2.map_row_parentKey,
|
|
146
|
+
map_row_key = _ref2.map_row_key;
|
|
147
|
+
var parentKeyStr = map_row_parentKey != null ? String(map_row_parentKey) : null;
|
|
148
|
+
if (!parentKeyStr) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
var children = childrenMap.get(parentKeyStr);
|
|
152
|
+
if (children && children.length > 0) {
|
|
153
|
+
// 找到对应的 record 并添加 children
|
|
154
|
+
var recordIndex = children.findIndex(function (r) {
|
|
155
|
+
// 比较时需要确保类型一致
|
|
156
|
+
var recordKey = r.map_row_key || r.id;
|
|
157
|
+
return String(recordKey) === String(map_row_key);
|
|
158
|
+
});
|
|
159
|
+
if (recordIndex >= 0 && childrenMap.has(map_row_key)) {
|
|
160
|
+
children[recordIndex] = (0, _objectSpread4.default)((0, _objectSpread4.default)({}, children[recordIndex]), {}, (0, _defineProperty2.default)({}, childrenColumnName, childrenMap.get(map_row_key)));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
addNewRecordToChildren(action === 'update');
|
|
166
|
+
map.forEach(function (value) {
|
|
167
|
+
if (!value.map_row_parentKey) {
|
|
168
|
+
var map_row_key = value.map_row_key,
|
|
169
|
+
rest = (0, _objectWithoutProperties2.default)(value, _excluded3);
|
|
170
|
+
var _record2 = map_row_key && childrenMap.has(map_row_key) ? (0, _objectSpread4.default)((0, _objectSpread4.default)({}, rest), {}, (0, _defineProperty2.default)({}, childrenColumnName, childrenMap.get(map_row_key))) : rest;
|
|
171
|
+
result.push(_record2);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
|
|
53
177
|
/**
|
|
54
178
|
* 使用map 来删除数据,性能一般 但是准确率比较高
|
|
55
|
-
*
|
|
56
|
-
* @param keyProps
|
|
57
|
-
* @param action
|
|
58
179
|
*/
|
|
59
180
|
function editableRowByKey(keyProps, action) {
|
|
60
181
|
var _recordKeyToString;
|
|
@@ -64,95 +185,25 @@ function editableRowByKey(keyProps, action) {
|
|
|
64
185
|
_keyProps$childrenCol = keyProps.childrenColumnName,
|
|
65
186
|
childrenColumnName = _keyProps$childrenCol === void 0 ? 'children' : _keyProps$childrenCol;
|
|
66
187
|
var key = (_recordKeyToString = recordKeyToString(keyProps.key)) === null || _recordKeyToString === void 0 ? void 0 : _recordKeyToString.toString();
|
|
67
|
-
var kvMap =
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* 打平这个数组
|
|
71
|
-
*
|
|
72
|
-
* @param records
|
|
73
|
-
* @param parentKey
|
|
74
|
-
*/
|
|
75
|
-
function dig(records, map_row_parentKey, map_row_index) {
|
|
76
|
-
records.forEach(function (record, index) {
|
|
77
|
-
var eachIndex = (map_row_index || 0) * 10 + index;
|
|
78
|
-
var recordKey = getRowKey(record, eachIndex).toString();
|
|
79
|
-
// children 取在前面方便拼的时候按照反顺序放回去
|
|
80
|
-
if (record && (0, _typeof2.default)(record) === 'object' && childrenColumnName in record) {
|
|
81
|
-
dig(record[childrenColumnName] || [], recordKey, eachIndex);
|
|
82
|
-
}
|
|
83
|
-
var newRecord = (0, _objectSpread3.default)((0, _objectSpread3.default)({}, record), {}, {
|
|
84
|
-
map_row_key: recordKey,
|
|
85
|
-
children: undefined,
|
|
86
|
-
map_row_parentKey: map_row_parentKey
|
|
87
|
-
});
|
|
88
|
-
delete newRecord.children;
|
|
89
|
-
if (!map_row_parentKey) {
|
|
90
|
-
delete newRecord.map_row_parentKey;
|
|
91
|
-
}
|
|
92
|
-
kvMap.set(recordKey, newRecord);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
if (action === 'top') {
|
|
96
|
-
kvMap.set(key, (0, _objectSpread3.default)((0, _objectSpread3.default)({}, kvMap.get(key)), row));
|
|
97
|
-
}
|
|
98
|
-
dig(data);
|
|
99
|
-
if (action === 'update') {
|
|
100
|
-
kvMap.set(key, (0, _objectSpread3.default)((0, _objectSpread3.default)({}, kvMap.get(key)), row));
|
|
101
|
-
}
|
|
188
|
+
var kvMap = flattenRecordsToMap(data, getRowKey, childrenColumnName);
|
|
102
189
|
if (action === 'delete') {
|
|
103
190
|
kvMap.delete(key);
|
|
191
|
+
} else if (action === 'top' || action === 'update') {
|
|
192
|
+
var existingRecord = kvMap.get(key);
|
|
193
|
+
if (existingRecord) {
|
|
194
|
+
kvMap.set(key, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, existingRecord), row));
|
|
195
|
+
} else {
|
|
196
|
+
// 如果记录不存在,创建一个新记录(用于新增场景)
|
|
197
|
+
// 保留 map_row_parentKey 以便正确处理嵌套子节点
|
|
198
|
+
// 添加标记以便在 rebuildTreeStructure 中识别新记录
|
|
199
|
+
kvMap.set(key, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, row), {}, {
|
|
200
|
+
map_row_key: key,
|
|
201
|
+
map_row_parentKey: row.map_row_parentKey,
|
|
202
|
+
isNewRecord: true
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
104
205
|
}
|
|
105
|
-
|
|
106
|
-
var kvArrayMap = new Map();
|
|
107
|
-
var kvSource = [];
|
|
108
|
-
var fillNewRecord = function fillNewRecord() {
|
|
109
|
-
var fillChildren = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
110
|
-
map.forEach(function (value) {
|
|
111
|
-
if (value.map_row_parentKey && !value.map_row_key) {
|
|
112
|
-
var map_row_parentKey = value.map_row_parentKey,
|
|
113
|
-
rest = (0, _objectWithoutProperties2.default)(value, _excluded);
|
|
114
|
-
if (!kvArrayMap.has(map_row_parentKey)) {
|
|
115
|
-
kvArrayMap.set(map_row_parentKey, []);
|
|
116
|
-
}
|
|
117
|
-
if (fillChildren) {
|
|
118
|
-
var _kvArrayMap$get;
|
|
119
|
-
(_kvArrayMap$get = kvArrayMap.get(map_row_parentKey)) === null || _kvArrayMap$get === void 0 || _kvArrayMap$get.push(rest);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
};
|
|
124
|
-
fillNewRecord(action === 'top');
|
|
125
|
-
map.forEach(function (value) {
|
|
126
|
-
if (value.map_row_parentKey && value.map_row_key) {
|
|
127
|
-
var _kvArrayMap$get2;
|
|
128
|
-
var map_row_parentKey = value.map_row_parentKey,
|
|
129
|
-
map_row_key = value.map_row_key,
|
|
130
|
-
rest = (0, _objectWithoutProperties2.default)(value, _excluded2);
|
|
131
|
-
if (kvArrayMap.has(map_row_key)) {
|
|
132
|
-
rest[childrenColumnName] = kvArrayMap.get(map_row_key);
|
|
133
|
-
}
|
|
134
|
-
if (!kvArrayMap.has(map_row_parentKey)) {
|
|
135
|
-
kvArrayMap.set(map_row_parentKey, []);
|
|
136
|
-
}
|
|
137
|
-
(_kvArrayMap$get2 = kvArrayMap.get(map_row_parentKey)) === null || _kvArrayMap$get2 === void 0 || _kvArrayMap$get2.push(rest);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
fillNewRecord(action === 'update');
|
|
141
|
-
map.forEach(function (value) {
|
|
142
|
-
if (!value.map_row_parentKey) {
|
|
143
|
-
var map_row_key = value.map_row_key,
|
|
144
|
-
rest = (0, _objectWithoutProperties2.default)(value, _excluded3);
|
|
145
|
-
if (map_row_key && kvArrayMap.has(map_row_key)) {
|
|
146
|
-
var item = (0, _objectSpread3.default)((0, _objectSpread3.default)({}, rest), {}, (0, _defineProperty2.default)({}, childrenColumnName, kvArrayMap.get(map_row_key)));
|
|
147
|
-
kvSource.push(item);
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
kvSource.push(rest);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
return kvSource;
|
|
154
|
-
};
|
|
155
|
-
return fill(kvMap);
|
|
206
|
+
return rebuildTreeStructure(kvMap, childrenColumnName, action);
|
|
156
207
|
}
|
|
157
208
|
|
|
158
209
|
/**
|
|
@@ -160,14 +211,14 @@ function editableRowByKey(keyProps, action) {
|
|
|
160
211
|
*
|
|
161
212
|
* @param ActionRenderConfig
|
|
162
213
|
*/
|
|
163
|
-
function SaveEditableAction(
|
|
164
|
-
var recordKey =
|
|
165
|
-
onSave =
|
|
166
|
-
row =
|
|
167
|
-
children =
|
|
168
|
-
newLineConfig =
|
|
169
|
-
editorType =
|
|
170
|
-
tableName =
|
|
214
|
+
function SaveEditableAction(_ref3, ref) {
|
|
215
|
+
var recordKey = _ref3.recordKey,
|
|
216
|
+
onSave = _ref3.onSave,
|
|
217
|
+
row = _ref3.row,
|
|
218
|
+
children = _ref3.children,
|
|
219
|
+
newLineConfig = _ref3.newLineConfig,
|
|
220
|
+
editorType = _ref3.editorType,
|
|
221
|
+
tableName = _ref3.tableName;
|
|
171
222
|
var context = (0, _react.useContext)(_ProFormContext.ProFormContext);
|
|
172
223
|
var form = _antd.Form.useFormInstance();
|
|
173
224
|
var _useMountMergeState = (0, _useMountMergeState5.useMountMergeState)(false),
|
|
@@ -186,11 +237,24 @@ function SaveEditableAction(_ref, ref) {
|
|
|
186
237
|
return key === null || key === void 0 ? void 0 : key.toString();
|
|
187
238
|
}).flat(1).filter(Boolean);
|
|
188
239
|
setLoading(true);
|
|
189
|
-
_context.
|
|
240
|
+
_context.prev = 4;
|
|
241
|
+
_context.next = 7;
|
|
190
242
|
return form.validateFields(namePath, {
|
|
191
243
|
recursive: true
|
|
192
244
|
});
|
|
193
|
-
case
|
|
245
|
+
case 7:
|
|
246
|
+
_context.next = 13;
|
|
247
|
+
break;
|
|
248
|
+
case 9:
|
|
249
|
+
_context.prev = 9;
|
|
250
|
+
_context.t0 = _context["catch"](4);
|
|
251
|
+
setLoading(false);
|
|
252
|
+
// 重新抛出验证错误,让表单显示错误信息
|
|
253
|
+
// validateFields 抛出错误时,表单会自动设置错误状态并显示错误
|
|
254
|
+
// 错误对象包含 errorFields,表单会根据这些字段显示错误
|
|
255
|
+
// 确保错误被正确传播,这样表单可以正确显示验证错误
|
|
256
|
+
throw _context.t0;
|
|
257
|
+
case 13:
|
|
194
258
|
fields = (context === null || context === void 0 || (_context$getFieldForm = context.getFieldFormatValue) === null || _context$getFieldForm === void 0 ? void 0 : _context$getFieldForm.call(context, namePath)) || form.getFieldValue(namePath); // 处理 dataIndex 为数组的情况
|
|
195
259
|
if (Array.isArray(recordKey) && recordKey.length > 1) {
|
|
196
260
|
// 获取 namepath
|
|
@@ -199,25 +263,25 @@ function SaveEditableAction(_ref, ref) {
|
|
|
199
263
|
(0, _util.set)(fields, recordKeyPath, curValue);
|
|
200
264
|
}
|
|
201
265
|
data = isMapEditor ? (0, _util.set)({}, namePath, fields) : fields; // 获取数据并保存
|
|
202
|
-
_context.next =
|
|
266
|
+
_context.next = 18;
|
|
203
267
|
return onSave === null || onSave === void 0 ? void 0 : onSave(recordKey,
|
|
204
268
|
// 如果是 map 模式,fields 就是一个值,所以需要set 到对象中
|
|
205
269
|
// 数据模式 fields 是一个对象,所以不需要
|
|
206
270
|
(0, _merge.merge)({}, row, data), row, newLineConfig);
|
|
207
|
-
case
|
|
271
|
+
case 18:
|
|
208
272
|
res = _context.sent;
|
|
209
273
|
setLoading(false);
|
|
210
274
|
return _context.abrupt("return", res);
|
|
211
|
-
case
|
|
212
|
-
_context.prev =
|
|
213
|
-
_context.
|
|
275
|
+
case 23:
|
|
276
|
+
_context.prev = 23;
|
|
277
|
+
_context.t1 = _context["catch"](0);
|
|
214
278
|
setLoading(false);
|
|
215
|
-
throw _context.
|
|
216
|
-
case
|
|
279
|
+
throw _context.t1;
|
|
280
|
+
case 27:
|
|
217
281
|
case "end":
|
|
218
282
|
return _context.stop();
|
|
219
283
|
}
|
|
220
|
-
}, _callee, null, [[0,
|
|
284
|
+
}, _callee, null, [[0, 23], [4, 9]]);
|
|
221
285
|
})));
|
|
222
286
|
|
|
223
287
|
// 保存数据
|
|
@@ -228,7 +292,7 @@ function SaveEditableAction(_ref, ref) {
|
|
|
228
292
|
}, [save]);
|
|
229
293
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("a", {
|
|
230
294
|
onClick: ( /*#__PURE__*/function () {
|
|
231
|
-
var
|
|
295
|
+
var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2(e) {
|
|
232
296
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
|
|
233
297
|
while (1) switch (_context2.prev = _context2.next) {
|
|
234
298
|
case 0:
|
|
@@ -250,7 +314,7 @@ function SaveEditableAction(_ref, ref) {
|
|
|
250
314
|
}, _callee2, null, [[2, 7]]);
|
|
251
315
|
}));
|
|
252
316
|
return function (_x) {
|
|
253
|
-
return
|
|
317
|
+
return _ref5.apply(this, arguments);
|
|
254
318
|
};
|
|
255
319
|
}()),
|
|
256
320
|
children: [loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.LoadingOutlined, {
|
|
@@ -265,20 +329,20 @@ function SaveEditableAction(_ref, ref) {
|
|
|
265
329
|
*
|
|
266
330
|
* @param ActionRenderConfig
|
|
267
331
|
*/
|
|
268
|
-
var DeleteEditableAction = exports.DeleteEditableAction = function DeleteEditableAction(
|
|
269
|
-
var recordKey =
|
|
270
|
-
onDelete =
|
|
271
|
-
preEditRowRef =
|
|
272
|
-
row =
|
|
273
|
-
children =
|
|
274
|
-
deletePopconfirmMessage =
|
|
332
|
+
var DeleteEditableAction = exports.DeleteEditableAction = function DeleteEditableAction(_ref6) {
|
|
333
|
+
var recordKey = _ref6.recordKey,
|
|
334
|
+
onDelete = _ref6.onDelete,
|
|
335
|
+
preEditRowRef = _ref6.preEditRowRef,
|
|
336
|
+
row = _ref6.row,
|
|
337
|
+
children = _ref6.children,
|
|
338
|
+
deletePopconfirmMessage = _ref6.deletePopconfirmMessage;
|
|
275
339
|
var _useMountMergeState3 = (0, _useMountMergeState5.useMountMergeState)(function () {
|
|
276
340
|
return false;
|
|
277
341
|
}),
|
|
278
342
|
_useMountMergeState4 = (0, _slicedToArray2.default)(_useMountMergeState3, 2),
|
|
279
343
|
loading = _useMountMergeState4[0],
|
|
280
344
|
setLoading = _useMountMergeState4[1];
|
|
281
|
-
var
|
|
345
|
+
var onConfirm = (0, _.useRefFunction)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee3() {
|
|
282
346
|
var res;
|
|
283
347
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee3$(_context3) {
|
|
284
348
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -290,26 +354,34 @@ var DeleteEditableAction = exports.DeleteEditableAction = function DeleteEditabl
|
|
|
290
354
|
case 4:
|
|
291
355
|
res = _context3.sent;
|
|
292
356
|
setLoading(false);
|
|
357
|
+
// 如果返回 false,阻止删除操作
|
|
358
|
+
if (!(res === false)) {
|
|
359
|
+
_context3.next = 8;
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
return _context3.abrupt("return", false);
|
|
363
|
+
case 8:
|
|
293
364
|
return _context3.abrupt("return", res);
|
|
294
|
-
case
|
|
295
|
-
_context3.prev =
|
|
365
|
+
case 11:
|
|
366
|
+
_context3.prev = 11;
|
|
296
367
|
_context3.t0 = _context3["catch"](0);
|
|
297
368
|
setLoading(false);
|
|
298
369
|
return _context3.abrupt("return", null);
|
|
299
|
-
case
|
|
300
|
-
_context3.prev =
|
|
370
|
+
case 15:
|
|
371
|
+
_context3.prev = 15;
|
|
301
372
|
if (preEditRowRef) preEditRowRef.current = null;
|
|
302
|
-
return _context3.finish(
|
|
303
|
-
case
|
|
373
|
+
return _context3.finish(15);
|
|
374
|
+
case 18:
|
|
304
375
|
case "end":
|
|
305
376
|
return _context3.stop();
|
|
306
377
|
}
|
|
307
|
-
}, _callee3, null, [[0,
|
|
378
|
+
}, _callee3, null, [[0, 11, 15, 18]]);
|
|
308
379
|
})));
|
|
309
380
|
return children !== false ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Popconfirm, {
|
|
310
|
-
title: deletePopconfirmMessage,
|
|
311
|
-
onConfirm:
|
|
312
|
-
|
|
381
|
+
title: deletePopconfirmMessage || '确定要删除这条记录吗?',
|
|
382
|
+
onConfirm: onConfirm,
|
|
383
|
+
getPopupContainer: function getPopupContainer(triggerNode) {
|
|
384
|
+
return triggerNode.parentElement || document.body;
|
|
313
385
|
},
|
|
314
386
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("a", {
|
|
315
387
|
children: [loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.LoadingOutlined, {
|
|
@@ -334,7 +406,7 @@ var CancelEditableAction = function CancelEditableAction(props) {
|
|
|
334
406
|
var form = _antd.Form.useFormInstance();
|
|
335
407
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
|
|
336
408
|
onClick: ( /*#__PURE__*/function () {
|
|
337
|
-
var
|
|
409
|
+
var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee4(e) {
|
|
338
410
|
var _context$getFieldForm2;
|
|
339
411
|
var isMapEditor, namePath, fields, record, res, _props$onDelete;
|
|
340
412
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee4$(_context4) {
|
|
@@ -373,7 +445,7 @@ var CancelEditableAction = function CancelEditableAction(props) {
|
|
|
373
445
|
}, _callee4);
|
|
374
446
|
}));
|
|
375
447
|
return function (_x2) {
|
|
376
|
-
return
|
|
448
|
+
return _ref8.apply(this, arguments);
|
|
377
449
|
};
|
|
378
450
|
}()),
|
|
379
451
|
children: cancelText || '取消'
|
|
@@ -387,17 +459,17 @@ function defaultActionRender(row, config) {
|
|
|
387
459
|
var SaveEditableActionRef = /*#__PURE__*/(0, _react.forwardRef)(SaveEditableAction);
|
|
388
460
|
var saveRef = /*#__PURE__*/(0, _react.createRef)();
|
|
389
461
|
return {
|
|
390
|
-
save: /*#__PURE__*/(0, _jsxRuntime.jsx)(SaveEditableActionRef, (0,
|
|
462
|
+
save: /*#__PURE__*/(0, _jsxRuntime.jsx)(SaveEditableActionRef, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, config), {}, {
|
|
391
463
|
row: row,
|
|
392
464
|
ref: saveRef,
|
|
393
465
|
children: saveText
|
|
394
466
|
}), 'save' + recordKey),
|
|
395
467
|
saveRef: saveRef,
|
|
396
|
-
delete: (newLineConfig === null || newLineConfig === void 0 ? void 0 : newLineConfig.options.recordKey) !== recordKey ? /*#__PURE__*/(0, _jsxRuntime.jsx)(DeleteEditableAction, (0,
|
|
468
|
+
delete: (newLineConfig === null || newLineConfig === void 0 ? void 0 : newLineConfig.options.recordKey) !== recordKey ? /*#__PURE__*/(0, _jsxRuntime.jsx)(DeleteEditableAction, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, config), {}, {
|
|
397
469
|
row: row,
|
|
398
470
|
children: deleteText
|
|
399
471
|
}), 'delete' + recordKey) : undefined,
|
|
400
|
-
cancel: /*#__PURE__*/(0, _jsxRuntime.jsx)(CancelEditableAction, (0,
|
|
472
|
+
cancel: /*#__PURE__*/(0, _jsxRuntime.jsx)(CancelEditableAction, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, config), {}, {
|
|
401
473
|
row: row
|
|
402
474
|
}), 'cancel' + recordKey)
|
|
403
475
|
};
|
|
@@ -420,30 +492,39 @@ function useEditableArray(props) {
|
|
|
420
492
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
421
493
|
newLineRecordCache = _useState2[0],
|
|
422
494
|
setNewLineRecordCache = _useState2[1];
|
|
423
|
-
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* 构建数据源 key 索引映射表
|
|
498
|
+
*/
|
|
499
|
+
var buildDataSourceKeyIndexMap = (0, _.useRefFunction)(function () {
|
|
424
500
|
var map = new Map();
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
var
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
501
|
+
var traverseRecords = function traverseRecords(records, parentKey) {
|
|
502
|
+
records === null || records === void 0 || records.forEach(function (record, index) {
|
|
503
|
+
var indexKey = parentKey == null ? index.toString() : "".concat(parentKey, "_").concat(index);
|
|
504
|
+
var recordKey = recordKeyToString(props.getRowKey(record, -1));
|
|
505
|
+
|
|
506
|
+
// 如果 recordKey 是 undefined 或 null,跳过
|
|
507
|
+
if (recordKey == null) {
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
map.set(indexKey, recordKey);
|
|
511
|
+
map.set(recordKey.toString(), indexKey);
|
|
512
|
+
var children = props.childrenColumnName && (record === null || record === void 0 ? void 0 : record[props.childrenColumnName]);
|
|
513
|
+
if (children) {
|
|
514
|
+
traverseRecords(children, indexKey);
|
|
434
515
|
}
|
|
435
516
|
});
|
|
436
517
|
};
|
|
437
|
-
|
|
518
|
+
traverseRecords(props.dataSource);
|
|
438
519
|
return map;
|
|
439
|
-
};
|
|
520
|
+
});
|
|
440
521
|
var initDataSourceKeyIndexMap = (0, _react.useMemo)(function () {
|
|
441
|
-
return
|
|
522
|
+
return buildDataSourceKeyIndexMap();
|
|
442
523
|
}, []);
|
|
443
524
|
var dataSourceKeyIndexMapRef = (0, _react.useRef)(initDataSourceKeyIndexMap);
|
|
444
525
|
var newLineRecordRef = (0, _react.useRef)(undefined);
|
|
445
526
|
(0, _useDeepCompareEffect.useDeepCompareEffectDebounce)(function () {
|
|
446
|
-
dataSourceKeyIndexMapRef.current =
|
|
527
|
+
dataSourceKeyIndexMapRef.current = buildDataSourceKeyIndexMap();
|
|
447
528
|
}, [props.dataSource]);
|
|
448
529
|
|
|
449
530
|
// 这里这么做是为了存上次的状态,不然每次存一下再拿
|
|
@@ -470,96 +551,205 @@ function useEditableArray(props) {
|
|
|
470
551
|
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
|
|
471
552
|
editableKeys = _useMergedState2[0],
|
|
472
553
|
setEditableRowKeys = _useMergedState2[1];
|
|
473
|
-
|
|
474
|
-
/** 一个用来标志的set 提供了方便的 api 来去重什么的 */
|
|
475
|
-
var editableKeysSet = (0, _react.useMemo)(function () {
|
|
476
|
-
var keys = editableType === 'single' ? editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.slice(0, 1) : editableKeys;
|
|
477
|
-
return new Set(keys);
|
|
478
|
-
}, [(editableKeys || []).join(','), editableType]);
|
|
479
554
|
var editableKeysRef = (0, _usePrevious.usePrevious)(editableKeys);
|
|
480
555
|
|
|
556
|
+
/**
|
|
557
|
+
* 检查 key 是否在编辑列表中
|
|
558
|
+
*/
|
|
559
|
+
var checkKeyInEditableList = (0, _.useRefFunction)(function (key, keysList) {
|
|
560
|
+
return keysList.includes(key);
|
|
561
|
+
});
|
|
562
|
+
|
|
481
563
|
/** 这行是不是编辑状态 */
|
|
482
564
|
var isEditable = (0, _.useRefFunction)(function (row) {
|
|
483
|
-
var _props$getRowKey, _props$
|
|
484
|
-
|
|
485
|
-
var
|
|
486
|
-
|
|
487
|
-
var recordKey = (_props$getRowKey2 = props.getRowKey(row, -1)) === null || _props$getRowKey2 === void 0 || (_props$getRowKey2$toS = _props$getRowKey2.toString) === null || _props$getRowKey2$toS === void 0 ? void 0 : _props$getRowKey2$toS.call(_props$getRowKey2);
|
|
488
|
-
|
|
489
|
-
// 都转化为了字符串,不然 number 和 string
|
|
490
|
-
var stringEditableKeys = editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.map(function (key) {
|
|
565
|
+
var _props$getRowKey, _props$getRowKey2;
|
|
566
|
+
var recordKeyWithIndex = (_props$getRowKey = props.getRowKey(row, row.index)) === null || _props$getRowKey === void 0 ? void 0 : _props$getRowKey.toString();
|
|
567
|
+
var recordKey = (_props$getRowKey2 = props.getRowKey(row, -1)) === null || _props$getRowKey2 === void 0 ? void 0 : _props$getRowKey2.toString();
|
|
568
|
+
var stringEditableKeys = (editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.map(function (key) {
|
|
491
569
|
return key === null || key === void 0 ? void 0 : key.toString();
|
|
492
|
-
});
|
|
570
|
+
})) || [];
|
|
493
571
|
var stringEditableKeysRef = (editableKeysRef === null || editableKeysRef === void 0 ? void 0 : editableKeysRef.map(function (key) {
|
|
494
572
|
return key === null || key === void 0 ? void 0 : key.toString();
|
|
495
573
|
})) || [];
|
|
496
|
-
var preIsEditable =
|
|
574
|
+
var preIsEditable = checkKeyInEditableList(recordKey, stringEditableKeysRef) || checkKeyInEditableList(recordKeyWithIndex, stringEditableKeysRef);
|
|
497
575
|
return {
|
|
498
576
|
recordKey: recordKey,
|
|
499
|
-
isEditable:
|
|
577
|
+
isEditable: checkKeyInEditableList(recordKey, stringEditableKeys) || checkKeyInEditableList(recordKeyWithIndex, stringEditableKeys),
|
|
500
578
|
preIsEditable: preIsEditable
|
|
501
579
|
};
|
|
502
580
|
});
|
|
503
581
|
|
|
504
582
|
/**
|
|
505
|
-
*
|
|
506
|
-
*
|
|
507
|
-
* @param recordKey
|
|
583
|
+
* 验证是否可以开始编辑
|
|
508
584
|
*/
|
|
509
|
-
var
|
|
510
|
-
var
|
|
511
|
-
|
|
512
|
-
if (editableKeysSet.size > 0 && editableType === 'single' && props.onlyOneLineEditorAlertMessage !== false) {
|
|
585
|
+
var validateCanStartEdit = (0, _.useRefFunction)(function () {
|
|
586
|
+
var hasEditableKeys = editableKeys && editableKeys.length > 0;
|
|
587
|
+
if (hasEditableKeys && editableType === 'single' && props.onlyOneLineEditorAlertMessage !== false) {
|
|
513
588
|
warning(props.onlyOneLineEditorAlertMessage || intl.getMessage('editableTable.onlyOneLineEditor', '只能同时编辑一行'));
|
|
514
589
|
return false;
|
|
515
590
|
}
|
|
516
|
-
|
|
517
|
-
|
|
591
|
+
return true;
|
|
592
|
+
});
|
|
518
593
|
|
|
519
|
-
|
|
520
|
-
|
|
594
|
+
/**
|
|
595
|
+
* 查找记录
|
|
596
|
+
*/
|
|
597
|
+
var findRecordByKey = (0, _.useRefFunction)(function (recordKey) {
|
|
598
|
+
var _props$dataSource$fin, _props$dataSource;
|
|
599
|
+
return (_props$dataSource$fin = (_props$dataSource = props.dataSource) === null || _props$dataSource === void 0 ? void 0 : _props$dataSource.find(function (recordData, index) {
|
|
521
600
|
return props.getRowKey(recordData, index) === recordKey;
|
|
522
|
-
})) !== null &&
|
|
601
|
+
})) !== null && _props$dataSource$fin !== void 0 ? _props$dataSource$fin : null;
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* 进入编辑状态
|
|
606
|
+
*/
|
|
607
|
+
var startEditable = (0, _.useRefFunction)(function (recordKey, record) {
|
|
608
|
+
var _ref9;
|
|
609
|
+
if (!validateCanStartEdit()) {
|
|
610
|
+
return false;
|
|
611
|
+
}
|
|
612
|
+
var isAlreadyEditable = editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.some(function (key) {
|
|
613
|
+
return key === recordKey || (key === null || key === void 0 ? void 0 : key.toString()) === (recordKey === null || recordKey === void 0 ? void 0 : recordKey.toString());
|
|
614
|
+
});
|
|
615
|
+
if (!isAlreadyEditable) {
|
|
616
|
+
var newKeys = editableKeys ? [].concat((0, _toConsumableArray2.default)(editableKeys), [recordKey]) : [recordKey];
|
|
617
|
+
setEditableRowKeys(newKeys);
|
|
618
|
+
}
|
|
619
|
+
preEditRowRef.current = (_ref9 = record !== null && record !== void 0 ? record : findRecordByKey(recordKey)) !== null && _ref9 !== void 0 ? _ref9 : null;
|
|
523
620
|
return true;
|
|
524
621
|
});
|
|
525
622
|
|
|
623
|
+
/**
|
|
624
|
+
* 清理编辑状态
|
|
625
|
+
*/
|
|
626
|
+
var clearEditableState = (0, _.useRefFunction)(function (recordKey) {
|
|
627
|
+
var _editableKeys$filter;
|
|
628
|
+
var relayKey = recordKeyToString(recordKey);
|
|
629
|
+
var relayKeyStr = relayKey != null ? relayKey.toString() : null;
|
|
630
|
+
if (relayKeyStr == null) {
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
633
|
+
var newKeys = (_editableKeys$filter = editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.filter(function (key) {
|
|
634
|
+
return (key === null || key === void 0 ? void 0 : key.toString()) !== relayKeyStr && key !== relayKey;
|
|
635
|
+
})) !== null && _editableKeys$filter !== void 0 ? _editableKeys$filter : [];
|
|
636
|
+
setEditableRowKeys(newKeys);
|
|
637
|
+
});
|
|
638
|
+
|
|
526
639
|
/**
|
|
527
640
|
* 退出编辑状态
|
|
528
|
-
*
|
|
529
|
-
* @param recordKey
|
|
530
641
|
*/
|
|
531
642
|
var cancelEditable = (0, _.useRefFunction)( /*#__PURE__*/function () {
|
|
532
|
-
var
|
|
533
|
-
var relayKey,
|
|
643
|
+
var _ref10 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee5(recordKey, needReTry) {
|
|
644
|
+
var relayKey, relayKeyStr, mappedKey, isInEditableSet, _newLineRecordCache$o, keyForFind, _record3, _originRow, cacheRecordKey, cacheKey, cacheKeyStr, _newLineConfig, _recordKeyToString2, _cacheRecordKey, _cacheKeyStr, originRow, _props$formProps, formRef, _form, namePath, _recordKeyToString3, recordKeyStr;
|
|
534
645
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee5$(_context5) {
|
|
535
646
|
while (1) switch (_context5.prev = _context5.next) {
|
|
536
647
|
case 0:
|
|
537
|
-
relayKey = recordKeyToString(recordKey)
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
648
|
+
relayKey = recordKeyToString(recordKey);
|
|
649
|
+
relayKeyStr = relayKey != null ? relayKey.toString() : null;
|
|
650
|
+
mappedKey = relayKeyStr != null ? dataSourceKeyIndexMapRef.current.get(relayKeyStr) : undefined;
|
|
651
|
+
isInEditableSet = editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.some(function (key) {
|
|
652
|
+
if (relayKeyStr == null) return false;
|
|
653
|
+
return (key === null || key === void 0 ? void 0 : key.toString()) === relayKeyStr || key === relayKey;
|
|
654
|
+
});
|
|
655
|
+
if (!(!isInEditableSet && mappedKey && (needReTry !== null && needReTry !== void 0 ? needReTry : true) && props.tableName)) {
|
|
656
|
+
_context5.next = 8;
|
|
657
|
+
break;
|
|
658
|
+
}
|
|
659
|
+
_context5.next = 7;
|
|
660
|
+
return cancelEditable(mappedKey, false);
|
|
661
|
+
case 7:
|
|
662
|
+
return _context5.abrupt("return", _context5.sent);
|
|
663
|
+
case 8:
|
|
664
|
+
if (!(props.onCancel && isInEditableSet)) {
|
|
665
|
+
_context5.next = 24;
|
|
542
666
|
break;
|
|
543
667
|
}
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
668
|
+
keyForFind = Array.isArray(recordKey) ? recordKey[0] : recordKey;
|
|
669
|
+
_record3 = findRecordByKey(keyForFind);
|
|
670
|
+
_originRow = preEditRowRef.current; // 比较 recordKey 时需要考虑类型转换
|
|
671
|
+
// newLineRecordCache.options.recordKey 是 addEditRecord 时设置的 recordKey
|
|
672
|
+
// 而 recordKey 是 cancelEditable 的参数,需要确保它们匹配
|
|
673
|
+
cacheRecordKey = newLineRecordCache === null || newLineRecordCache === void 0 || (_newLineRecordCache$o = newLineRecordCache.options) === null || _newLineRecordCache$o === void 0 ? void 0 : _newLineRecordCache$o.recordKey;
|
|
674
|
+
cacheKey = cacheRecordKey != null ? recordKeyToString(cacheRecordKey) : null;
|
|
675
|
+
cacheKeyStr = cacheKey != null ? cacheKey.toString() : null; // 检查 newLineRecordCache 是否匹配当前的 recordKey
|
|
676
|
+
_newLineConfig = newLineRecordCache != null && cacheRecordKey != null && (cacheRecordKey === recordKey || cacheKeyStr != null && relayKeyStr != null && cacheKeyStr === relayKeyStr || (cacheRecordKey === null || cacheRecordKey === void 0 ? void 0 : cacheRecordKey.toString()) === (recordKey === null || recordKey === void 0 ? void 0 : recordKey.toString()) || String(cacheRecordKey) === String(recordKey)) ? newLineRecordCache : undefined; // 调用 onCancel,即使找不到记录(新行编辑场景)
|
|
677
|
+
// 对于新行编辑,record 可能为 null,但 newLineConfig 应该包含 defaultValue
|
|
678
|
+
_context5.prev = 16;
|
|
679
|
+
_context5.next = 19;
|
|
680
|
+
return props.onCancel(recordKey, _record3 || (_newLineConfig === null || _newLineConfig === void 0 ? void 0 : _newLineConfig.defaultValue) || {}, _originRow || _record3 || (_newLineConfig === null || _newLineConfig === void 0 ? void 0 : _newLineConfig.defaultValue) || {}, _newLineConfig);
|
|
681
|
+
case 19:
|
|
682
|
+
_context5.next = 24;
|
|
683
|
+
break;
|
|
684
|
+
case 21:
|
|
685
|
+
_context5.prev = 21;
|
|
686
|
+
_context5.t0 = _context5["catch"](16);
|
|
687
|
+
// 如果 onCancel 抛出异常,仍然继续清理状态
|
|
688
|
+
console.error('onCancel error:', _context5.t0);
|
|
689
|
+
case 24:
|
|
690
|
+
// 清理 newLineRecordCache,需要比较 recordKey(考虑类型转换)
|
|
691
|
+
if (newLineRecordCache) {
|
|
692
|
+
_cacheRecordKey = newLineRecordCache.options.recordKey; // 重用之前计算的 relayKeyStr
|
|
693
|
+
_cacheKeyStr = _cacheRecordKey != null ? (_recordKeyToString2 = recordKeyToString(_cacheRecordKey)) === null || _recordKeyToString2 === void 0 ? void 0 : _recordKeyToString2.toString() : null;
|
|
694
|
+
if (_cacheRecordKey === recordKey || _cacheKeyStr != null && relayKeyStr != null && _cacheKeyStr === relayKeyStr || (_cacheRecordKey === null || _cacheRecordKey === void 0 ? void 0 : _cacheRecordKey.toString()) === (recordKey === null || recordKey === void 0 ? void 0 : recordKey.toString()) || String(_cacheRecordKey) === String(recordKey)) {
|
|
695
|
+
setNewLineRecordCache(undefined);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// 先清理 preEditRowRef 并重置表单字段,然后再清除编辑状态
|
|
700
|
+
// 这样在清除编辑状态前,表单字段已经被清除,表格重新渲染时就不会显示输入框
|
|
701
|
+
originRow = preEditRowRef.current;
|
|
702
|
+
if (originRow && props.getRowKey(originRow, -1) === recordKey && isInEditableSet) {
|
|
703
|
+
try {
|
|
704
|
+
// 尝试通过 formProps.formRef 访问 form
|
|
705
|
+
formRef = (_props$formProps = props.formProps) === null || _props$formProps === void 0 ? void 0 : _props$formProps.formRef;
|
|
706
|
+
_form = (formRef === null || formRef === void 0 ? void 0 : formRef.current) || props.form;
|
|
707
|
+
if (_form) {
|
|
708
|
+
if (props.tableName) {
|
|
709
|
+
// name 模式:重置为原始值
|
|
710
|
+
namePath = [props.tableName, recordKey].flat(1).filter(Boolean);
|
|
711
|
+
_form.setFieldsValue((0, _util.set)({}, namePath, originRow));
|
|
712
|
+
} else {
|
|
713
|
+
// 非 name 模式:清除该行的所有表单字段
|
|
714
|
+
// 在非 name 模式下,表单字段路径是 [recordKey, columnDataIndex]
|
|
715
|
+
// 如 [624748504, 'title'],需要清除所有以 recordKey 开头的字段
|
|
716
|
+
recordKeyStr = (_recordKeyToString3 = recordKeyToString(recordKey)) === null || _recordKeyToString3 === void 0 ? void 0 : _recordKeyToString3.toString();
|
|
717
|
+
if (recordKeyStr) {
|
|
718
|
+
try {
|
|
719
|
+
// 在非 name 模式下,表单字段以嵌套对象的形式存储
|
|
720
|
+
// 比如 { '624748504': { 'title': 'value', 'state': 'value' } }
|
|
721
|
+
// 需要清除整个嵌套对象
|
|
722
|
+
// 先使用 resetFields 清除字段状态
|
|
723
|
+
_form.resetFields([[recordKeyStr]]);
|
|
724
|
+
|
|
725
|
+
// 然后使用 setFieldsValue 清除字段值
|
|
726
|
+
// 这样可以确保字段被完全清除,表格重新渲染时不会显示输入框
|
|
727
|
+
_form.setFieldsValue((0, _defineProperty2.default)({}, recordKeyStr, undefined));
|
|
728
|
+
} catch (error) {
|
|
729
|
+
// 如果清除失败,忽略错误
|
|
730
|
+
console.warn('Failed to clear form fields in cancelEditable:', error);
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
} catch (error) {
|
|
736
|
+
// 如果访问 form 失败,忽略错误
|
|
737
|
+
console.warn('Failed to reset form fields in cancelEditable:', error);
|
|
738
|
+
}
|
|
739
|
+
preEditRowRef.current = null;
|
|
550
740
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
741
|
+
|
|
742
|
+
// 最后清除编辑状态,这样表格会重新渲染,输入框会消失
|
|
743
|
+
clearEditableState(recordKey);
|
|
554
744
|
return _context5.abrupt("return", true);
|
|
555
|
-
case
|
|
745
|
+
case 29:
|
|
556
746
|
case "end":
|
|
557
747
|
return _context5.stop();
|
|
558
748
|
}
|
|
559
|
-
}, _callee5);
|
|
749
|
+
}, _callee5, null, [[16, 21]]);
|
|
560
750
|
}));
|
|
561
751
|
return function (_x3, _x4) {
|
|
562
|
-
return
|
|
752
|
+
return _ref10.apply(this, arguments);
|
|
563
753
|
};
|
|
564
754
|
}());
|
|
565
755
|
var propsOnValuesChange = (0, _.useDebounceFn)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee6() {
|
|
@@ -582,149 +772,199 @@ function useEditableArray(props) {
|
|
|
582
772
|
}
|
|
583
773
|
}, _callee6);
|
|
584
774
|
})), 64);
|
|
585
|
-
var onValuesChange = (0, _.useRefFunction)(function (value, values) {
|
|
586
|
-
var _Object$keys$pop;
|
|
587
|
-
if (!props.onValuesChange) {
|
|
588
|
-
return;
|
|
589
|
-
}
|
|
590
|
-
var dataSource = props.dataSource;
|
|
591
775
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
776
|
+
/**
|
|
777
|
+
* 构建表单字段路径
|
|
778
|
+
*/
|
|
779
|
+
var buildFormFieldPath = (0, _.useRefFunction)(function (recordKey) {
|
|
780
|
+
return [props.tableName || '', recordKey].flat(1).filter(function (key) {
|
|
781
|
+
return key || key === 0;
|
|
782
|
+
});
|
|
783
|
+
});
|
|
784
|
+
|
|
785
|
+
/**
|
|
786
|
+
* 更新数据源中的编辑行
|
|
787
|
+
*/
|
|
788
|
+
var updateDataSourceWithEditableRows = (0, _.useRefFunction)(function (dataSource, values) {
|
|
789
|
+
var updatedDataSource = dataSource;
|
|
595
790
|
editableKeys === null || editableKeys === void 0 || editableKeys.forEach(function (eachRecordKey) {
|
|
596
|
-
if ((newLineRecordCache === null || newLineRecordCache === void 0 ? void 0 : newLineRecordCache.options.recordKey) === eachRecordKey)
|
|
791
|
+
if ((newLineRecordCache === null || newLineRecordCache === void 0 ? void 0 : newLineRecordCache.options.recordKey) === eachRecordKey) {
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
597
794
|
var recordKey = eachRecordKey.toString();
|
|
598
|
-
|
|
599
|
-
var editRow = (0, _util.get)(values,
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
data:
|
|
795
|
+
var fieldPath = buildFormFieldPath(recordKey);
|
|
796
|
+
var editRow = (0, _util.get)(values, fieldPath);
|
|
797
|
+
if (!editRow) {
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
updatedDataSource = editableRowByKey({
|
|
801
|
+
data: updatedDataSource,
|
|
605
802
|
getRowKey: props.getRowKey,
|
|
606
803
|
row: editRow,
|
|
607
804
|
key: recordKey,
|
|
608
805
|
childrenColumnName: props.childrenColumnName || 'children'
|
|
609
806
|
}, 'update');
|
|
610
807
|
});
|
|
611
|
-
|
|
612
|
-
|
|
808
|
+
return updatedDataSource;
|
|
809
|
+
});
|
|
613
810
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
811
|
+
/**
|
|
812
|
+
* 获取当前编辑的行数据
|
|
813
|
+
*/
|
|
814
|
+
var getCurrentEditRow = (0, _.useRefFunction)(function (value, values, dataSource) {
|
|
815
|
+
var _valueKeys$pop;
|
|
816
|
+
var valueKeys = Object.keys(value || {});
|
|
817
|
+
if (valueKeys.length === 0) {
|
|
818
|
+
return (newLineRecordCache === null || newLineRecordCache === void 0 ? void 0 : newLineRecordCache.defaultValue) || {};
|
|
819
|
+
}
|
|
820
|
+
var recordKey = ((_valueKeys$pop = valueKeys.pop()) === null || _valueKeys$pop === void 0 ? void 0 : _valueKeys$pop.toString()) || '';
|
|
821
|
+
if (!recordKey) {
|
|
822
|
+
return (newLineRecordCache === null || newLineRecordCache === void 0 ? void 0 : newLineRecordCache.defaultValue) || {};
|
|
823
|
+
}
|
|
824
|
+
var fieldPath = buildFormFieldPath(recordKey);
|
|
825
|
+
var newLineRecordData = (0, _objectSpread4.default)((0, _objectSpread4.default)({}, newLineRecordCache === null || newLineRecordCache === void 0 ? void 0 : newLineRecordCache.defaultValue), (0, _util.get)(values, fieldPath));
|
|
826
|
+
var existsInDataSource = dataSourceKeyIndexMapRef.current.has(recordKeyToString(recordKey));
|
|
827
|
+
if (existsInDataSource) {
|
|
828
|
+
var foundRow = dataSource.find(function (item, index) {
|
|
829
|
+
var _props$getRowKey3;
|
|
830
|
+
var key = (_props$getRowKey3 = props.getRowKey(item, index)) === null || _props$getRowKey3 === void 0 ? void 0 : _props$getRowKey3.toString();
|
|
831
|
+
return key === recordKey;
|
|
832
|
+
});
|
|
833
|
+
return foundRow || newLineRecordData;
|
|
834
|
+
}
|
|
835
|
+
return newLineRecordData;
|
|
836
|
+
});
|
|
837
|
+
var onValuesChange = (0, _.useRefFunction)(function (value, values) {
|
|
838
|
+
if (!props.onValuesChange) {
|
|
839
|
+
return;
|
|
840
|
+
}
|
|
841
|
+
var updatedDataSource = updateDataSourceWithEditableRows(props.dataSource, values);
|
|
842
|
+
var editRow = getCurrentEditRow(value, values, updatedDataSource);
|
|
843
|
+
propsOnValuesChange.run(editRow, updatedDataSource);
|
|
626
844
|
});
|
|
627
845
|
var saveRefsMap = (0, _react.useRef)(new Map());
|
|
628
846
|
(0, _react.useEffect)(function () {
|
|
629
|
-
|
|
847
|
+
var _editableKeys$map;
|
|
848
|
+
var editableKeysSet = new Set((_editableKeys$map = editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.map(function (key) {
|
|
849
|
+
return key === null || key === void 0 ? void 0 : key.toString();
|
|
850
|
+
})) !== null && _editableKeys$map !== void 0 ? _editableKeys$map : []);
|
|
630
851
|
saveRefsMap.current.forEach(function (ref, key) {
|
|
631
|
-
if (!editableKeysSet.has(key)) {
|
|
852
|
+
if (!editableKeysSet.has(key === null || key === void 0 ? void 0 : key.toString())) {
|
|
632
853
|
saveRefsMap.current.delete(key);
|
|
633
854
|
}
|
|
634
855
|
});
|
|
635
|
-
}, [
|
|
856
|
+
}, [editableKeys]);
|
|
857
|
+
|
|
858
|
+
/**
|
|
859
|
+
* 获取保存引用
|
|
860
|
+
*/
|
|
861
|
+
var getSaveRef = (0, _.useRefFunction)(function (recordKey) {
|
|
862
|
+
var relayKey = recordKeyToString(recordKey);
|
|
863
|
+
return saveRefsMap.current.get(relayKey) || saveRefsMap.current.get(relayKey.toString());
|
|
864
|
+
});
|
|
865
|
+
|
|
636
866
|
/**
|
|
637
867
|
* 保存编辑行
|
|
638
|
-
*
|
|
639
|
-
* @param recordKey
|
|
640
|
-
* @param needReTry
|
|
641
868
|
*/
|
|
642
869
|
var saveEditable = (0, _.useRefFunction)( /*#__PURE__*/function () {
|
|
643
|
-
var
|
|
644
|
-
var relayKey,
|
|
870
|
+
var _ref12 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee7(recordKey, needReTry) {
|
|
871
|
+
var relayKey, relayKeyStr, mappedKey, isInEditableSet, saveRef;
|
|
645
872
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee7$(_context7) {
|
|
646
873
|
while (1) switch (_context7.prev = _context7.next) {
|
|
647
874
|
case 0:
|
|
648
875
|
relayKey = recordKeyToString(recordKey);
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
876
|
+
relayKeyStr = relayKey.toString();
|
|
877
|
+
mappedKey = dataSourceKeyIndexMapRef.current.get(relayKeyStr);
|
|
878
|
+
isInEditableSet = editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.some(function (key) {
|
|
879
|
+
return (key === null || key === void 0 ? void 0 : key.toString()) === relayKeyStr || key === relayKey;
|
|
880
|
+
});
|
|
881
|
+
if (!(!isInEditableSet && mappedKey && (needReTry !== null && needReTry !== void 0 ? needReTry : true) && props.tableName)) {
|
|
882
|
+
_context7.next = 8;
|
|
653
883
|
break;
|
|
654
884
|
}
|
|
655
|
-
_context7.next =
|
|
656
|
-
return saveEditable(
|
|
657
|
-
case
|
|
885
|
+
_context7.next = 7;
|
|
886
|
+
return saveEditable(mappedKey, false);
|
|
887
|
+
case 7:
|
|
658
888
|
return _context7.abrupt("return", _context7.sent);
|
|
659
|
-
case
|
|
660
|
-
saveRef =
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
_context7.next = 15;
|
|
666
|
-
break;
|
|
667
|
-
case 12:
|
|
668
|
-
_context7.prev = 12;
|
|
669
|
-
_context7.t0 = _context7["catch"](7);
|
|
889
|
+
case 8:
|
|
890
|
+
saveRef = getSaveRef(recordKey);
|
|
891
|
+
if (saveRef !== null && saveRef !== void 0 && saveRef.current) {
|
|
892
|
+
_context7.next = 11;
|
|
893
|
+
break;
|
|
894
|
+
}
|
|
670
895
|
return _context7.abrupt("return", false);
|
|
671
|
-
case
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
896
|
+
case 11:
|
|
897
|
+
_context7.next = 13;
|
|
898
|
+
return saveRef.current.save();
|
|
899
|
+
case 13:
|
|
900
|
+
clearEditableState(recordKey);
|
|
675
901
|
return _context7.abrupt("return", true);
|
|
676
|
-
case
|
|
902
|
+
case 15:
|
|
677
903
|
case "end":
|
|
678
904
|
return _context7.stop();
|
|
679
905
|
}
|
|
680
|
-
}, _callee7
|
|
906
|
+
}, _callee7);
|
|
681
907
|
}));
|
|
682
908
|
return function (_x5, _x6) {
|
|
683
|
-
return
|
|
909
|
+
return _ref12.apply(this, arguments);
|
|
684
910
|
};
|
|
685
911
|
}());
|
|
686
912
|
|
|
687
913
|
/**
|
|
688
|
-
*
|
|
689
|
-
*
|
|
690
|
-
* @param row
|
|
691
|
-
* @param options
|
|
692
|
-
* @name 增加新的行
|
|
914
|
+
* 验证是否可以新增记录
|
|
693
915
|
*/
|
|
694
|
-
var
|
|
916
|
+
var validateCanAddRecord = (0, _.useRefFunction)(function (options) {
|
|
695
917
|
if (options !== null && options !== void 0 && options.parentKey && !dataSourceKeyIndexMapRef.current.has(recordKeyToString(options === null || options === void 0 ? void 0 : options.parentKey).toString())) {
|
|
696
918
|
console.warn("can't find record by key", options === null || options === void 0 ? void 0 : options.parentKey);
|
|
697
919
|
return false;
|
|
698
920
|
}
|
|
699
|
-
// 暂时不支持多行新增
|
|
700
921
|
if (newLineRecordRef.current && props.onlyAddOneLineAlertMessage !== false) {
|
|
701
922
|
warning(props.onlyAddOneLineAlertMessage || intl.getMessage('editableTable.onlyAddOneLine', '只能新增一行'));
|
|
702
923
|
return false;
|
|
703
924
|
}
|
|
704
|
-
|
|
705
|
-
if (editableKeysSet.size > 0 && editableType === 'single' && props.onlyOneLineEditorAlertMessage !== false) {
|
|
706
|
-
warning(props.onlyOneLineEditorAlertMessage || intl.getMessage('editableTable.onlyOneLineEditor', '只能同时编辑一行'));
|
|
925
|
+
if (!validateCanStartEdit()) {
|
|
707
926
|
return false;
|
|
708
927
|
}
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
928
|
+
return true;
|
|
929
|
+
});
|
|
930
|
+
|
|
931
|
+
/**
|
|
932
|
+
* 验证记录 key 是否有效
|
|
933
|
+
*/
|
|
934
|
+
var validateRecordKey = (0, _.useRefFunction)(function (recordKey) {
|
|
935
|
+
if (recordKey == null && recordKey !== 0 && recordKey !== '') {
|
|
936
|
+
noteOnce(false, '请设置 recordCreatorProps.record 并返回一个唯一的key \n https://procomponents.ant.design/components/editable-table#editable-%E6%96%B0%E5%BB%BA%E8%A1%8C');
|
|
713
937
|
throw new Error('请设置 recordCreatorProps.record 并返回一个唯一的key');
|
|
714
938
|
}
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
if ((options
|
|
722
|
-
|
|
939
|
+
});
|
|
940
|
+
|
|
941
|
+
/**
|
|
942
|
+
* 增加新的行
|
|
943
|
+
*/
|
|
944
|
+
var addEditRecord = (0, _.useRefFunction)(function (row, options) {
|
|
945
|
+
if (!validateCanAddRecord(options)) {
|
|
946
|
+
return false;
|
|
947
|
+
}
|
|
948
|
+
var recordKey = props.getRowKey(row, -1);
|
|
949
|
+
validateRecordKey(recordKey);
|
|
950
|
+
var isAlreadyEditable = editableKeys === null || editableKeys === void 0 ? void 0 : editableKeys.some(function (key) {
|
|
951
|
+
return key === recordKey || (key === null || key === void 0 ? void 0 : key.toString()) === (recordKey === null || recordKey === void 0 ? void 0 : recordKey.toString());
|
|
952
|
+
});
|
|
953
|
+
if (!isAlreadyEditable) {
|
|
954
|
+
var newKeys = editableKeys ? [].concat((0, _toConsumableArray2.default)(editableKeys), [recordKey]) : [recordKey];
|
|
955
|
+
setEditableRowKeys(newKeys);
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
// 处理 parentKey:如果是函数,调用它
|
|
959
|
+
var parentKeyValue = typeof (options === null || options === void 0 ? void 0 : options.parentKey) === 'function' ? options.parentKey() : options === null || options === void 0 ? void 0 : options.parentKey;
|
|
960
|
+
var isDataSourceMode = (options === null || options === void 0 ? void 0 : options.newRecordType) === 'dataSource' || props.tableName && (options === null || options === void 0 ? void 0 : options.newRecordType) !== 'cache';
|
|
961
|
+
if (isDataSourceMode) {
|
|
962
|
+
var _recordKeyToString4;
|
|
723
963
|
var actionProps = {
|
|
724
964
|
data: props.dataSource,
|
|
725
965
|
getRowKey: props.getRowKey,
|
|
726
|
-
row: (0,
|
|
727
|
-
map_row_parentKey:
|
|
966
|
+
row: (0, _objectSpread4.default)((0, _objectSpread4.default)({}, row), {}, {
|
|
967
|
+
map_row_parentKey: parentKeyValue ? (_recordKeyToString4 = recordKeyToString(parentKeyValue)) === null || _recordKeyToString4 === void 0 ? void 0 : _recordKeyToString4.toString() : undefined
|
|
728
968
|
}),
|
|
729
969
|
key: recordKey,
|
|
730
970
|
childrenColumnName: props.childrenColumnName || 'children'
|
|
@@ -733,7 +973,8 @@ function useEditableArray(props) {
|
|
|
733
973
|
} else {
|
|
734
974
|
setNewLineRecordCache({
|
|
735
975
|
defaultValue: row,
|
|
736
|
-
options: (0,
|
|
976
|
+
options: (0, _objectSpread4.default)((0, _objectSpread4.default)({}, options), {}, {
|
|
977
|
+
parentKey: parentKeyValue,
|
|
737
978
|
recordKey: recordKey
|
|
738
979
|
})
|
|
739
980
|
});
|
|
@@ -744,9 +985,9 @@ function useEditableArray(props) {
|
|
|
744
985
|
var deleteText = (props === null || props === void 0 ? void 0 : props.deleteText) || intl.getMessage('editableTable.action.delete', '删除');
|
|
745
986
|
var cancelText = (props === null || props === void 0 ? void 0 : props.cancelText) || intl.getMessage('editableTable.action.cancel', '取消');
|
|
746
987
|
var actionSaveRef = (0, _.useRefFunction)( /*#__PURE__*/function () {
|
|
747
|
-
var
|
|
748
|
-
var _props$onSave
|
|
749
|
-
var res,
|
|
988
|
+
var _ref13 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee8(recordKey, editRow, originRow, newLine) {
|
|
989
|
+
var _props$onSave;
|
|
990
|
+
var res, _ref14, options, isNewLine, _recordKeyToString5, _options$parentKey, actionProps;
|
|
750
991
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee8$(_context8) {
|
|
751
992
|
while (1) switch (_context8.prev = _context8.next) {
|
|
752
993
|
case 0:
|
|
@@ -754,47 +995,44 @@ function useEditableArray(props) {
|
|
|
754
995
|
return props === null || props === void 0 || (_props$onSave = props.onSave) === null || _props$onSave === void 0 ? void 0 : _props$onSave.call(props, recordKey, editRow, originRow, newLine);
|
|
755
996
|
case 2:
|
|
756
997
|
res = _context8.sent;
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
if ((options === null || options === void 0 ? void 0 : options.position) === 'top') {
|
|
766
|
-
props.setDataSource([editRow].concat((0, _toConsumableArray2.default)(props.dataSource)));
|
|
998
|
+
_ref14 = newLine || newLineRecordRef.current || {}, options = _ref14.options;
|
|
999
|
+
isNewLine = !(options !== null && options !== void 0 && options.parentKey) && (options === null || options === void 0 ? void 0 : options.recordKey) === recordKey;
|
|
1000
|
+
if (isNewLine) {
|
|
1001
|
+
if ((options === null || options === void 0 ? void 0 : options.position) === 'top') {
|
|
1002
|
+
props.setDataSource([editRow].concat((0, _toConsumableArray2.default)(props.dataSource)));
|
|
1003
|
+
} else {
|
|
1004
|
+
props.setDataSource([].concat((0, _toConsumableArray2.default)(props.dataSource), [editRow]));
|
|
1005
|
+
}
|
|
767
1006
|
} else {
|
|
768
|
-
|
|
1007
|
+
actionProps = {
|
|
1008
|
+
data: props.dataSource,
|
|
1009
|
+
getRowKey: props.getRowKey,
|
|
1010
|
+
row: options ? (0, _objectSpread4.default)((0, _objectSpread4.default)({}, editRow), {}, {
|
|
1011
|
+
map_row_parentKey: (_recordKeyToString5 = recordKeyToString((_options$parentKey = options === null || options === void 0 ? void 0 : options.parentKey) !== null && _options$parentKey !== void 0 ? _options$parentKey : '')) === null || _recordKeyToString5 === void 0 ? void 0 : _recordKeyToString5.toString()
|
|
1012
|
+
}) : editRow,
|
|
1013
|
+
key: recordKey,
|
|
1014
|
+
childrenColumnName: props.childrenColumnName || 'children'
|
|
1015
|
+
};
|
|
1016
|
+
props.setDataSource(editableRowByKey(actionProps, (options === null || options === void 0 ? void 0 : options.position) === 'top' ? 'top' : 'update'));
|
|
769
1017
|
}
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
data: props.dataSource,
|
|
774
|
-
getRowKey: props.getRowKey,
|
|
775
|
-
row: options ? (0, _objectSpread3.default)((0, _objectSpread3.default)({}, editRow), {}, {
|
|
776
|
-
map_row_parentKey: (_recordKeyToString4 = recordKeyToString((_options$parentKey = options === null || options === void 0 ? void 0 : options.parentKey) !== null && _options$parentKey !== void 0 ? _options$parentKey : '')) === null || _recordKeyToString4 === void 0 ? void 0 : _recordKeyToString4.toString()
|
|
777
|
-
}) : editRow,
|
|
778
|
-
key: recordKey,
|
|
779
|
-
childrenColumnName: props.childrenColumnName || 'children'
|
|
780
|
-
};
|
|
781
|
-
props.setDataSource(editableRowByKey(actionProps, (options === null || options === void 0 ? void 0 : options.position) === 'top' ? 'top' : 'update'));
|
|
782
|
-
_context8.next = 13;
|
|
1018
|
+
|
|
1019
|
+
// 保存时解除编辑模式,统一在这里调用一次
|
|
1020
|
+
_context8.next = 8;
|
|
783
1021
|
return cancelEditable(recordKey);
|
|
784
|
-
case
|
|
1022
|
+
case 8:
|
|
785
1023
|
return _context8.abrupt("return", res);
|
|
786
|
-
case
|
|
1024
|
+
case 9:
|
|
787
1025
|
case "end":
|
|
788
1026
|
return _context8.stop();
|
|
789
1027
|
}
|
|
790
1028
|
}, _callee8);
|
|
791
1029
|
}));
|
|
792
1030
|
return function (_x7, _x8, _x9, _x10) {
|
|
793
|
-
return
|
|
1031
|
+
return _ref13.apply(this, arguments);
|
|
794
1032
|
};
|
|
795
1033
|
}());
|
|
796
1034
|
var actionDeleteRef = (0, _.useRefFunction)( /*#__PURE__*/function () {
|
|
797
|
-
var
|
|
1035
|
+
var _ref15 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee9(recordKey, editRow) {
|
|
798
1036
|
var _props$onDelete2;
|
|
799
1037
|
var actionProps, res;
|
|
800
1038
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee9$(_context9) {
|
|
@@ -811,23 +1049,29 @@ function useEditableArray(props) {
|
|
|
811
1049
|
return props === null || props === void 0 || (_props$onDelete2 = props.onDelete) === null || _props$onDelete2 === void 0 ? void 0 : _props$onDelete2.call(props, recordKey, editRow);
|
|
812
1050
|
case 3:
|
|
813
1051
|
res = _context9.sent;
|
|
814
|
-
|
|
815
|
-
|
|
1052
|
+
if (!(res === false)) {
|
|
1053
|
+
_context9.next = 6;
|
|
1054
|
+
break;
|
|
1055
|
+
}
|
|
1056
|
+
return _context9.abrupt("return", false);
|
|
816
1057
|
case 6:
|
|
1058
|
+
_context9.next = 8;
|
|
1059
|
+
return cancelEditable(recordKey, false);
|
|
1060
|
+
case 8:
|
|
817
1061
|
props.setDataSource(editableRowByKey(actionProps, 'delete'));
|
|
818
1062
|
return _context9.abrupt("return", res);
|
|
819
|
-
case
|
|
1063
|
+
case 10:
|
|
820
1064
|
case "end":
|
|
821
1065
|
return _context9.stop();
|
|
822
1066
|
}
|
|
823
1067
|
}, _callee9);
|
|
824
1068
|
}));
|
|
825
1069
|
return function (_x11, _x12) {
|
|
826
|
-
return
|
|
1070
|
+
return _ref15.apply(this, arguments);
|
|
827
1071
|
};
|
|
828
1072
|
}());
|
|
829
1073
|
var actionCancelRef = (0, _.useRefFunction)( /*#__PURE__*/function () {
|
|
830
|
-
var
|
|
1074
|
+
var _ref16 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee10(recordKey, editRow, originRow, newLine) {
|
|
831
1075
|
var _props$onCancel;
|
|
832
1076
|
var res;
|
|
833
1077
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee10$(_context10) {
|
|
@@ -845,7 +1089,7 @@ function useEditableArray(props) {
|
|
|
845
1089
|
}, _callee10);
|
|
846
1090
|
}));
|
|
847
1091
|
return function (_x13, _x14, _x15, _x16) {
|
|
848
|
-
return
|
|
1092
|
+
return _ref16.apply(this, arguments);
|
|
849
1093
|
};
|
|
850
1094
|
}());
|
|
851
1095
|
|