@lemon-fe/components 0.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/README.md +11 -0
- package/es/Actions/index.d.ts +25 -0
- package/es/Actions/index.js +164 -0
- package/es/Actions/index.less +82 -0
- package/es/BaseTable/BaseTableContext.d.ts +6 -0
- package/es/BaseTable/BaseTableContext.js +6 -0
- package/es/BaseTable/ResizeHeaderCell.d.ts +8 -0
- package/es/BaseTable/ResizeHeaderCell.js +115 -0
- package/es/BaseTable/Sort.d.ts +10 -0
- package/es/BaseTable/Sort.js +122 -0
- package/es/BaseTable/VirtualBody.d.ts +8 -0
- package/es/BaseTable/VirtualBody.js +165 -0
- package/es/BaseTable/index.d.ts +7 -0
- package/es/BaseTable/index.js +371 -0
- package/es/BaseTable/index.less +103 -0
- package/es/BaseTable/typings.d.ts +32 -0
- package/es/BaseTable/utils.d.ts +4 -0
- package/es/BaseTable/utils.js +26 -0
- package/es/DurationPicker/index.d.ts +26 -0
- package/es/DurationPicker/index.js +234 -0
- package/es/DurationPicker/index.less +63 -0
- package/es/EditableTable/EditableCell.d.ts +11 -0
- package/es/EditableTable/EditableCell.js +37 -0
- package/es/EditableTable/EditableTableFormItem.d.ts +6 -0
- package/es/EditableTable/EditableTableFormItem.js +49 -0
- package/es/EditableTable/Table.d.ts +7 -0
- package/es/EditableTable/Table.js +363 -0
- package/es/EditableTable/index.d.ts +9 -0
- package/es/EditableTable/index.js +8 -0
- package/es/EditableTable/index.less +19 -0
- package/es/EditableTable/typings.d.ts +86 -0
- package/es/EditableTable/util.d.ts +25 -0
- package/es/EditableTable/util.js +387 -0
- package/es/Filter/index.d.ts +7 -0
- package/es/Filter/index.js +469 -0
- package/es/Filter/index.less +77 -0
- package/es/Filter/typings.d.ts +27 -0
- package/es/FormLayout/index.d.ts +32 -0
- package/es/FormLayout/index.js +41 -0
- package/es/FormLayout/index.less +89 -0
- package/es/Icons/DarkSearch.d.ts +5 -0
- package/es/Icons/DarkSearch.js +38 -0
- package/es/Icons/Down.d.ts +5 -0
- package/es/Icons/Down.js +30 -0
- package/es/Icons/Empty.d.ts +2 -0
- package/es/Icons/Empty.js +267 -0
- package/es/Icons/Search.d.ts +5 -0
- package/es/Icons/Search.js +39 -0
- package/es/Icons/Tip.d.ts +6 -0
- package/es/Icons/Tip.js +169 -0
- package/es/Icons/index.d.ts +12 -0
- package/es/Icons/index.js +13 -0
- package/es/InputMaxLength/index.d.ts +14 -0
- package/es/InputMaxLength/index.js +92 -0
- package/es/InputMaxLength/index.less +8 -0
- package/es/Layout/index.d.ts +21 -0
- package/es/Layout/index.js +35 -0
- package/es/Layout/index.less +92 -0
- package/es/PageLoading/index.d.ts +5 -0
- package/es/PageLoading/index.js +15 -0
- package/es/PageLoading/index.less +10 -0
- package/es/Popup/index.d.ts +27 -0
- package/es/Popup/index.js +191 -0
- package/es/Popup/index.less +14 -0
- package/es/Section/index.d.ts +54 -0
- package/es/Section/index.js +111 -0
- package/es/Section/index.less +177 -0
- package/es/SiderTree/TreeNodeTitle.d.ts +9 -0
- package/es/SiderTree/TreeNodeTitle.js +124 -0
- package/es/SiderTree/index.d.ts +35 -0
- package/es/SiderTree/index.js +237 -0
- package/es/SiderTree/index.less +170 -0
- package/es/SiderTree/typings.d.ts +19 -0
- package/es/Table/index.d.ts +3 -0
- package/es/Table/index.js +224 -0
- package/es/Table/index.less +1 -0
- package/es/Table/typings.d.ts +26 -0
- package/es/Table/utils.d.ts +2 -0
- package/es/Table/utils.js +3 -0
- package/es/TipMark/index.d.ts +10 -0
- package/es/TipMark/index.js +45 -0
- package/es/TipMark/index.less +8 -0
- package/es/constants.d.ts +1 -0
- package/es/constants.js +1 -0
- package/es/index.d.ts +21 -0
- package/es/index.js +17 -0
- package/es/index.less +50 -0
- package/es/init.d.ts +3 -0
- package/es/init.js +100 -0
- package/es/theme.less +13 -0
- package/package.json +43 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
var _excluded = ["value", "onChange", "editable", "rowKey", "columns"];
|
|
2
|
+
|
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
+
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
|
+
|
|
7
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
|
|
9
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
10
|
+
|
|
11
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
12
|
+
|
|
13
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
14
|
+
|
|
15
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
16
|
+
|
|
17
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
18
|
+
|
|
19
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
20
|
+
|
|
21
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
22
|
+
|
|
23
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
24
|
+
|
|
25
|
+
import React, { cloneElement, createContext, useContext, useEffect, useMemo, useState, memo, isValidElement, forwardRef, useImperativeHandle } from 'react';
|
|
26
|
+
import { get, isEqual } from 'lodash';
|
|
27
|
+
import BaseTable from '../BaseTable';
|
|
28
|
+
import { FormStore } from './util';
|
|
29
|
+
import { PREFIX_CLS } from '../constants';
|
|
30
|
+
import { randomStr } from '../BaseTable/utils';
|
|
31
|
+
import EditableCell from './EditableCell';
|
|
32
|
+
var Context = /*#__PURE__*/createContext(null);
|
|
33
|
+
|
|
34
|
+
var getColKey = function getColKey(name) {
|
|
35
|
+
return typeof name === 'string' || typeof name === 'number' ? name : name.join('-');
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
function Cell(props) {
|
|
39
|
+
var _children;
|
|
40
|
+
|
|
41
|
+
var name = props.name,
|
|
42
|
+
children = props.children,
|
|
43
|
+
index = props.index,
|
|
44
|
+
rowKey = props.rowKey;
|
|
45
|
+
var colKey = getColKey(name);
|
|
46
|
+
var store = useContext(Context);
|
|
47
|
+
|
|
48
|
+
var _useState = useState(store.getData(index)),
|
|
49
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
50
|
+
value = _useState2[0],
|
|
51
|
+
setValue = _useState2[1];
|
|
52
|
+
|
|
53
|
+
var _useState3 = useState(store.getError(rowKey, colKey)),
|
|
54
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
55
|
+
errors = _useState4[0],
|
|
56
|
+
setErrors = _useState4[1];
|
|
57
|
+
|
|
58
|
+
var _useState5 = useState(0),
|
|
59
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
60
|
+
focused = _useState6[0],
|
|
61
|
+
setFocused = _useState6[1];
|
|
62
|
+
|
|
63
|
+
useEffect(function () {
|
|
64
|
+
var listener = store.listen(rowKey, colKey, function (_ref) {
|
|
65
|
+
var record = _ref.record,
|
|
66
|
+
focusedType = _ref.focused,
|
|
67
|
+
errMessages = _ref.errors;
|
|
68
|
+
|
|
69
|
+
if (record !== undefined) {
|
|
70
|
+
setValue(record);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (focusedType !== undefined) {
|
|
74
|
+
setFocused(focusedType);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (errMessages !== undefined) {
|
|
78
|
+
setErrors(errMessages);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return listener;
|
|
82
|
+
}, []);
|
|
83
|
+
var cellValue = get(value, name);
|
|
84
|
+
|
|
85
|
+
if (children === undefined) {
|
|
86
|
+
return cellValue !== null && cellValue !== void 0 ? cellValue : null;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return (_children = children(cellValue, value, index, {
|
|
90
|
+
focused: focused,
|
|
91
|
+
onFocus: function onFocus() {
|
|
92
|
+
store.focus(rowKey, colKey);
|
|
93
|
+
},
|
|
94
|
+
errors: errors || undefined,
|
|
95
|
+
onChange: function onChange(val) {
|
|
96
|
+
store.setData(index, val);
|
|
97
|
+
}
|
|
98
|
+
})) !== null && _children !== void 0 ? _children : null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
var MemoTable = /*#__PURE__*/memo(BaseTable);
|
|
102
|
+
|
|
103
|
+
function EditableTable(props, ref) {
|
|
104
|
+
var value = props.value,
|
|
105
|
+
onChange = props.onChange,
|
|
106
|
+
editable = props.editable,
|
|
107
|
+
rowKey = props.rowKey,
|
|
108
|
+
columns = props.columns,
|
|
109
|
+
restProps = _objectWithoutProperties(props, _excluded);
|
|
110
|
+
|
|
111
|
+
var getRowKey = function getRowKey(record, index) {
|
|
112
|
+
if (typeof rowKey === 'function') {
|
|
113
|
+
return rowKey(record, index);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (rowKey !== undefined) {
|
|
117
|
+
return get(record, rowKey);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return get(record, 'key');
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
var store = useMemo(function () {
|
|
124
|
+
return new FormStore([], []);
|
|
125
|
+
}, []);
|
|
126
|
+
|
|
127
|
+
var _useState7 = useState([]),
|
|
128
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
129
|
+
rows = _useState8[0],
|
|
130
|
+
setRows = _useState8[1];
|
|
131
|
+
|
|
132
|
+
useEffect(function () {
|
|
133
|
+
var newRows = [];
|
|
134
|
+
var keys = [];
|
|
135
|
+
var val = value || [];
|
|
136
|
+
val.forEach(function (item, index) {
|
|
137
|
+
var key = getRowKey(item, index);
|
|
138
|
+
newRows.push({
|
|
139
|
+
key: key,
|
|
140
|
+
index: index
|
|
141
|
+
});
|
|
142
|
+
keys.push(key);
|
|
143
|
+
});
|
|
144
|
+
store.update(val, keys);
|
|
145
|
+
setRows(function (prev) {
|
|
146
|
+
if (!isEqual(prev, newRows)) {
|
|
147
|
+
return newRows;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return prev;
|
|
151
|
+
});
|
|
152
|
+
}, [value]);
|
|
153
|
+
useEffect(function () {
|
|
154
|
+
store.onChange(onChange);
|
|
155
|
+
}, [onChange]);
|
|
156
|
+
var cols = useMemo(function () {
|
|
157
|
+
var mCols = [];
|
|
158
|
+
var validators = [];
|
|
159
|
+
columns.forEach(function (item) {
|
|
160
|
+
var _item$editable2;
|
|
161
|
+
|
|
162
|
+
var path = item.key || item.dataIndex || 'key';
|
|
163
|
+
|
|
164
|
+
var col = _objectSpread(_objectSpread({}, item), {}, {
|
|
165
|
+
editable: undefined,
|
|
166
|
+
render: function render(_, _ref2) {
|
|
167
|
+
var key = _ref2.key,
|
|
168
|
+
index = _ref2.index;
|
|
169
|
+
var render = item.render;
|
|
170
|
+
|
|
171
|
+
if (editable && item.editable !== undefined) {
|
|
172
|
+
var _item$editable = item.editable,
|
|
173
|
+
renderFormItem = _item$editable.renderFormItem,
|
|
174
|
+
disableLeftRight = _item$editable.disableLeftRight,
|
|
175
|
+
disableUpDown = _item$editable.disableUpDown;
|
|
176
|
+
|
|
177
|
+
if ( /*#__PURE__*/isValidElement(renderFormItem)) {
|
|
178
|
+
render = function render(value, _, __, opts) {
|
|
179
|
+
return /*#__PURE__*/React.createElement(EditableCell, {
|
|
180
|
+
disableLeftRight: disableLeftRight,
|
|
181
|
+
disableUpDown: disableUpDown,
|
|
182
|
+
errors: opts.errors,
|
|
183
|
+
focused: opts.focused,
|
|
184
|
+
onFocus: opts.onFocus
|
|
185
|
+
}, /*#__PURE__*/cloneElement(renderFormItem, {
|
|
186
|
+
bordered: false,
|
|
187
|
+
value: value,
|
|
188
|
+
onChange: function onChange(e) {
|
|
189
|
+
var val = e;
|
|
190
|
+
|
|
191
|
+
if (e !== undefined && e !== null && e.currentTarget instanceof HTMLInputElement) {
|
|
192
|
+
val = e.currentTarget.value;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
opts.onChange(_defineProperty({}, path, val));
|
|
196
|
+
}
|
|
197
|
+
}));
|
|
198
|
+
};
|
|
199
|
+
} else {
|
|
200
|
+
render = renderFormItem;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return /*#__PURE__*/React.createElement(Cell, {
|
|
205
|
+
name: path,
|
|
206
|
+
index: index,
|
|
207
|
+
rowKey: key
|
|
208
|
+
}, render);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
if (editable && ((_item$editable2 = item.editable) === null || _item$editable2 === void 0 ? void 0 : _item$editable2.rules) !== undefined) {
|
|
213
|
+
var _item$editable3;
|
|
214
|
+
|
|
215
|
+
validators.push([path, (_item$editable3 = item.editable) === null || _item$editable3 === void 0 ? void 0 : _item$editable3.rules]);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
mCols.push(col);
|
|
219
|
+
});
|
|
220
|
+
store.setValidators(validators);
|
|
221
|
+
return mCols;
|
|
222
|
+
}, [columns, editable]); // 键盘事件
|
|
223
|
+
|
|
224
|
+
var tableID = useMemo(function () {
|
|
225
|
+
return randomStr();
|
|
226
|
+
}, []);
|
|
227
|
+
useEffect(function () {
|
|
228
|
+
var table = document.getElementById(tableID);
|
|
229
|
+
|
|
230
|
+
if (table === null) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
var handleKeyUp = function handleKeyUp(e) {
|
|
235
|
+
var _cell$parentElement, _cell$parentElement2, _cell$parentElement3, _cell$parentElement3$, _cell$parentElement4, _cell$parentElement4$;
|
|
236
|
+
|
|
237
|
+
var inputElm = e.target;
|
|
238
|
+
var editableCell = inputElm.closest(".".concat(PREFIX_CLS, "-form-item"));
|
|
239
|
+
|
|
240
|
+
if (editableCell === null) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
var cell = editableCell.closest('td');
|
|
245
|
+
|
|
246
|
+
if (!cell) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
var colIndex = 0;
|
|
251
|
+
var node = cell;
|
|
252
|
+
var elm;
|
|
253
|
+
var nodes;
|
|
254
|
+
|
|
255
|
+
while (node !== null) {
|
|
256
|
+
node = node.previousElementSibling;
|
|
257
|
+
colIndex += 1;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
switch (e.key) {
|
|
261
|
+
case 'ArrowRight':
|
|
262
|
+
if (editableCell.dataset.leftRight === '0') {
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
nodes = (_cell$parentElement = cell.parentElement) === null || _cell$parentElement === void 0 ? void 0 : _cell$parentElement.querySelectorAll('input');
|
|
267
|
+
|
|
268
|
+
if (nodes !== undefined) {
|
|
269
|
+
var target;
|
|
270
|
+
|
|
271
|
+
for (var i = 0; i < nodes.length; i += 1) {
|
|
272
|
+
var item = nodes[i];
|
|
273
|
+
|
|
274
|
+
if (item === inputElm) {
|
|
275
|
+
target = nodes[i + 1];
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
if (target !== undefined && target.tabIndex >= 0) {
|
|
280
|
+
target.select();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
break;
|
|
285
|
+
|
|
286
|
+
case 'ArrowLeft':
|
|
287
|
+
if (editableCell.dataset.leftRight === '0') {
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
nodes = (_cell$parentElement2 = cell.parentElement) === null || _cell$parentElement2 === void 0 ? void 0 : _cell$parentElement2.querySelectorAll('input');
|
|
292
|
+
|
|
293
|
+
if (nodes !== undefined) {
|
|
294
|
+
var _target;
|
|
295
|
+
|
|
296
|
+
for (var _i2 = 0; _i2 < nodes.length; _i2 += 1) {
|
|
297
|
+
var _item = nodes[_i2];
|
|
298
|
+
|
|
299
|
+
if (_item === inputElm) {
|
|
300
|
+
_target = nodes[_i2 - 1];
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (_target !== undefined && _target.tabIndex >= 0) {
|
|
305
|
+
_target.select();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
break;
|
|
310
|
+
|
|
311
|
+
case 'ArrowDown':
|
|
312
|
+
case 'Enter':
|
|
313
|
+
if (editableCell.dataset.upDown === '0') {
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
elm = (_cell$parentElement3 = cell.parentElement) === null || _cell$parentElement3 === void 0 ? void 0 : (_cell$parentElement3$ = _cell$parentElement3.nextElementSibling) === null || _cell$parentElement3$ === void 0 ? void 0 : _cell$parentElement3$.querySelector("td:nth-child(".concat(colIndex, ") input"));
|
|
318
|
+
|
|
319
|
+
if (elm) {
|
|
320
|
+
elm.select();
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
break;
|
|
324
|
+
|
|
325
|
+
case 'ArrowUp':
|
|
326
|
+
if (editableCell.dataset.upDown === '0') {
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
elm = (_cell$parentElement4 = cell.parentElement) === null || _cell$parentElement4 === void 0 ? void 0 : (_cell$parentElement4$ = _cell$parentElement4.previousElementSibling) === null || _cell$parentElement4$ === void 0 ? void 0 : _cell$parentElement4$.querySelector("td:nth-child(".concat(colIndex, ") input"));
|
|
331
|
+
|
|
332
|
+
if (elm) {
|
|
333
|
+
elm.select();
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
table.addEventListener('keyup', handleKeyUp);
|
|
340
|
+
return function () {
|
|
341
|
+
table.removeEventListener('keyup', handleKeyUp);
|
|
342
|
+
};
|
|
343
|
+
}, [tableID]);
|
|
344
|
+
useImperativeHandle(ref, function () {
|
|
345
|
+
return {
|
|
346
|
+
validate: function validate() {
|
|
347
|
+
return store.validate();
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
}, []);
|
|
351
|
+
return /*#__PURE__*/React.createElement(Context.Provider, {
|
|
352
|
+
value: store
|
|
353
|
+
}, /*#__PURE__*/React.createElement(MemoTable, _objectSpread(_objectSpread({
|
|
354
|
+
rowHeight: editable ? 47 : 37,
|
|
355
|
+
columns: cols,
|
|
356
|
+
dataSource: rows,
|
|
357
|
+
rowKey: "key"
|
|
358
|
+
}, restProps), {}, {
|
|
359
|
+
id: tableID
|
|
360
|
+
})));
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export default /*#__PURE__*/forwardRef(EditableTable);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import EditableTable from './Table';
|
|
2
|
+
import EditableCell from './EditableCell';
|
|
3
|
+
import EditableTableFormItem from './EditableTableFormItem';
|
|
4
|
+
declare type TableType = typeof EditableTable & {
|
|
5
|
+
EditableCell: typeof EditableCell;
|
|
6
|
+
EditableTableFormItem: typeof EditableTableFormItem;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: TableType;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import EditableTable from './Table';
|
|
2
|
+
import EditableCell from './EditableCell';
|
|
3
|
+
import EditableTableFormItem from './EditableTableFormItem';
|
|
4
|
+
Object.assign(EditableTable, {
|
|
5
|
+
EditableCell: EditableCell,
|
|
6
|
+
EditableTableFormItem: EditableTableFormItem
|
|
7
|
+
});
|
|
8
|
+
export default EditableTable;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@import '../theme.less';
|
|
2
|
+
|
|
3
|
+
.@{prefixCls}-form-item {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: start;
|
|
7
|
+
min-width: 100%;
|
|
8
|
+
height: 32px;
|
|
9
|
+
padding: 0;
|
|
10
|
+
|
|
11
|
+
& > .ant-select {
|
|
12
|
+
flex: 1;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&-error {
|
|
16
|
+
padding: 6px 6px 6px 0;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { Key, ReactElement } from 'react';
|
|
2
|
+
import type { BaseTableProps, ColumnType } from '../BaseTable/typings';
|
|
3
|
+
import { RuleItem } from 'async-validator/dist-types/interface';
|
|
4
|
+
|
|
5
|
+
type RowType = {
|
|
6
|
+
key: Key;
|
|
7
|
+
index: number;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
type EditableCellFocusedType = 0 | 1 | 2;
|
|
11
|
+
|
|
12
|
+
export type EditableRender<T> = (
|
|
13
|
+
val: any,
|
|
14
|
+
record: T,
|
|
15
|
+
index: number,
|
|
16
|
+
opts: {
|
|
17
|
+
focused: EditableCellFocusedType;
|
|
18
|
+
onFocus: () => void;
|
|
19
|
+
errors?: string[];
|
|
20
|
+
onChange: (value: Partial<T>) => void;
|
|
21
|
+
},
|
|
22
|
+
) => ReactElement | null;
|
|
23
|
+
|
|
24
|
+
export type EditableTableRule<T> = Pick<
|
|
25
|
+
RuleItem,
|
|
26
|
+
'required' | 'message' | 'pattern' | 'min' | 'max' | 'len' | 'type'
|
|
27
|
+
> & {
|
|
28
|
+
validator?: (rule: unknown, val: any, record: T) => void | Promise<void>;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type EditableTableRef = {
|
|
32
|
+
validate(): Promise<any>;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export interface EditableTableColumnType<T>
|
|
36
|
+
extends Pick<
|
|
37
|
+
ColumnType<T>,
|
|
38
|
+
'key' | 'width' | 'render' | 'align' | 'ellipsis' | 'title' | 'fixed'
|
|
39
|
+
> {
|
|
40
|
+
dataIndex: string;
|
|
41
|
+
render?: (
|
|
42
|
+
val: any,
|
|
43
|
+
record: T,
|
|
44
|
+
index: number,
|
|
45
|
+
) => ReactElement | string | number | null | undefined;
|
|
46
|
+
editable?: {
|
|
47
|
+
/**
|
|
48
|
+
* @description 是否禁止可编辑单元格支持上下键切换,注意不是禁止单元格表单组件的上下键操作,而是EditableCell的上下键切换
|
|
49
|
+
*/
|
|
50
|
+
disableLeftRight?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* @description 同disabledLeftRight
|
|
53
|
+
*/
|
|
54
|
+
disableUpDown?: boolean;
|
|
55
|
+
rules?: EditableTableRule<T>[];
|
|
56
|
+
/**
|
|
57
|
+
* @description 是否自定义渲染单元格内表单组件,需要配合EditableCell组件进行使用,详见demo中的使用方式
|
|
58
|
+
*/
|
|
59
|
+
renderFormItem: EditableRender<T> | ReactElement;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type EditableTableRowError = {
|
|
64
|
+
key: string;
|
|
65
|
+
errors: string[];
|
|
66
|
+
children?: {
|
|
67
|
+
key: string;
|
|
68
|
+
errors: string[];
|
|
69
|
+
}[];
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export interface EditableTableProps<T>
|
|
73
|
+
extends Pick<BaseTableProps<T>, 'rowKey' | 'virtual' | 'scroll' | 'pagination'> {
|
|
74
|
+
editable?: boolean;
|
|
75
|
+
value?: T[];
|
|
76
|
+
error?: string | EditableTableRowError[];
|
|
77
|
+
onChange?: (value: T[]) => void;
|
|
78
|
+
rowSelection?: BaseTableProps<RowType>['rowSelection'];
|
|
79
|
+
columns: EditableTableColumnType<T>[];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export type EditableTableObserverHandler<T> = (params: {
|
|
83
|
+
record?: T;
|
|
84
|
+
focused?: EditableCellFocusedType;
|
|
85
|
+
errors?: string[] | null;
|
|
86
|
+
}) => void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Key } from 'react';
|
|
2
|
+
import { EditableTableObserverHandler, EditableTableRule } from './typings';
|
|
3
|
+
export declare class FormStore<T = Record<Key, any>> {
|
|
4
|
+
private data;
|
|
5
|
+
private keys;
|
|
6
|
+
private focused;
|
|
7
|
+
private handler?;
|
|
8
|
+
private errors;
|
|
9
|
+
private observers;
|
|
10
|
+
private validator;
|
|
11
|
+
constructor(initialData: T[], keys: Key[]);
|
|
12
|
+
private setError;
|
|
13
|
+
private removeError;
|
|
14
|
+
getError(rowKey: Key, colKey: Key): string[] | null;
|
|
15
|
+
setValidators(validators: [Key, EditableTableRule<T>[]][]): void;
|
|
16
|
+
getData(index: number): T;
|
|
17
|
+
validate(): Promise<boolean>;
|
|
18
|
+
private validateRecord;
|
|
19
|
+
setData(index: number, value: Partial<T>): void;
|
|
20
|
+
update(value: T[], keys: Key[]): void;
|
|
21
|
+
focus(rowKey: Key, colKey: Key): void;
|
|
22
|
+
onChange(handler: undefined | ((data: T[]) => void)): void;
|
|
23
|
+
listen(rowKey: Key, colKey: Key, cb: EditableTableObserverHandler<T>): () => void;
|
|
24
|
+
private notify;
|
|
25
|
+
}
|