es-grid-template 0.0.8 → 0.0.13

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.
Files changed (114) hide show
  1. package/LICENSE +21 -19
  2. package/es/{CheckboxFilter.js → grid-component/CheckboxFilter.js} +0 -1
  3. package/es/{ColumnsChoose.js → grid-component/ColumnsChoose.js} +1 -1
  4. package/es/grid-component/EditableCell.d.ts +19 -0
  5. package/es/grid-component/EditableCell.js +842 -0
  6. package/es/{FilterSearch.js → grid-component/FilterSearch.js} +1 -1
  7. package/es/grid-component/GridStyle.d.ts +4 -0
  8. package/es/grid-component/GridStyle.js +5 -0
  9. package/es/{InternalTable.d.ts → grid-component/InternalTable.d.ts} +1 -2
  10. package/es/grid-component/InternalTable.js +283 -0
  11. package/es/{LoadingSpinner.js → grid-component/LoadingSpinner.js} +1 -1
  12. package/es/grid-component/Message/Message.d.ts +2 -0
  13. package/es/grid-component/Message/Message.js +16 -0
  14. package/es/grid-component/Message/index.d.ts +1 -0
  15. package/es/grid-component/Message/index.js +1 -0
  16. package/{lib → es/grid-component}/TableGrid.d.ts +2 -2
  17. package/es/grid-component/TableGrid.js +375 -0
  18. package/es/grid-component/async-table-select/index.d.ts +9 -0
  19. package/es/grid-component/async-table-select/index.js +37 -0
  20. package/{lib → es/grid-component}/hooks/constant.d.ts +14 -0
  21. package/es/{hooks → grid-component/hooks}/constant.js +16 -1
  22. package/es/grid-component/hooks/useColumns/index.d.ts +6 -0
  23. package/es/grid-component/hooks/useColumns/index.js +422 -0
  24. package/es/grid-component/hooks/utils.d.ts +35 -0
  25. package/es/{hooks → grid-component/hooks}/utils.js +124 -16
  26. package/es/grid-component/index.d.ts +2 -0
  27. package/es/grid-component/index.js +2 -0
  28. package/es/grid-component/rc-table/Grid.d.ts +8 -0
  29. package/es/grid-component/rc-table/Grid.js +99 -0
  30. package/es/grid-component/rc-table/GridEdit.d.ts +9 -0
  31. package/es/grid-component/rc-table/GridEdit.js +706 -0
  32. package/es/grid-component/type.d.ts +225 -0
  33. package/es/grid-component/useContext.d.ts +27 -0
  34. package/es/grid-component/useContext.js +4 -0
  35. package/es/index.d.ts +1 -2
  36. package/es/index.js +2 -2
  37. package/es/table-grid/styles.scss +551 -0
  38. package/lib/{CheckboxFilter.js → grid-component/CheckboxFilter.js} +0 -1
  39. package/lib/{ColumnsChoose.js → grid-component/ColumnsChoose.js} +1 -1
  40. package/lib/grid-component/EditableCell.d.ts +19 -0
  41. package/lib/grid-component/EditableCell.js +844 -0
  42. package/lib/{FilterSearch.js → grid-component/FilterSearch.js} +1 -1
  43. package/lib/grid-component/GridStyle.d.ts +4 -0
  44. package/lib/grid-component/GridStyle.js +12 -0
  45. package/lib/{InternalTable.d.ts → grid-component/InternalTable.d.ts} +1 -2
  46. package/lib/grid-component/InternalTable.js +292 -0
  47. package/lib/{LoadingSpinner.js → grid-component/LoadingSpinner.js} +1 -1
  48. package/lib/grid-component/Message/Message.d.ts +2 -0
  49. package/lib/grid-component/Message/Message.js +25 -0
  50. package/lib/grid-component/Message/index.d.ts +1 -0
  51. package/lib/grid-component/Message/index.js +16 -0
  52. package/{es → lib/grid-component}/TableGrid.d.ts +2 -2
  53. package/lib/grid-component/TableGrid.js +382 -0
  54. package/lib/grid-component/async-table-select/index.d.ts +9 -0
  55. package/lib/grid-component/async-table-select/index.js +46 -0
  56. package/{es → lib/grid-component}/hooks/constant.d.ts +14 -0
  57. package/lib/{hooks → grid-component/hooks}/constant.js +17 -2
  58. package/lib/grid-component/hooks/useColumns/index.d.ts +6 -0
  59. package/lib/grid-component/hooks/useColumns/index.js +435 -0
  60. package/lib/grid-component/hooks/utils.d.ts +35 -0
  61. package/lib/{hooks → grid-component/hooks}/utils.js +140 -19
  62. package/lib/grid-component/index.d.ts +2 -0
  63. package/lib/grid-component/index.js +9 -0
  64. package/lib/grid-component/rc-table/Grid.d.ts +8 -0
  65. package/lib/grid-component/rc-table/Grid.js +108 -0
  66. package/lib/grid-component/rc-table/GridEdit.d.ts +9 -0
  67. package/lib/grid-component/rc-table/GridEdit.js +715 -0
  68. package/lib/grid-component/type.d.ts +225 -0
  69. package/lib/grid-component/useContext.d.ts +27 -0
  70. package/lib/grid-component/useContext.js +10 -0
  71. package/lib/index.d.ts +1 -2
  72. package/lib/index.js +7 -3
  73. package/lib/table-grid/styles.scss +551 -0
  74. package/package.json +15 -6
  75. package/es/InternalTable.js +0 -185
  76. package/es/TableGrid.js +0 -1055
  77. package/es/hooks/useColumns/index.d.ts +0 -2
  78. package/es/hooks/useColumns/index.js +0 -25
  79. package/es/hooks/utils.d.ts +0 -19
  80. package/es/styles.scss +0 -296
  81. package/es/type.d.ts +0 -100
  82. package/lib/InternalTable.js +0 -194
  83. package/lib/TableGrid.js +0 -1063
  84. package/lib/hooks/useColumns/index.d.ts +0 -2
  85. package/lib/hooks/useColumns/index.js +0 -31
  86. package/lib/hooks/utils.d.ts +0 -19
  87. package/lib/styles.scss +0 -296
  88. package/lib/type.d.ts +0 -100
  89. /package/es/{CheckboxFilter.d.ts → grid-component/CheckboxFilter.d.ts} +0 -0
  90. /package/es/{ColumnsChoose.d.ts → grid-component/ColumnsChoose.d.ts} +0 -0
  91. /package/es/{ContextMenu.d.ts → grid-component/ContextMenu.d.ts} +0 -0
  92. /package/es/{ContextMenu.js → grid-component/ContextMenu.js} +0 -0
  93. /package/es/{FilterSearch.d.ts → grid-component/FilterSearch.d.ts} +0 -0
  94. /package/es/{LoadingSpinner.d.ts → grid-component/LoadingSpinner.d.ts} +0 -0
  95. /package/es/{hooks → grid-component/hooks}/index.d.ts +0 -0
  96. /package/es/{hooks → grid-component/hooks}/index.js +0 -0
  97. /package/es/{hooks → grid-component/hooks}/useIsOverflow.d.ts +0 -0
  98. /package/es/{hooks → grid-component/hooks}/useIsOverflow.js +0 -0
  99. /package/es/{hooks → grid-component/hooks}/useOnClickOutside.d.ts +0 -0
  100. /package/es/{hooks → grid-component/hooks}/useOnClickOutside.js +0 -0
  101. /package/es/{type.js → grid-component/type.js} +0 -0
  102. /package/lib/{CheckboxFilter.d.ts → grid-component/CheckboxFilter.d.ts} +0 -0
  103. /package/lib/{ColumnsChoose.d.ts → grid-component/ColumnsChoose.d.ts} +0 -0
  104. /package/lib/{ContextMenu.d.ts → grid-component/ContextMenu.d.ts} +0 -0
  105. /package/lib/{ContextMenu.js → grid-component/ContextMenu.js} +0 -0
  106. /package/lib/{FilterSearch.d.ts → grid-component/FilterSearch.d.ts} +0 -0
  107. /package/lib/{LoadingSpinner.d.ts → grid-component/LoadingSpinner.d.ts} +0 -0
  108. /package/lib/{hooks → grid-component/hooks}/index.d.ts +0 -0
  109. /package/lib/{hooks → grid-component/hooks}/index.js +0 -0
  110. /package/lib/{hooks → grid-component/hooks}/useIsOverflow.d.ts +0 -0
  111. /package/lib/{hooks → grid-component/hooks}/useIsOverflow.js +0 -0
  112. /package/lib/{hooks → grid-component/hooks}/useOnClickOutside.d.ts +0 -0
  113. /package/lib/{hooks → grid-component/hooks}/useOnClickOutside.js +0 -0
  114. /package/lib/{type.js → grid-component/type.js} +0 -0
@@ -0,0 +1,715 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customParseFormat"));
11
+ var _classnames = _interopRequireDefault(require("classnames"));
12
+ var _antd = require("antd");
13
+ var _reactHookForm = require("react-hook-form");
14
+ var _reactHotToast = require("react-hot-toast");
15
+ var _useColumns = require("../hooks/useColumns");
16
+ var _EditableCell = _interopRequireDefault(require("../EditableCell"));
17
+ var _GridStyle = require("../GridStyle");
18
+ var _useContext = require("../useContext");
19
+ var _dayjs = _interopRequireDefault(require("dayjs"));
20
+ require("dayjs/locale/es");
21
+ require("dayjs/locale/vi");
22
+ var _TableGrid = _interopRequireDefault(require("../TableGrid"));
23
+ var _hooks = require("../hooks");
24
+ var _Message = _interopRequireDefault(require("./../Message/Message"));
25
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
26
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
27
+ _dayjs.default.extend(_customParseFormat.default);
28
+ const toast = 'top-right';
29
+ const GridEdit = props => {
30
+ const {
31
+ tableRef,
32
+ t,
33
+ columns,
34
+ dataSource,
35
+ allowResizing,
36
+ rowKey = 'id',
37
+ selectionSettings,
38
+ height,
39
+ format,
40
+ onDataChange,
41
+ onCellPaste,
42
+ onCellChange,
43
+ components,
44
+ ...rest
45
+ } = props;
46
+ const isSelecting = (0, _react.useRef)(false);
47
+ const startCell = (0, _react.useRef)(null);
48
+ const isSelectingRow = (0, _react.useRef)(false);
49
+ const rowStart = (0, _react.useRef)(null);
50
+ const [form] = _antd.Form.useForm();
51
+ const [editingKey, setEditingKey] = (0, _react.useState)('');
52
+ const [selectedCells, setSelectedCells] = (0, _react.useState)(new Set());
53
+ const [rowsSelected, setRowsSelected] = (0, _react.useState)(new Set());
54
+ const [selectedCell, setSelectedCell] = (0, _react.useState)(null);
55
+ const {
56
+ control,
57
+ handleSubmit,
58
+ setValue,
59
+ trigger,
60
+ getValues
61
+ // formState: { errors }
62
+ } = (0, _reactHookForm.useForm)({
63
+ mode: 'onChange'
64
+ // defaultValues,
65
+ // resolver: yupResolver(formSchema)
66
+ });
67
+
68
+ // @ts-ignore
69
+ const isEditing = record => record[rowKey] === editingKey;
70
+ (0, _react.useEffect)(() => {
71
+ const handleClickOutside = event => {
72
+ const tableBodies = document.getElementsByClassName("ui-rc-table-tbody");
73
+ const element = event.target;
74
+ const container = document.querySelector(".be-popup-container");
75
+ // const containerHidden = document.querySelector(".be-popup-container.ant-picker-dropdown-hidden")
76
+
77
+ const isInsideContainer = element.closest(".be-popup-container") && container;
78
+ if (isInsideContainer) {
79
+ return;
80
+ }
81
+ if (tableBodies.length > 0) {
82
+ const tableBody = tableBodies[0]; // Chọn tbody đầu tiên (nếu có nhiều)
83
+
84
+ if (!tableBody.contains(event.target)) {
85
+ setEditingKey('');
86
+ // isSelecting.current = false;
87
+ // startCell.current = null;
88
+ setSelectedCells(new Set());
89
+ } else {}
90
+ }
91
+ };
92
+ document.addEventListener("click", handleClickOutside);
93
+ return () => {
94
+ document.removeEventListener("click", handleClickOutside);
95
+ };
96
+ }, []);
97
+ const handleMouseDown = (row, col, e) => {
98
+ if (e.button === 2) {
99
+ e.stopPropagation();
100
+ return;
101
+ }
102
+ setSelectedCell({
103
+ row,
104
+ col
105
+ });
106
+ isSelecting.current = true;
107
+ startCell.current = {
108
+ row,
109
+ col
110
+ };
111
+ setSelectedCells(new Set([`${row}-${col}`]));
112
+ setRowsSelected(new Set());
113
+ };
114
+ const handleMouseEnter = (row, col) => {
115
+ if (!isSelecting.current || !startCell.current) return;
116
+ const {
117
+ row: startRow,
118
+ col: startCol
119
+ } = startCell.current;
120
+ const newSelectedCells = new Set();
121
+ for (let r = Math.min(startRow, row); r <= Math.max(startRow, row); r++) {
122
+ for (let c = Math.min(startCol, col); c <= Math.max(startCol, col); c++) {
123
+ newSelectedCells.add(`${r}-${c}`);
124
+ }
125
+ }
126
+ setSelectedCells(newSelectedCells);
127
+ };
128
+ const handleMouseDownColIndex = (row, col, e) => {
129
+ if (e.button === 2) {
130
+ e.stopPropagation();
131
+ return;
132
+ }
133
+ isSelectingRow.current = true;
134
+ rowStart.current = {
135
+ row,
136
+ col
137
+ };
138
+ setRowsSelected(new Set([`${row}-${col}`]));
139
+ };
140
+ const handleMouseEnterColIndex = (row, col, e) => {
141
+ // dừng sự kiện kéo để chọn từ các column khác khi vừa gặp column index
142
+ if (isSelecting) {
143
+ startCell.current = null;
144
+ e.stopPropagation();
145
+ }
146
+ if (!isSelectingRow.current || !rowStart.current) return;
147
+ // const { row: startRow, col: startCol } = rowStart.current;
148
+ const {
149
+ row: startRow,
150
+ col: startCol
151
+ } = rowStart.current;
152
+ const newSelectedRows = new Set();
153
+ for (let r = Math.min(startRow, row); r <= Math.max(startRow, row); r++) {
154
+ for (let c = Math.min(startCol, col); c <= Math.max(startCol, col); c++) {
155
+ newSelectedRows.add(`${r}-${c}`);
156
+ }
157
+ }
158
+ const newSelectedCells = new Set();
159
+ for (let r = Math.min(startRow, row); r <= Math.max(startRow, row); r++) {
160
+ for (let c = Math.min(columns.length, col) + 1; c <= Math.max(columns.length, col); c++) {
161
+ newSelectedCells.add(`${r}-${c}`);
162
+ }
163
+ }
164
+ setRowsSelected(newSelectedRows);
165
+ setSelectedCells(newSelectedCells);
166
+ };
167
+ const handleMouseUp = () => {
168
+ isSelecting.current = false;
169
+ startCell.current = null;
170
+ isSelectingRow.current = false;
171
+ rowStart.current = null;
172
+ };
173
+ const handleCopy = e => {
174
+ const selectedArray = Array.from(selectedCells).map(key => {
175
+ const [row, col] = key.split("-").map(Number);
176
+ // @ts-ignore
177
+ const columnKey = columns[col].dataIndex;
178
+ // @ts-ignore
179
+ return {
180
+ row,
181
+ col,
182
+ value: data[row][columnKey]
183
+ };
184
+ });
185
+
186
+ // Xác định min/max row và col để sắp xếp dữ liệu
187
+ const minRow = Math.min(...selectedArray.map(cell => cell.row));
188
+ const maxRow = Math.max(...selectedArray.map(cell => cell.row));
189
+ const minCol = Math.min(...selectedArray.map(cell => cell.col));
190
+ const maxCol = Math.max(...selectedArray.map(cell => cell.col));
191
+
192
+ // Tạo dữ liệu dạng bảng (mảng 2D)
193
+ const table = Array.from({
194
+ length: maxRow - minRow + 1
195
+ }, () => Array(maxCol - minCol + 1).fill(""));
196
+
197
+ // Gán giá trị vào bảng
198
+ selectedArray.forEach(({
199
+ row,
200
+ col,
201
+ value
202
+ }) => {
203
+ table[row - minRow][col - minCol] = value;
204
+ });
205
+
206
+ // Chuyển mảng 2D thành chuỗi định dạng Excel
207
+ const copyText = table.map(row => row.join("\t")).join("\n");
208
+
209
+ // Copy vào clipboard
210
+ e.preventDefault();
211
+ e.clipboardData.setData("text/plain", copyText);
212
+ (0, _Message.default)(t ? t('CopySuccessful') : 'Copy Successful');
213
+ };
214
+ const handlePaste = (e, indexCol, indexRow) => {
215
+ // const clipboard: any = (e.clipboardData || (window && window?.Clipboard)).getData("text")
216
+ const pasteData = e.clipboardData.getData("text/plain").trim();
217
+
218
+ // Chuyển đổi dữ liệu từ clipboard thành mảng
219
+ const rows = pasteData.split("\n").map(row => row.replace(/\r/g, "").split("\t"));
220
+
221
+ // Lấy vị trí bắt đầu
222
+ // const { row: startRow, col: startCol } = selectedCell;
223
+ const startRow = indexRow;
224
+ const startCol = indexCol;
225
+
226
+ // Cập nhật data mới
227
+ const newData = [...dataSource];
228
+ const pastedRows = [];
229
+ const pastedColumns = new Set();
230
+ rows.forEach((rowValues, rowIndex) => {
231
+ const targetRow = startRow + rowIndex;
232
+
233
+ // Nếu vượt quá số dòng hiện có, thêm dòng mới
234
+ if (targetRow >= newData.length) {
235
+ // @ts-ignore
236
+ // newData.push({ id: newGuid()});
237
+ newData.push({
238
+ id: newGuid()
239
+ });
240
+ }
241
+ rowValues.forEach((cellValue, colIndex) => {
242
+ const targetCol = startCol + colIndex;
243
+ if (targetCol >= columns.length) return; // Không vượt quá số cột
244
+
245
+ // @ts-ignore
246
+ const columnKey = columns[targetCol].dataIndex;
247
+ // @ts-ignore
248
+ newData[targetRow] = {
249
+ ...newData[targetRow],
250
+ [columnKey]: cellValue.trim()
251
+ };
252
+ pastedColumns.add(columnKey);
253
+ });
254
+
255
+ // Lưu dòng được paste
256
+ pastedRows.push(newData[targetRow]);
257
+ });
258
+ const pastedColumnsArray = Array.from(pastedColumns) ?? [];
259
+ console.log(pastedColumnsArray);
260
+ console.log(pastedRows);
261
+
262
+ // // trigger DataChange + trigger paste
263
+
264
+ // const handlePasteCallback = (callbackData: RecordType[]) => {
265
+ //
266
+ // const newDataUpdate = updateData(dataSource, callbackData, rowKey as any)
267
+ //
268
+ // // setData(newDataUpdate)
269
+ // // onDataChange?.(newData)
270
+ // onCellPaste?.dataChange?.(newDataUpdate)
271
+ // }
272
+ //
273
+ //
274
+ // if (onCellPaste && onCellPaste.onPasted) {
275
+ //
276
+ // if (onCellPaste.onPasted.length > 1) {
277
+ // onCellPaste.onPasted({
278
+ // pasteData: pastedRows,
279
+ // type: 'onPaste',
280
+ // data: dataSource,
281
+ // pastedColumns: pastedColumnsArray as string[]
282
+ // }, handlePasteCallback)
283
+ //
284
+ // } else {
285
+ // onCellPaste.onPasted({
286
+ // pasteData: pastedRows,
287
+ // type: 'onPaste',
288
+ // data: dataSource,
289
+ // pastedColumns: ['']
290
+ // }, handlePasteCallback)
291
+ //
292
+ // onCellPaste.dataChange?.(newData)
293
+ //
294
+ // // setData(newData);
295
+ // // onDataChange?.(newData)
296
+ // }
297
+ //
298
+ // }
299
+ };
300
+ const onSubmit = formData => {
301
+ console.log('onSubmit', formData);
302
+ try {
303
+ // const record = (await form.validateFields()) as RecordType;
304
+ const row = {
305
+ ...formData
306
+ };
307
+ // const rowData = { ...record };
308
+
309
+ // columns.forEach(column => {
310
+ //
311
+ // // @ts-ignore
312
+ // if (column.editType === 'date' && rowData[column.dataIndex]) {
313
+ // // @ts-ignore
314
+ // rowData[column.dataIndex] = !isEmpty(record[column.dataIndex]) ? moment(row[column.dataIndex]).format() : null
315
+ // }
316
+ // });
317
+
318
+ const newData = [...dataSource];
319
+ // @ts-ignore
320
+ const index = newData.findIndex(item => formData[rowKey] === item[rowKey]);
321
+
322
+ // setIsManualUpdate(true);
323
+
324
+ if (index > -1) {
325
+ const item = newData[index];
326
+ newData.splice(index, 1, {
327
+ ...item,
328
+ ...row
329
+ });
330
+
331
+ // trigger DataChange
332
+ // setData(newData);
333
+ // onDataChange?.(newData)
334
+ } else {
335
+ newData.push(row);
336
+ // trigger DataChange
337
+
338
+ // setData(newData);
339
+ // onDataChange?.(newData)
340
+ }
341
+ } catch (errInfo) {
342
+ console.log('Validate Failed:', errInfo);
343
+ }
344
+ };
345
+ const handleCellChange = args => {
346
+ const {
347
+ record,
348
+ type,
349
+ newState,
350
+ prevState
351
+ } = args;
352
+
353
+ // console.log('newState', newState)
354
+ //
355
+ // console.log('getValues()', getValues())
356
+
357
+ // const record = getValues()
358
+
359
+ if (type === 'enter') {
360
+ console.log('aaaaaa enter');
361
+ }
362
+ if (type === 'blur') {
363
+ // onCellChange
364
+
365
+ const handleChangeCallback = callbackData => {
366
+ // const newDataUpdate = updateData(data, callbackData, rowKey as any)
367
+
368
+ console.log('callbackData', callbackData);
369
+ const newRecord = callbackData;
370
+ onSubmit(newRecord);
371
+ };
372
+ if (onCellChange) {
373
+ if (onCellChange.length > 1) {
374
+ console.log('onCellChange Callback');
375
+ onCellChange({
376
+ field: '',
377
+ indexCol: 1,
378
+ type: 'onChange',
379
+ rows: [],
380
+ value: newState,
381
+ indexRow: 1,
382
+ rowData: record,
383
+ rowId: '',
384
+ rowsData: [],
385
+ sumValue: []
386
+ }, handleChangeCallback);
387
+ } else {
388
+ console.log('onCellChange');
389
+ onCellChange({
390
+ field: '',
391
+ indexCol: 1,
392
+ type: 'onChange',
393
+ rows: [],
394
+ value: newState,
395
+ indexRow: 1,
396
+ rowData: record,
397
+ rowId: '',
398
+ rowsData: [],
399
+ sumValue: []
400
+ }, handleChangeCallback);
401
+ onSubmit(record);
402
+ }
403
+ }
404
+ console.log('aaaaaa blur');
405
+ }
406
+ if (prevState && newState && prevState !== newState && type === 'enter') {
407
+ console.log('enter');
408
+ onSubmit(record);
409
+ }
410
+ };
411
+ const handleEdit = (record, col, editType, e) => {
412
+ // @ts-ignore
413
+ setEditingKey(record[rowKey]);
414
+
415
+ // const formattedRecord = { ...record };
416
+
417
+ if (!(0, _hooks.isObjEmpty)(record)) {
418
+ Object.entries(record).forEach(([name, value]) => {
419
+ setValue(name, value);
420
+
421
+ // if (listObjectDate.includes(name) && value) {
422
+ // setValue(name, new Date(value))
423
+ // } else {
424
+ // setValue(name, value)
425
+ // }
426
+ });
427
+ }
428
+
429
+ // columns.forEach(column => {
430
+ //
431
+ // const dateFormat = getDatepickerFormat(editType, column)
432
+ //
433
+ // // @ts-ignore
434
+ // if ((column.editType === 'date' || column.editType === 'datetime') && record[column.dataIndex]) {
435
+ //
436
+ // // @ts-ignore
437
+ // formattedRecord[column.dataIndex] = !isEmpty(record[column.dataIndex]) ? convertDateToDayjs(new Date(record[column.dataIndex]), dateFormat) : null
438
+ // }
439
+ //
440
+ // });
441
+
442
+ if (e.key === 'Enter' || editType === 'date' || e.type === 'dblclick') {} else {
443
+ setValue(col.dataIndex, e.key);
444
+ }
445
+ if (editType === 'select') {
446
+ // setSearchValue(e.key)
447
+ // setOpen(true)
448
+ }
449
+ if (selectedCell?.row !== undefined && selectedCell?.col !== undefined) {
450
+ setTimeout(() => {
451
+ // const input = document.querySelector(`.ui-rc-table-row[data-row-key="${selectedCell.row}"] .cell-editing[data-col-index="${selectedCell.col}"] input`) as HTMLInputElement;
452
+ const input = document.querySelector(`.ui-rc-table-row .cell-editing[data-row-index="${selectedCell.row}"].cell-editing[data-col-index="${selectedCell.col}"] input`);
453
+ // const input = document.getElementById(`col${selectedCell.col}-record${selectedCell.row}`) as HTMLInputElement;
454
+
455
+ const select = document.querySelector(`div.cell-editing[tabindex="${selectedCell?.col}"] .ant-select-selection-search input`);
456
+ if (input) {
457
+ input.focus();
458
+ }
459
+ if (select) {
460
+ // @ts-ignore
461
+ select.searchValue = e.key;
462
+ // @ts-ignore
463
+ select.focus();
464
+ }
465
+ }, 0);
466
+ }
467
+ };
468
+ (0, _react.useEffect)(() => {
469
+ const tableBody = document.querySelector(".ui-rc-table-tbody");
470
+ const tableHeader = document.querySelector(".ui-rc-table-header");
471
+ if (tableBody && tableHeader) {
472
+ tableBody.addEventListener("scroll", () => {
473
+ tableHeader.scrollLeft = tableBody.scrollLeft;
474
+ });
475
+ }
476
+ }, []);
477
+ const scrollToCell = (rowIndex, colIndex, cell, type) => {
478
+ const fixedWidth = (0, _hooks.totalFixedWidth)(columns, 'left', selectionSettings);
479
+ if (type === 'horizontal') {
480
+ if (tableRef.current) {
481
+ tableRef.current.scrollTo({
482
+ left: cell.offsetLeft - fixedWidth,
483
+ behavior: "smooth"
484
+ });
485
+
486
+ // Cuộn header
487
+ // const tableHeader = document?.querySelector(".ui-rc-table-header");
488
+ // if (tableHeader) {
489
+ // tableHeader.scrollLeft = cell.offsetLeft - fixedWidth
490
+ // }
491
+ }
492
+ } else {
493
+ tableRef?.current?.scrollTo({
494
+ index: rowIndex,
495
+ behavior: 'smooth'
496
+ });
497
+ }
498
+ };
499
+ const handleFocusCell = (rowIndex, colIndex, col, type, e) => {
500
+ const isEdit = editingKey !== '';
501
+ // const cellEdit: any = document.querySelector(`.ui-rc-table-row[data-row-key="${rowIndex}"] .cell-editing[data-col-index="${colIndex}"]`);
502
+ // const cell: any = document.querySelector(`.ui-rc-table-row[data-row-key="${rowIndex}"] .cell-editable[data-col-index="${colIndex}"]`);
503
+
504
+ const cellEdit = document.querySelector(`.ui-rc-table-row .cell-editing[data-row-index="${rowIndex}"].cell-editing[data-col-index="${colIndex}"]`);
505
+ const cell = document.querySelector(`.ui-rc-table-row .cell-editable[data-row-index="${rowIndex}"].cell-editable[data-col-index="${colIndex}"]`);
506
+ const updateSelection = () => {
507
+ setSelectedCell({
508
+ row: rowIndex,
509
+ col: colIndex
510
+ });
511
+ setSelectedCells(new Set([`${rowIndex}-${colIndex}`]));
512
+ };
513
+ if (isEdit) {
514
+ if (cellEdit) {
515
+ updateSelection();
516
+ if (e?.key !== 'Tab') {
517
+ cellEdit.focus();
518
+ }
519
+ }
520
+ if (type === 'horizontal' && cellEdit) {
521
+ scrollToCell(rowIndex, colIndex, cellEdit, 'horizontal');
522
+ }
523
+ if (type === 'vertical' && cell) {
524
+ setEditingKey('');
525
+ updateSelection();
526
+ scrollToCell(rowIndex, colIndex, cellEdit, 'vertical');
527
+ if (e?.key !== 'Tab') {
528
+ cell.focus();
529
+ }
530
+ }
531
+ } else {
532
+ if (cell) {
533
+ updateSelection();
534
+ if (e?.key !== 'Tab') {
535
+ cell.focus();
536
+ }
537
+ }
538
+ if (cell) {
539
+ scrollToCell(rowIndex, colIndex, cell, type);
540
+ }
541
+ }
542
+ };
543
+ const addResizeHandlers = (cols, parentPath = []) => {
544
+ return cols.map((col, colIndex) => {
545
+ const currentPath = [...parentPath, colIndex];
546
+ if (!col?.dataIndex && !col.key) {
547
+ return col;
548
+ }
549
+ if (col.children) {
550
+ return {
551
+ ...col,
552
+ children: addResizeHandlers(col.children, currentPath)
553
+ };
554
+ }
555
+ if (col.dataIndex === 'index' || col.field === 'index' || col.dataIndex === '#' || col.dataIndex === '#') {
556
+ return {
557
+ ...col,
558
+ render: (value, record, rowIndex) => {
559
+ return /*#__PURE__*/_react.default.createElement("div", {
560
+ className: (0, _classnames.default)('ui-rc_cell-content ui-rc_cell-content--index', {
561
+ selected: rowsSelected.has(`${rowIndex}-${colIndex}`),
562
+ focus: selectedCells && Array.from(selectedCells).some(item => item.startsWith(`${rowIndex}-`))
563
+ }),
564
+ onMouseDown: event => handleMouseDownColIndex(rowIndex, colIndex, event),
565
+ onMouseEnter: event => handleMouseEnterColIndex(rowIndex, colIndex, event)
566
+ }, /*#__PURE__*/_react.default.createElement("div", {
567
+ className: 'ui-rc_content'
568
+ }, rowIndex + 1));
569
+ }
570
+ };
571
+ }
572
+ return {
573
+ ...col,
574
+ onCell: (record, rowIndex) => ({
575
+ onKeyDown: event => {
576
+ if (event.key.length === 1 && !event.ctrlKey && !event.metaKey || event.key === 'Enter') {
577
+ if (!isEditing(record) && record[rowKey] !== editingKey) {
578
+ handleEdit(record, col, col.editType, event);
579
+ }
580
+ if (editingKey && editingKey !== '' && (rowIndex ?? 0) + 1 < dataSource.length && event.key === 'Enter') {
581
+ handleFocusCell((rowIndex ?? 0) + 1, colIndex, col, 'vertical', event);
582
+ }
583
+ }
584
+ if (event.key === 'Tab') {
585
+ if (colIndex + 1 !== cols.length) {
586
+ handleFocusCell(rowIndex, colIndex + 1, col, 'horizontal', event);
587
+ } else {
588
+ event.stopPropagation();
589
+ event.preventDefault();
590
+ }
591
+ }
592
+ if (event.key === 'ArrowRight' && colIndex + 1 !== cols.length) {
593
+ if (editingKey !== '') {} else {
594
+ handleFocusCell(rowIndex, colIndex + 1, col, 'horizontal', event);
595
+ }
596
+ }
597
+ if (event.key === 'ArrowLeft' && colIndex > 0) {
598
+ if (!col.dataIndex && !col.key || col.field === 'index' || col.field === '#' || col.dataIndex === 'index' || col.dataIndex === '#') {
599
+ event.stopPropagation();
600
+ event.preventDefault();
601
+ } else {
602
+ if (editingKey !== '') {} else {
603
+ handleFocusCell(rowIndex, colIndex - 1, col, 'horizontal', event);
604
+ }
605
+ }
606
+ }
607
+ if (event.key === 'ArrowDown' && (rowIndex ?? 0) + 1 < dataSource.length) {
608
+ handleFocusCell((rowIndex ?? 0) + 1, colIndex, col, 'vertical', event);
609
+ }
610
+ if (event.key === 'ArrowUp' && (rowIndex ?? 0) > 0) {
611
+ handleFocusCell((rowIndex ?? 0) - 1, colIndex, col, 'vertical', event);
612
+ }
613
+ },
614
+ onPaste: event => {
615
+ if (editingKey === '') {
616
+ handlePaste(event, colIndex, rowIndex);
617
+ event.preventDefault();
618
+ }
619
+ },
620
+ onCopy: e => {
621
+ if (editingKey === '') {
622
+ handleCopy(e);
623
+ e.preventDefault();
624
+ }
625
+ },
626
+ onDoubleClick: event => {
627
+ if (!isEditing(record) && record[rowKey] !== editingKey) {
628
+ handleEdit(record, col, col.editType, event);
629
+ }
630
+ },
631
+ onClick: () => {
632
+ if (record[rowKey] !== editingKey && editingKey !== '') {
633
+ setEditingKey('');
634
+ }
635
+ },
636
+ className: isEditing(record) ? 'cell-editing' : 'cell-editable',
637
+ record,
638
+ column: col,
639
+ editType: (0, _hooks.getEditType)(col, record),
640
+ dataIndex: col.dataIndex,
641
+ title: col.title,
642
+ 'data-col-index': colIndex,
643
+ 'data-row-index': rowIndex,
644
+ colIndex: colIndex,
645
+ indexCol: colIndex,
646
+ indexRow: rowIndex,
647
+ editing: isEditing(record),
648
+ tabIndex: (rowIndex ?? 0) * columns.length + colIndex
649
+ }),
650
+ render: (value, record, rowIndex) => {
651
+ return /*#__PURE__*/_react.default.createElement("div", {
652
+ className: (0, _classnames.default)('ui-rc_cell-content', {
653
+ selected: selectedCells.has(`${rowIndex}-${colIndex}`)
654
+ }),
655
+ onMouseDown: event => handleMouseDown(rowIndex, colIndex, event),
656
+ onMouseEnter: () => handleMouseEnter(rowIndex, colIndex),
657
+ onMouseLeave: () => {}
658
+ }, /*#__PURE__*/_react.default.createElement("div", {
659
+ className: 'ui-rc_content'
660
+ }, (0, _useColumns.renderContent)(col, value, record, rowIndex)));
661
+ }
662
+ };
663
+ });
664
+ };
665
+ const resizableColumns = addResizeHandlers(columns);
666
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_GridStyle.GridStyle, {
667
+ heightTable: height,
668
+ style: {
669
+ position: 'relative'
670
+ },
671
+ onMouseUp: handleMouseUp
672
+ }, /*#__PURE__*/_react.default.createElement(_useContext.TableContext.Provider, {
673
+ value: {
674
+ rowKey,
675
+ form,
676
+ format,
677
+ control,
678
+ trigger,
679
+ getValues,
680
+ handleCellChange
681
+ }
682
+ }, /*#__PURE__*/_react.default.createElement("form", {
683
+ onSubmit: handleSubmit(onSubmit)
684
+ }, /*#__PURE__*/_react.default.createElement(_TableGrid.default, (0, _extends2.default)({}, rest, {
685
+ t: t,
686
+ tableRef: tableRef,
687
+ dataSource: dataSource,
688
+ components: {
689
+ ...components,
690
+ body: {
691
+ cell: _EditableCell.default
692
+ }
693
+ },
694
+ className: 'grid-editable',
695
+ rowKey: rowKey,
696
+ columns: resizableColumns,
697
+ showSorterTooltip: {
698
+ target: 'sorter-icon'
699
+ },
700
+ format: format,
701
+ selectionSettings: selectionSettings ? {
702
+ ...selectionSettings,
703
+ checkboxOnly: true
704
+ } : undefined,
705
+ style: {
706
+ minHeight: height
707
+ }
708
+ }))))), /*#__PURE__*/_react.default.createElement(_reactHotToast.Toaster, {
709
+ position: toast,
710
+ toastOptions: {
711
+ className: 'react-hot-toast'
712
+ }
713
+ }));
714
+ };
715
+ var _default = exports.default = GridEdit;