es-grid-template 1.7.34 → 1.7.36
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/es/table-component/InternalTable.js +35 -10
- package/es/table-component/TableContainerEdit.js +31 -2
- package/es/table-component/body/TableBodyCellEdit.js +96 -21
- package/es/table-component/hook/utils.d.ts +4 -1
- package/es/table-component/hook/utils.js +13 -3
- package/es/table-component/table/Grid.d.ts +4 -3
- package/es/table-component/table/Grid.js +29 -3
- package/es/table-component/table/TableWrapper.js +1 -1
- package/es/table-component/useContext.d.ts +2 -1
- package/es/table-component/useContext.js +2 -1
- package/lib/table-component/InternalTable.js +35 -10
- package/lib/table-component/TableContainerEdit.js +31 -2
- package/lib/table-component/body/TableBodyCellEdit.js +95 -21
- package/lib/table-component/hook/utils.d.ts +4 -1
- package/lib/table-component/hook/utils.js +17 -7
- package/lib/table-component/table/Grid.d.ts +4 -3
- package/lib/table-component/table/Grid.js +28 -2
- package/lib/table-component/table/TableWrapper.js +1 -1
- package/lib/table-component/useContext.d.ts +2 -1
- package/lib/table-component/useContext.js +2 -1
- package/package.json +1 -1
|
@@ -51,8 +51,8 @@ export const SELECTION_COLUMN = {};
|
|
|
51
51
|
const InternalTable = props => {
|
|
52
52
|
const {
|
|
53
53
|
t,
|
|
54
|
-
|
|
55
|
-
columns,
|
|
54
|
+
columns: propsColumns,
|
|
55
|
+
// columns,
|
|
56
56
|
lang,
|
|
57
57
|
locale,
|
|
58
58
|
dataSource,
|
|
@@ -61,6 +61,7 @@ const InternalTable = props => {
|
|
|
61
61
|
groupAble,
|
|
62
62
|
groupSetting,
|
|
63
63
|
groupColumns,
|
|
64
|
+
selectionSettings,
|
|
64
65
|
// infiniteScroll,
|
|
65
66
|
// wrapSettings,
|
|
66
67
|
// onFilter,
|
|
@@ -126,6 +127,10 @@ const InternalTable = props => {
|
|
|
126
127
|
const [filterStates, setFilterState] = React.useState(null);
|
|
127
128
|
const [sorterStates, setSorterStates] = React.useState([]);
|
|
128
129
|
const [isFullScreen, setIsFullScreen] = React.useState(false);
|
|
130
|
+
const [columns, setColumns] = React.useState([]);
|
|
131
|
+
React.useEffect(() => {
|
|
132
|
+
setColumns(propsColumns);
|
|
133
|
+
}, [propsColumns]);
|
|
129
134
|
const [expanded, setExpanded] = React.useState({});
|
|
130
135
|
const convertData = React.useMemo(() => {
|
|
131
136
|
if (groupAble && groupSetting && groupSetting.client !== false) {
|
|
@@ -160,6 +165,16 @@ const InternalTable = props => {
|
|
|
160
165
|
const [mergedFilterKeys, setMergedFilterKeys] = useMergedState(getAllRowKey(convertData), {
|
|
161
166
|
value: undefined
|
|
162
167
|
});
|
|
168
|
+
|
|
169
|
+
// ========================= Keys =========================
|
|
170
|
+
|
|
171
|
+
const {
|
|
172
|
+
selectedRowKeys,
|
|
173
|
+
defaultSelectedRowKeys
|
|
174
|
+
} = selectionSettings ?? {};
|
|
175
|
+
const [mergedSelectedKeys] = useMergedState(selectedRowKeys || defaultSelectedRowKeys || [], {
|
|
176
|
+
value: selectedRowKeys
|
|
177
|
+
});
|
|
163
178
|
const mergedData = React.useMemo(() => {
|
|
164
179
|
return filterDataByColumns(convertData, filterStates, sorterStates, mergedFilterKeys);
|
|
165
180
|
}, [convertData, filterStates, mergedFilterKeys, sorterStates]);
|
|
@@ -169,10 +184,14 @@ const InternalTable = props => {
|
|
|
169
184
|
const [columnsHiddenKeys, setColumnsHiddenKeys] = useMergedState(undefined, {
|
|
170
185
|
value: undefined
|
|
171
186
|
});
|
|
172
|
-
const triggerChangeColumns = (cols, keys) => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
187
|
+
const triggerChangeColumns = (cols, keys, type) => {
|
|
188
|
+
if (type === 'cellClick') {
|
|
189
|
+
setColumns(cols);
|
|
190
|
+
} else {
|
|
191
|
+
const aa = flatColumns2(columns).map(it => it.field);
|
|
192
|
+
const rsss = getDiffent2Array(aa, keys);
|
|
193
|
+
setColumnsHiddenKeys(rsss);
|
|
194
|
+
}
|
|
176
195
|
};
|
|
177
196
|
|
|
178
197
|
// const contextMenuItems = React.useMemo(() => {
|
|
@@ -282,7 +301,9 @@ const InternalTable = props => {
|
|
|
282
301
|
setIsFullScreen: setIsFullScreen,
|
|
283
302
|
windowSize: windowSize,
|
|
284
303
|
height: height,
|
|
285
|
-
isDataTree: isDataTree
|
|
304
|
+
isDataTree: isDataTree,
|
|
305
|
+
selectionSettings: selectionSettings,
|
|
306
|
+
mergedSelectedKeys: mergedSelectedKeys
|
|
286
307
|
})), /*#__PURE__*/React.createElement(Modal, {
|
|
287
308
|
open: isFullScreen,
|
|
288
309
|
footer: null,
|
|
@@ -314,8 +335,10 @@ const InternalTable = props => {
|
|
|
314
335
|
paddingTop: 40
|
|
315
336
|
}
|
|
316
337
|
}, /*#__PURE__*/React.createElement(Grid, _extends({}, rest, {
|
|
317
|
-
t: t
|
|
318
|
-
id
|
|
338
|
+
t: t
|
|
339
|
+
// id={isFullScreen ? faker.string.alpha(20) : id}
|
|
340
|
+
,
|
|
341
|
+
id: faker.string.alpha(20),
|
|
319
342
|
prefix: prefix,
|
|
320
343
|
originData: convertData,
|
|
321
344
|
dataSource: mergedData,
|
|
@@ -346,7 +369,9 @@ const InternalTable = props => {
|
|
|
346
369
|
setIsFullScreen: setIsFullScreen,
|
|
347
370
|
height: windowSize.innerHeight - 70,
|
|
348
371
|
windowSize: windowSize,
|
|
349
|
-
isDataTree: isDataTree
|
|
372
|
+
isDataTree: isDataTree,
|
|
373
|
+
selectionSettings: selectionSettings,
|
|
374
|
+
mergedSelectedKeys: mergedSelectedKeys
|
|
350
375
|
})))));
|
|
351
376
|
};
|
|
352
377
|
export default InternalTable;
|
|
@@ -116,7 +116,8 @@ const TableContainerEdit = props => {
|
|
|
116
116
|
contextMenuHidden,
|
|
117
117
|
showDefaultContext,
|
|
118
118
|
commandSettings,
|
|
119
|
-
isDataTree
|
|
119
|
+
isDataTree,
|
|
120
|
+
onCellClick
|
|
120
121
|
} = props;
|
|
121
122
|
const containerRef = React.useRef(null);
|
|
122
123
|
const bottomToolbarRef = React.useRef(null);
|
|
@@ -1442,6 +1443,33 @@ const TableContainerEdit = props => {
|
|
|
1442
1443
|
}
|
|
1443
1444
|
contextMenuClick?.(args);
|
|
1444
1445
|
};
|
|
1446
|
+
const handleCellClick = (rowNumber, record, column, rowId, cellValue) => {
|
|
1447
|
+
const cellClickCallback = newOptions => {
|
|
1448
|
+
if (newOptions) {
|
|
1449
|
+
const newElem = {
|
|
1450
|
+
...column,
|
|
1451
|
+
editSelectSettings: {
|
|
1452
|
+
...(column?.editSelectSettings ? {
|
|
1453
|
+
...column?.editSelectSettings
|
|
1454
|
+
} : {}),
|
|
1455
|
+
options: newOptions
|
|
1456
|
+
}
|
|
1457
|
+
};
|
|
1458
|
+
const rrr = updateArrayByKey([...columns], newElem, 'field');
|
|
1459
|
+
triggerChangeColumns?.(rrr, 'click');
|
|
1460
|
+
}
|
|
1461
|
+
};
|
|
1462
|
+
if (onCellClick) {
|
|
1463
|
+
onCellClick({
|
|
1464
|
+
index: rowNumber,
|
|
1465
|
+
rowId,
|
|
1466
|
+
cellValue,
|
|
1467
|
+
type: "Editing",
|
|
1468
|
+
field: column.field,
|
|
1469
|
+
rowData: record
|
|
1470
|
+
}, cellClickCallback);
|
|
1471
|
+
}
|
|
1472
|
+
};
|
|
1445
1473
|
return /*#__PURE__*/React.createElement("div", {
|
|
1446
1474
|
ref: containerRef,
|
|
1447
1475
|
id: id
|
|
@@ -1554,7 +1582,8 @@ const TableContainerEdit = props => {
|
|
|
1554
1582
|
handleDeleteContent,
|
|
1555
1583
|
handleAddMulti,
|
|
1556
1584
|
dataErrors,
|
|
1557
|
-
windowSize
|
|
1585
|
+
windowSize,
|
|
1586
|
+
handleCellClick
|
|
1558
1587
|
}
|
|
1559
1588
|
}, /*#__PURE__*/React.createElement(TableWrapper, {
|
|
1560
1589
|
contextMenuItems: contextMenuItems,
|
|
@@ -9,6 +9,7 @@ getColIdsBetween, getCommonPinningStyles, getEditType, getRowIdsBetween, getSele
|
|
|
9
9
|
import Checkbox from "rc-master-ui/es/checkbox/Checkbox";
|
|
10
10
|
import classNames from "classnames";
|
|
11
11
|
// import type { Dispatch, SetStateAction } from "react";
|
|
12
|
+
|
|
12
13
|
import React from "react";
|
|
13
14
|
import { TableContext } from "../useContext";
|
|
14
15
|
import EditableCell from "./EditableCell";
|
|
@@ -69,16 +70,73 @@ const renderSelection = args => {
|
|
|
69
70
|
const {
|
|
70
71
|
row
|
|
71
72
|
} = args.cell;
|
|
73
|
+
const {
|
|
74
|
+
cell,
|
|
75
|
+
expandIconColumnIndex,
|
|
76
|
+
isDataTree,
|
|
77
|
+
expanded,
|
|
78
|
+
setExpanded
|
|
79
|
+
} = args;
|
|
80
|
+
const {
|
|
81
|
+
selectionSettings,
|
|
82
|
+
setIsSelectionChange
|
|
83
|
+
} = args;
|
|
72
84
|
return /*#__PURE__*/React.createElement("div", {
|
|
73
|
-
className: "ui-rc_cell-content",
|
|
74
85
|
style: {
|
|
75
86
|
|
|
76
87
|
// paddingLeft: `${row.depth * 2}rem`,
|
|
77
88
|
}
|
|
78
|
-
},
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
89
|
+
}, cell.column.getIndex() === expandIconColumnIndex && isDataTree && /*#__PURE__*/React.createElement("div", {
|
|
90
|
+
className: "ui-rc-table-row-expand-trigger",
|
|
91
|
+
style: {
|
|
92
|
+
paddingLeft: `${cell.row.depth * 25}px`
|
|
93
|
+
}
|
|
94
|
+
}, /*#__PURE__*/React.createElement("div", null, cell.row.getCanExpand() ? /*#__PURE__*/React.createElement("button", {
|
|
95
|
+
// onClick: row.getToggleExpandedHandler(),
|
|
96
|
+
onClick: () => {
|
|
97
|
+
const keys = Object.keys(expanded);
|
|
98
|
+
// @ts-ignore
|
|
99
|
+
const tmp = {
|
|
100
|
+
...expanded
|
|
101
|
+
};
|
|
102
|
+
if (keys.includes(cell.row.id)) {
|
|
103
|
+
delete tmp[cell.row.id];
|
|
104
|
+
setExpanded(tmp);
|
|
105
|
+
} else {
|
|
106
|
+
setExpanded(old => ({
|
|
107
|
+
...old,
|
|
108
|
+
[cell.row.id]: true
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
style: {
|
|
113
|
+
cursor: "pointer"
|
|
114
|
+
},
|
|
115
|
+
className: "ui-rc-table-row-expand"
|
|
116
|
+
}, cell.row.getIsExpanded() ? /*#__PURE__*/React.createElement("span", {
|
|
117
|
+
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-expanded"
|
|
118
|
+
}) : /*#__PURE__*/React.createElement("span", {
|
|
119
|
+
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-collapsed"
|
|
120
|
+
})) : /*#__PURE__*/React.createElement("span", {
|
|
121
|
+
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-spaced"
|
|
122
|
+
}))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Checkbox, {
|
|
123
|
+
checked: row.getIsSelected() || row.getIsAllSubRowsSelected(),
|
|
124
|
+
indeterminate: row.getIsSomeSelected() && selectionSettings && selectionSettings.mode === 'checkbox' && selectionSettings.type !== 'single'
|
|
125
|
+
// indeterminate={row.getIsSomeSelected() }
|
|
126
|
+
,
|
|
127
|
+
onChange: e => {
|
|
128
|
+
row.getToggleSelectedHandler()(e);
|
|
129
|
+
setIsSelectionChange({
|
|
130
|
+
isChange: true,
|
|
131
|
+
type: 'rowSelected',
|
|
132
|
+
rowData: row.original
|
|
133
|
+
});
|
|
134
|
+
// row.toggleSelected()
|
|
135
|
+
|
|
136
|
+
// table.setRowSelection({
|
|
137
|
+
// [row.id]: true
|
|
138
|
+
// })
|
|
139
|
+
}
|
|
82
140
|
})));
|
|
83
141
|
};
|
|
84
142
|
const TableBodyCellEdit = props => {
|
|
@@ -128,7 +186,10 @@ const TableBodyCellEdit = props => {
|
|
|
128
186
|
expanded,
|
|
129
187
|
setExpanded,
|
|
130
188
|
expandable,
|
|
131
|
-
isDataTree
|
|
189
|
+
isDataTree,
|
|
190
|
+
handleCellClick,
|
|
191
|
+
setIsSelectionChange,
|
|
192
|
+
selectionSettings
|
|
132
193
|
} = React.useContext(TableContext);
|
|
133
194
|
const expandIconColumnIndex = expandable?.expandIconColumnIndex;
|
|
134
195
|
const record = cell.row.original;
|
|
@@ -411,10 +472,11 @@ const TableBodyCellEdit = props => {
|
|
|
411
472
|
|
|
412
473
|
// setRangePasteState(selectPasteState)
|
|
413
474
|
}
|
|
414
|
-
const handleEdit = e => {
|
|
475
|
+
const handleEdit = (e, isKeyDown) => {
|
|
415
476
|
setEditingKey?.(record[rowKey]);
|
|
416
477
|
// setTooltipContent('')
|
|
417
478
|
|
|
479
|
+
handleCellClick?.(rowNumber, record, columnMeta, record[rowKey], record[columnMeta.field ?? '']);
|
|
418
480
|
reset?.();
|
|
419
481
|
|
|
420
482
|
// const formattedRecord = { ...record };
|
|
@@ -424,8 +486,10 @@ const TableBodyCellEdit = props => {
|
|
|
424
486
|
setValue?.(name, value);
|
|
425
487
|
});
|
|
426
488
|
}
|
|
427
|
-
if (
|
|
428
|
-
|
|
489
|
+
if (isKeyDown) {
|
|
490
|
+
if (e.key === 'Enter' || editType === 'date' || e.type === 'dblclick') {} else {
|
|
491
|
+
setValue(columnMeta.field, editType === 'numeric' ? !isNaN(Number(e.key)) ? Number(e.key) : '' : e.key);
|
|
492
|
+
}
|
|
429
493
|
}
|
|
430
494
|
if (editType === 'select') {
|
|
431
495
|
|
|
@@ -590,13 +654,13 @@ const TableBodyCellEdit = props => {
|
|
|
590
654
|
return;
|
|
591
655
|
}
|
|
592
656
|
if (e.key === 'Enter') {
|
|
593
|
-
handleEdit(e);
|
|
657
|
+
handleEdit(e, true);
|
|
594
658
|
return;
|
|
595
659
|
}
|
|
596
660
|
if (e.key.length === 1 && !e.ctrlKey) {
|
|
597
661
|
e.preventDefault();
|
|
598
662
|
e.stopPropagation();
|
|
599
|
-
handleEdit(e);
|
|
663
|
+
handleEdit(e, true);
|
|
600
664
|
// setValue(cell.column.id, editType === 'numeric' ? (!isNaN(Number(e.key)) ? Number(e.key) : '') : e.key)
|
|
601
665
|
}
|
|
602
666
|
}
|
|
@@ -663,8 +727,9 @@ const TableBodyCellEdit = props => {
|
|
|
663
727
|
height: '36px',
|
|
664
728
|
userSelect: 'none',
|
|
665
729
|
width: cell.column.getSize(),
|
|
666
|
-
//
|
|
667
|
-
|
|
730
|
+
// flexBasis: cell.column.getSize(),
|
|
731
|
+
minWidth: cell.column.getSize(),
|
|
732
|
+
maxWidth: cell.column.getSize(),
|
|
668
733
|
...getCommonPinningStyles(cell.column)
|
|
669
734
|
},
|
|
670
735
|
onMouseDown: () => {
|
|
@@ -737,8 +802,8 @@ const TableBodyCellEdit = props => {
|
|
|
737
802
|
display: 'flex',
|
|
738
803
|
height: '36px',
|
|
739
804
|
width: cell.column.getSize(),
|
|
740
|
-
|
|
741
|
-
|
|
805
|
+
minWidth: cell.column.getSize(),
|
|
806
|
+
maxWidth: cell.column.getSize(),
|
|
742
807
|
...getCommonPinningStyles(cell.column)
|
|
743
808
|
}
|
|
744
809
|
}, renderCommand({
|
|
@@ -762,8 +827,8 @@ const TableBodyCellEdit = props => {
|
|
|
762
827
|
display: 'flex',
|
|
763
828
|
height: '36px',
|
|
764
829
|
width: cell.column.getSize(),
|
|
765
|
-
|
|
766
|
-
|
|
830
|
+
minWidth: cell.column.getSize(),
|
|
831
|
+
maxWidth: cell.column.getSize(),
|
|
767
832
|
...getCommonPinningStyles(cell.column)
|
|
768
833
|
}
|
|
769
834
|
}, cell.column.getIndex() === expandIconColumnIndex && isDataTree && /*#__PURE__*/React.createElement("div", {
|
|
@@ -799,8 +864,15 @@ const TableBodyCellEdit = props => {
|
|
|
799
864
|
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-collapsed"
|
|
800
865
|
})) : /*#__PURE__*/React.createElement("span", {
|
|
801
866
|
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-spaced"
|
|
802
|
-
}))), renderSelection({
|
|
803
|
-
cell
|
|
867
|
+
}))), cell.column.id === "selection_column" && renderSelection({
|
|
868
|
+
cell,
|
|
869
|
+
table,
|
|
870
|
+
selectionSettings,
|
|
871
|
+
setIsSelectionChange,
|
|
872
|
+
expanded,
|
|
873
|
+
isDataTree,
|
|
874
|
+
setExpanded,
|
|
875
|
+
expandIconColumnIndex
|
|
804
876
|
}));
|
|
805
877
|
}
|
|
806
878
|
const handleChange = () => {
|
|
@@ -863,8 +935,8 @@ const TableBodyCellEdit = props => {
|
|
|
863
935
|
style: {
|
|
864
936
|
display: 'flex',
|
|
865
937
|
width: cell.column.getSize(),
|
|
866
|
-
|
|
867
|
-
|
|
938
|
+
minWidth: cell.column.getSize(),
|
|
939
|
+
maxWidth: cell.column.getSize(),
|
|
868
940
|
height: '36px',
|
|
869
941
|
...getCommonPinningStyles(cell.column),
|
|
870
942
|
cursor: isPasting ? 'crosshair' : undefined
|
|
@@ -875,6 +947,9 @@ const TableBodyCellEdit = props => {
|
|
|
875
947
|
rowId: cell.row.id,
|
|
876
948
|
colId: cell.column.id
|
|
877
949
|
});
|
|
950
|
+
if (canEdit) {
|
|
951
|
+
handleCellClick?.(rowNumber, record, columnMeta, record[rowKey], record[columnMeta.field ?? '']);
|
|
952
|
+
}
|
|
878
953
|
} else {
|
|
879
954
|
handleMouseDown(cell.row.id, cell.column.id);
|
|
880
955
|
if (editingKey) {
|
|
@@ -40,7 +40,7 @@ export declare function groupArrayByColumns(arr: any[], columns: string[] | unde
|
|
|
40
40
|
export declare const flatColumns2: <RecordType>(columns: ColumnsTable<RecordType>) => ColumnsTable<RecordType>;
|
|
41
41
|
export declare const checkThousandSeparator: (thousandSeparator: string | undefined, decimalSeparator: string | undefined) => string;
|
|
42
42
|
export declare const checkDecimalSeparator: (thousandSeparator: string | undefined, decimalSeparator: string | undefined) => string;
|
|
43
|
-
export declare
|
|
43
|
+
export declare const getFixedFields: <T>(columns: ColumnsTable<T>, type: 'left' | 'right') => string[];
|
|
44
44
|
export declare function areStringArraysEqual(a: string[], b: string[]): boolean;
|
|
45
45
|
export declare const getDefaultOperator: (col: ColumnTable) => FilterOperator;
|
|
46
46
|
export declare function isEqualSet(setA: any, setB: any): boolean;
|
|
@@ -130,5 +130,8 @@ export declare const updateColumns1: (columns: ColumnTable[], includes: string[]
|
|
|
130
130
|
export declare const convertToObj: (arr: any) => {
|
|
131
131
|
[k: string]: any;
|
|
132
132
|
};
|
|
133
|
+
export declare const convertToObjTrue: (arr: any) => {
|
|
134
|
+
[k: string]: any;
|
|
135
|
+
};
|
|
133
136
|
export declare const getDiffent2Array: (a: any[], b: any[]) => any[];
|
|
134
137
|
export declare function isTree(arr: any[]): boolean;
|
|
@@ -42,7 +42,7 @@ export const getCommonPinningStyles = column => {
|
|
|
42
42
|
// opacity: isPinned ? 0.5 : 1,
|
|
43
43
|
opacity: 1,
|
|
44
44
|
position: isPinned ? "sticky" : "relative",
|
|
45
|
-
|
|
45
|
+
width: column.getSize(),
|
|
46
46
|
zIndex: isPinned ? 2 : 0
|
|
47
47
|
// border: '1px solid #e5e7eb',
|
|
48
48
|
// borderTop: 0,
|
|
@@ -305,7 +305,7 @@ export const checkDecimalSeparator = (thousandSeparator, decimalSeparator) => {
|
|
|
305
305
|
return '.';
|
|
306
306
|
}
|
|
307
307
|
};
|
|
308
|
-
export
|
|
308
|
+
export const getFixedFields = (columns, type) => {
|
|
309
309
|
const result = [];
|
|
310
310
|
function traverse(cols) {
|
|
311
311
|
for (const col of cols) {
|
|
@@ -319,7 +319,7 @@ export function getFixedFields(columns, type) {
|
|
|
319
319
|
}
|
|
320
320
|
traverse(columns);
|
|
321
321
|
return result;
|
|
322
|
-
}
|
|
322
|
+
};
|
|
323
323
|
export function areStringArraysEqual(a, b) {
|
|
324
324
|
if (a.length !== b.length) return false;
|
|
325
325
|
const sortedA = [...a].sort();
|
|
@@ -1863,6 +1863,16 @@ export const convertToObj = arr => {
|
|
|
1863
1863
|
|
|
1864
1864
|
return Object.fromEntries(arr.map(key => [key, false]));
|
|
1865
1865
|
};
|
|
1866
|
+
export const convertToObjTrue = arr => {
|
|
1867
|
+
// const result = Object.keys(obj).reduce((acc: any, key) => {
|
|
1868
|
+
// acc[key] = false;
|
|
1869
|
+
// return acc;
|
|
1870
|
+
// }, {});
|
|
1871
|
+
|
|
1872
|
+
// return result
|
|
1873
|
+
|
|
1874
|
+
return Object.fromEntries(arr.map(key => [key, true]));
|
|
1875
|
+
};
|
|
1866
1876
|
export const getDiffent2Array = (a, b) => {
|
|
1867
1877
|
return [...a.filter(x => !b.includes(x)), ...b.filter(x => !a.includes(x))];
|
|
1868
1878
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ColumnDef, ColumnPinningState, ExpandedState, VisibilityState } from '@tanstack/react-table';
|
|
2
2
|
import type { ColumnsTable, Sorter, TableProps } from '../type';
|
|
3
|
-
import type { Dispatch, SetStateAction } from 'react';
|
|
3
|
+
import type { Dispatch, Key, SetStateAction } from 'react';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
type Props<T> = Omit<TableProps<T>, 'columns'> & {
|
|
6
6
|
id: string;
|
|
7
7
|
rowKey: string;
|
|
8
8
|
prefix: string;
|
|
9
9
|
columns: ColumnDef<T>[];
|
|
10
|
-
propsColumns: ColumnsTable
|
|
10
|
+
propsColumns: ColumnsTable<T>;
|
|
11
11
|
columnHidden: VisibilityState;
|
|
12
12
|
expanded: ExpandedState;
|
|
13
13
|
setExpanded: any;
|
|
@@ -20,9 +20,10 @@ type Props<T> = Omit<TableProps<T>, 'columns'> & {
|
|
|
20
20
|
triggerFilter: Dispatch<SetStateAction<any>>;
|
|
21
21
|
triggerSorter: Dispatch<SetStateAction<Sorter[]>>;
|
|
22
22
|
onContextMenu?: (data: T) => (event: any) => void;
|
|
23
|
-
triggerChangeColumns?: (args: any, keys: any) => void;
|
|
23
|
+
triggerChangeColumns?: (args: any, keys: any, type: string) => void;
|
|
24
24
|
windowSize: any;
|
|
25
25
|
isDataTree: boolean;
|
|
26
|
+
mergedSelectedKeys: Key[];
|
|
26
27
|
};
|
|
27
28
|
declare const Grid: <RecordType extends object>(props: Props<RecordType>) => React.JSX.Element;
|
|
28
29
|
export default Grid;
|
|
@@ -17,7 +17,7 @@ import { arrayMove } from '@dnd-kit/sortable';
|
|
|
17
17
|
import React from 'react';
|
|
18
18
|
import TableContainer from "../TableContainer";
|
|
19
19
|
import { OperatorFeature } from "../features/operator";
|
|
20
|
-
import { convertFilters, filterDataByColumns, getAllRowKey } from "../hook/utils";
|
|
20
|
+
import { convertFilters, convertToObjTrue, filterDataByColumns, getAllRowKey } from "../hook/utils";
|
|
21
21
|
import TableContainerEdit from "../TableContainerEdit";
|
|
22
22
|
const Grid = props => {
|
|
23
23
|
const {
|
|
@@ -48,6 +48,7 @@ const Grid = props => {
|
|
|
48
48
|
editAble,
|
|
49
49
|
triggerChangeColumns,
|
|
50
50
|
infiniteScroll,
|
|
51
|
+
mergedSelectedKeys,
|
|
51
52
|
...rest
|
|
52
53
|
} = props;
|
|
53
54
|
const [columnResizeMode] = React.useState('onChange');
|
|
@@ -56,9 +57,14 @@ const Grid = props => {
|
|
|
56
57
|
pageIndex: pagination && pagination.currentPage ? pagination.currentPage - 1 : 0,
|
|
57
58
|
pageSize: pagination && pagination.pageSize ? pagination.pageSize : 20
|
|
58
59
|
});
|
|
59
|
-
|
|
60
|
+
|
|
61
|
+
// const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})
|
|
62
|
+
|
|
63
|
+
// const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(convertToObjTrue(selectionSettings?.selectedRowKeys ?? []))
|
|
64
|
+
const [rowSelection, setRowSelection] = React.useState(convertToObjTrue(mergedSelectedKeys));
|
|
60
65
|
const [grouping, setGrouping] = React.useState([]);
|
|
61
66
|
const [columnSizing, setColumnSizing] = React.useState({});
|
|
67
|
+
const [manualUpdate, setManualUpdate] = React.useState(false);
|
|
62
68
|
// const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>(columnHidden)
|
|
63
69
|
|
|
64
70
|
const [columnFilters, setColumnFilters] = React.useState([]);
|
|
@@ -97,7 +103,7 @@ const Grid = props => {
|
|
|
97
103
|
getSubRows: row => row.children,
|
|
98
104
|
// RowSelection
|
|
99
105
|
enableSubRowSelection: selectionSettings && selectionSettings.mode === 'checkbox' && selectionSettings.type !== 'single',
|
|
100
|
-
enableMultiRowSelection: selectionSettings && selectionSettings.mode === 'checkbox'
|
|
106
|
+
enableMultiRowSelection: selectionSettings && (selectionSettings.mode === 'checkbox' || selectionSettings.type !== 'single'),
|
|
101
107
|
enableRowSelection: true,
|
|
102
108
|
onRowSelectionChange: setRowSelection,
|
|
103
109
|
// RowSelection
|
|
@@ -132,8 +138,24 @@ const Grid = props => {
|
|
|
132
138
|
|
|
133
139
|
// debugTable: true
|
|
134
140
|
});
|
|
141
|
+
React.useEffect(() => {
|
|
142
|
+
if (columnHidden) {
|
|
143
|
+
const abb = table.getVisibleLeafColumns()?.[0];
|
|
144
|
+
if (abb) {
|
|
145
|
+
setColumnSizing({
|
|
146
|
+
"#": abb.getSize()
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}, [columnHidden, table]);
|
|
151
|
+
React.useEffect(() => {
|
|
152
|
+
if (!manualUpdate) {
|
|
153
|
+
setRowSelection(convertToObjTrue(mergedSelectedKeys));
|
|
154
|
+
}
|
|
155
|
+
}, [manualUpdate, mergedSelectedKeys]);
|
|
135
156
|
React.useEffect(() => {
|
|
136
157
|
if (isSelectionChange.isChange) {
|
|
158
|
+
setManualUpdate(true);
|
|
137
159
|
const aa = table.getState().rowSelection;
|
|
138
160
|
const dataTable = table.getRowModel().flatRows;
|
|
139
161
|
const ids = Object.keys(aa);
|
|
@@ -144,6 +166,10 @@ const Grid = props => {
|
|
|
144
166
|
rowData: isSelectionChange.rowData,
|
|
145
167
|
selected: rs
|
|
146
168
|
});
|
|
169
|
+
setIsSelectionChange(prev => ({
|
|
170
|
+
...prev,
|
|
171
|
+
isChange: false
|
|
172
|
+
}));
|
|
147
173
|
}
|
|
148
174
|
}, [isSelectionChange, rowSelected, rowSelection, table]);
|
|
149
175
|
React.useEffect(() => {
|
|
@@ -173,7 +173,7 @@ const TableWrapper = props => {
|
|
|
173
173
|
'ui-rc-table-ping-left': tableContainerRef && (tableContainerRef.current?.scrollLeft ?? 0) > 0
|
|
174
174
|
})
|
|
175
175
|
}, /*#__PURE__*/React.createElement("div", {
|
|
176
|
-
|
|
176
|
+
// id={id}
|
|
177
177
|
ref: tableContainerRef,
|
|
178
178
|
style: {
|
|
179
179
|
overflow: 'auto',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Dispatch, SetStateAction } from 'react';
|
|
2
|
-
import type { ExpandableConfig, IFormat, IWrapSettings, Locale, RangeState, RecordDoubleClickEventArgs, SelectionSettings } from "./type";
|
|
2
|
+
import type { ColumnTable, ExpandableConfig, IFormat, IWrapSettings, Locale, RangeState, RecordDoubleClickEventArgs, SelectionSettings } from "./type";
|
|
3
3
|
import type { SubmitHandler } from "react-hook-form";
|
|
4
4
|
import type { ExpandedState } from '@tanstack/react-table';
|
|
5
5
|
export type IPositionCell = {
|
|
@@ -66,6 +66,7 @@ export interface IContext<T> {
|
|
|
66
66
|
handleAddMulti?: (item: any, n: number, id?: string) => void;
|
|
67
67
|
dataErrors?: any[];
|
|
68
68
|
isDataTree: boolean;
|
|
69
|
+
handleCellClick?: (rowNumber: number, record: T, column: ColumnTable, rowId: string, cellValue: any) => void;
|
|
69
70
|
}
|
|
70
71
|
export declare const TableContext: import("react").Context<IContext<any>>;
|
|
71
72
|
export type ContextCellChange = {
|
|
@@ -57,8 +57,8 @@ const SELECTION_COLUMN = exports.SELECTION_COLUMN = {};
|
|
|
57
57
|
const InternalTable = props => {
|
|
58
58
|
const {
|
|
59
59
|
t,
|
|
60
|
-
|
|
61
|
-
columns,
|
|
60
|
+
columns: propsColumns,
|
|
61
|
+
// columns,
|
|
62
62
|
lang,
|
|
63
63
|
locale,
|
|
64
64
|
dataSource,
|
|
@@ -67,6 +67,7 @@ const InternalTable = props => {
|
|
|
67
67
|
groupAble,
|
|
68
68
|
groupSetting,
|
|
69
69
|
groupColumns,
|
|
70
|
+
selectionSettings,
|
|
70
71
|
// infiniteScroll,
|
|
71
72
|
// wrapSettings,
|
|
72
73
|
// onFilter,
|
|
@@ -132,6 +133,10 @@ const InternalTable = props => {
|
|
|
132
133
|
const [filterStates, setFilterState] = _react.default.useState(null);
|
|
133
134
|
const [sorterStates, setSorterStates] = _react.default.useState([]);
|
|
134
135
|
const [isFullScreen, setIsFullScreen] = _react.default.useState(false);
|
|
136
|
+
const [columns, setColumns] = _react.default.useState([]);
|
|
137
|
+
_react.default.useEffect(() => {
|
|
138
|
+
setColumns(propsColumns);
|
|
139
|
+
}, [propsColumns]);
|
|
135
140
|
const [expanded, setExpanded] = _react.default.useState({});
|
|
136
141
|
const convertData = _react.default.useMemo(() => {
|
|
137
142
|
if (groupAble && groupSetting && groupSetting.client !== false) {
|
|
@@ -166,6 +171,16 @@ const InternalTable = props => {
|
|
|
166
171
|
const [mergedFilterKeys, setMergedFilterKeys] = (0, _useMergedState.default)((0, _utils.getAllRowKey)(convertData), {
|
|
167
172
|
value: undefined
|
|
168
173
|
});
|
|
174
|
+
|
|
175
|
+
// ========================= Keys =========================
|
|
176
|
+
|
|
177
|
+
const {
|
|
178
|
+
selectedRowKeys,
|
|
179
|
+
defaultSelectedRowKeys
|
|
180
|
+
} = selectionSettings ?? {};
|
|
181
|
+
const [mergedSelectedKeys] = (0, _useMergedState.default)(selectedRowKeys || defaultSelectedRowKeys || [], {
|
|
182
|
+
value: selectedRowKeys
|
|
183
|
+
});
|
|
169
184
|
const mergedData = _react.default.useMemo(() => {
|
|
170
185
|
return (0, _utils.filterDataByColumns)(convertData, filterStates, sorterStates, mergedFilterKeys);
|
|
171
186
|
}, [convertData, filterStates, mergedFilterKeys, sorterStates]);
|
|
@@ -175,10 +190,14 @@ const InternalTable = props => {
|
|
|
175
190
|
const [columnsHiddenKeys, setColumnsHiddenKeys] = (0, _useMergedState.default)(undefined, {
|
|
176
191
|
value: undefined
|
|
177
192
|
});
|
|
178
|
-
const triggerChangeColumns = (cols, keys) => {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
193
|
+
const triggerChangeColumns = (cols, keys, type) => {
|
|
194
|
+
if (type === 'cellClick') {
|
|
195
|
+
setColumns(cols);
|
|
196
|
+
} else {
|
|
197
|
+
const aa = (0, _utils.flatColumns2)(columns).map(it => it.field);
|
|
198
|
+
const rsss = (0, _utils.getDiffent2Array)(aa, keys);
|
|
199
|
+
setColumnsHiddenKeys(rsss);
|
|
200
|
+
}
|
|
182
201
|
};
|
|
183
202
|
|
|
184
203
|
// const contextMenuItems = React.useMemo(() => {
|
|
@@ -288,7 +307,9 @@ const InternalTable = props => {
|
|
|
288
307
|
setIsFullScreen: setIsFullScreen,
|
|
289
308
|
windowSize: windowSize,
|
|
290
309
|
height: height,
|
|
291
|
-
isDataTree: isDataTree
|
|
310
|
+
isDataTree: isDataTree,
|
|
311
|
+
selectionSettings: selectionSettings,
|
|
312
|
+
mergedSelectedKeys: mergedSelectedKeys
|
|
292
313
|
})), /*#__PURE__*/_react.default.createElement(_antd.Modal, {
|
|
293
314
|
open: isFullScreen,
|
|
294
315
|
footer: null,
|
|
@@ -320,8 +341,10 @@ const InternalTable = props => {
|
|
|
320
341
|
paddingTop: 40
|
|
321
342
|
}
|
|
322
343
|
}, /*#__PURE__*/_react.default.createElement(_Grid.default, (0, _extends2.default)({}, rest, {
|
|
323
|
-
t: t
|
|
324
|
-
id
|
|
344
|
+
t: t
|
|
345
|
+
// id={isFullScreen ? faker.string.alpha(20) : id}
|
|
346
|
+
,
|
|
347
|
+
id: _faker.faker.string.alpha(20),
|
|
325
348
|
prefix: prefix,
|
|
326
349
|
originData: convertData,
|
|
327
350
|
dataSource: mergedData,
|
|
@@ -352,7 +375,9 @@ const InternalTable = props => {
|
|
|
352
375
|
setIsFullScreen: setIsFullScreen,
|
|
353
376
|
height: windowSize.innerHeight - 70,
|
|
354
377
|
windowSize: windowSize,
|
|
355
|
-
isDataTree: isDataTree
|
|
378
|
+
isDataTree: isDataTree,
|
|
379
|
+
selectionSettings: selectionSettings,
|
|
380
|
+
mergedSelectedKeys: mergedSelectedKeys
|
|
356
381
|
})))));
|
|
357
382
|
};
|
|
358
383
|
var _default = exports.default = InternalTable;
|
|
@@ -123,7 +123,8 @@ const TableContainerEdit = props => {
|
|
|
123
123
|
contextMenuHidden,
|
|
124
124
|
showDefaultContext,
|
|
125
125
|
commandSettings,
|
|
126
|
-
isDataTree
|
|
126
|
+
isDataTree,
|
|
127
|
+
onCellClick
|
|
127
128
|
} = props;
|
|
128
129
|
const containerRef = _react.default.useRef(null);
|
|
129
130
|
const bottomToolbarRef = _react.default.useRef(null);
|
|
@@ -1449,6 +1450,33 @@ const TableContainerEdit = props => {
|
|
|
1449
1450
|
}
|
|
1450
1451
|
contextMenuClick?.(args);
|
|
1451
1452
|
};
|
|
1453
|
+
const handleCellClick = (rowNumber, record, column, rowId, cellValue) => {
|
|
1454
|
+
const cellClickCallback = newOptions => {
|
|
1455
|
+
if (newOptions) {
|
|
1456
|
+
const newElem = {
|
|
1457
|
+
...column,
|
|
1458
|
+
editSelectSettings: {
|
|
1459
|
+
...(column?.editSelectSettings ? {
|
|
1460
|
+
...column?.editSelectSettings
|
|
1461
|
+
} : {}),
|
|
1462
|
+
options: newOptions
|
|
1463
|
+
}
|
|
1464
|
+
};
|
|
1465
|
+
const rrr = (0, _utils.updateArrayByKey)([...columns], newElem, 'field');
|
|
1466
|
+
triggerChangeColumns?.(rrr, 'click');
|
|
1467
|
+
}
|
|
1468
|
+
};
|
|
1469
|
+
if (onCellClick) {
|
|
1470
|
+
onCellClick({
|
|
1471
|
+
index: rowNumber,
|
|
1472
|
+
rowId,
|
|
1473
|
+
cellValue,
|
|
1474
|
+
type: "Editing",
|
|
1475
|
+
field: column.field,
|
|
1476
|
+
rowData: record
|
|
1477
|
+
}, cellClickCallback);
|
|
1478
|
+
}
|
|
1479
|
+
};
|
|
1452
1480
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
1453
1481
|
ref: containerRef,
|
|
1454
1482
|
id: id
|
|
@@ -1561,7 +1589,8 @@ const TableContainerEdit = props => {
|
|
|
1561
1589
|
handleDeleteContent,
|
|
1562
1590
|
handleAddMulti,
|
|
1563
1591
|
dataErrors,
|
|
1564
|
-
windowSize
|
|
1592
|
+
windowSize,
|
|
1593
|
+
handleCellClick
|
|
1565
1594
|
}
|
|
1566
1595
|
}, /*#__PURE__*/_react.default.createElement(_TableWrapper.default, {
|
|
1567
1596
|
contextMenuItems: contextMenuItems,
|
|
@@ -76,16 +76,73 @@ const renderSelection = args => {
|
|
|
76
76
|
const {
|
|
77
77
|
row
|
|
78
78
|
} = args.cell;
|
|
79
|
+
const {
|
|
80
|
+
cell,
|
|
81
|
+
expandIconColumnIndex,
|
|
82
|
+
isDataTree,
|
|
83
|
+
expanded,
|
|
84
|
+
setExpanded
|
|
85
|
+
} = args;
|
|
86
|
+
const {
|
|
87
|
+
selectionSettings,
|
|
88
|
+
setIsSelectionChange
|
|
89
|
+
} = args;
|
|
79
90
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
80
|
-
className: "ui-rc_cell-content",
|
|
81
91
|
style: {
|
|
82
92
|
|
|
83
93
|
// paddingLeft: `${row.depth * 2}rem`,
|
|
84
94
|
}
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
95
|
+
}, cell.column.getIndex() === expandIconColumnIndex && isDataTree && /*#__PURE__*/_react.default.createElement("div", {
|
|
96
|
+
className: "ui-rc-table-row-expand-trigger",
|
|
97
|
+
style: {
|
|
98
|
+
paddingLeft: `${cell.row.depth * 25}px`
|
|
99
|
+
}
|
|
100
|
+
}, /*#__PURE__*/_react.default.createElement("div", null, cell.row.getCanExpand() ? /*#__PURE__*/_react.default.createElement("button", {
|
|
101
|
+
// onClick: row.getToggleExpandedHandler(),
|
|
102
|
+
onClick: () => {
|
|
103
|
+
const keys = Object.keys(expanded);
|
|
104
|
+
// @ts-ignore
|
|
105
|
+
const tmp = {
|
|
106
|
+
...expanded
|
|
107
|
+
};
|
|
108
|
+
if (keys.includes(cell.row.id)) {
|
|
109
|
+
delete tmp[cell.row.id];
|
|
110
|
+
setExpanded(tmp);
|
|
111
|
+
} else {
|
|
112
|
+
setExpanded(old => ({
|
|
113
|
+
...old,
|
|
114
|
+
[cell.row.id]: true
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
style: {
|
|
119
|
+
cursor: "pointer"
|
|
120
|
+
},
|
|
121
|
+
className: "ui-rc-table-row-expand"
|
|
122
|
+
}, cell.row.getIsExpanded() ? /*#__PURE__*/_react.default.createElement("span", {
|
|
123
|
+
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-expanded"
|
|
124
|
+
}) : /*#__PURE__*/_react.default.createElement("span", {
|
|
125
|
+
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-collapsed"
|
|
126
|
+
})) : /*#__PURE__*/_react.default.createElement("span", {
|
|
127
|
+
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-spaced"
|
|
128
|
+
}))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Checkbox.default, {
|
|
129
|
+
checked: row.getIsSelected() || row.getIsAllSubRowsSelected(),
|
|
130
|
+
indeterminate: row.getIsSomeSelected() && selectionSettings && selectionSettings.mode === 'checkbox' && selectionSettings.type !== 'single'
|
|
131
|
+
// indeterminate={row.getIsSomeSelected() }
|
|
132
|
+
,
|
|
133
|
+
onChange: e => {
|
|
134
|
+
row.getToggleSelectedHandler()(e);
|
|
135
|
+
setIsSelectionChange({
|
|
136
|
+
isChange: true,
|
|
137
|
+
type: 'rowSelected',
|
|
138
|
+
rowData: row.original
|
|
139
|
+
});
|
|
140
|
+
// row.toggleSelected()
|
|
141
|
+
|
|
142
|
+
// table.setRowSelection({
|
|
143
|
+
// [row.id]: true
|
|
144
|
+
// })
|
|
145
|
+
}
|
|
89
146
|
})));
|
|
90
147
|
};
|
|
91
148
|
const TableBodyCellEdit = props => {
|
|
@@ -135,7 +192,10 @@ const TableBodyCellEdit = props => {
|
|
|
135
192
|
expanded,
|
|
136
193
|
setExpanded,
|
|
137
194
|
expandable,
|
|
138
|
-
isDataTree
|
|
195
|
+
isDataTree,
|
|
196
|
+
handleCellClick,
|
|
197
|
+
setIsSelectionChange,
|
|
198
|
+
selectionSettings
|
|
139
199
|
} = _react.default.useContext(_useContext.TableContext);
|
|
140
200
|
const expandIconColumnIndex = expandable?.expandIconColumnIndex;
|
|
141
201
|
const record = cell.row.original;
|
|
@@ -418,10 +478,11 @@ const TableBodyCellEdit = props => {
|
|
|
418
478
|
|
|
419
479
|
// setRangePasteState(selectPasteState)
|
|
420
480
|
}
|
|
421
|
-
const handleEdit = e => {
|
|
481
|
+
const handleEdit = (e, isKeyDown) => {
|
|
422
482
|
setEditingKey?.(record[rowKey]);
|
|
423
483
|
// setTooltipContent('')
|
|
424
484
|
|
|
485
|
+
handleCellClick?.(rowNumber, record, columnMeta, record[rowKey], record[columnMeta.field ?? '']);
|
|
425
486
|
reset?.();
|
|
426
487
|
|
|
427
488
|
// const formattedRecord = { ...record };
|
|
@@ -431,8 +492,10 @@ const TableBodyCellEdit = props => {
|
|
|
431
492
|
setValue?.(name, value);
|
|
432
493
|
});
|
|
433
494
|
}
|
|
434
|
-
if (
|
|
435
|
-
|
|
495
|
+
if (isKeyDown) {
|
|
496
|
+
if (e.key === 'Enter' || editType === 'date' || e.type === 'dblclick') {} else {
|
|
497
|
+
setValue(columnMeta.field, editType === 'numeric' ? !isNaN(Number(e.key)) ? Number(e.key) : '' : e.key);
|
|
498
|
+
}
|
|
436
499
|
}
|
|
437
500
|
if (editType === 'select') {
|
|
438
501
|
|
|
@@ -597,13 +660,13 @@ const TableBodyCellEdit = props => {
|
|
|
597
660
|
return;
|
|
598
661
|
}
|
|
599
662
|
if (e.key === 'Enter') {
|
|
600
|
-
handleEdit(e);
|
|
663
|
+
handleEdit(e, true);
|
|
601
664
|
return;
|
|
602
665
|
}
|
|
603
666
|
if (e.key.length === 1 && !e.ctrlKey) {
|
|
604
667
|
e.preventDefault();
|
|
605
668
|
e.stopPropagation();
|
|
606
|
-
handleEdit(e);
|
|
669
|
+
handleEdit(e, true);
|
|
607
670
|
// setValue(cell.column.id, editType === 'numeric' ? (!isNaN(Number(e.key)) ? Number(e.key) : '') : e.key)
|
|
608
671
|
}
|
|
609
672
|
}
|
|
@@ -670,8 +733,9 @@ const TableBodyCellEdit = props => {
|
|
|
670
733
|
height: '36px',
|
|
671
734
|
userSelect: 'none',
|
|
672
735
|
width: cell.column.getSize(),
|
|
673
|
-
//
|
|
674
|
-
|
|
736
|
+
// flexBasis: cell.column.getSize(),
|
|
737
|
+
minWidth: cell.column.getSize(),
|
|
738
|
+
maxWidth: cell.column.getSize(),
|
|
675
739
|
...(0, _utils.getCommonPinningStyles)(cell.column)
|
|
676
740
|
},
|
|
677
741
|
onMouseDown: () => {
|
|
@@ -744,8 +808,8 @@ const TableBodyCellEdit = props => {
|
|
|
744
808
|
display: 'flex',
|
|
745
809
|
height: '36px',
|
|
746
810
|
width: cell.column.getSize(),
|
|
747
|
-
|
|
748
|
-
|
|
811
|
+
minWidth: cell.column.getSize(),
|
|
812
|
+
maxWidth: cell.column.getSize(),
|
|
749
813
|
...(0, _utils.getCommonPinningStyles)(cell.column)
|
|
750
814
|
}
|
|
751
815
|
}, renderCommand({
|
|
@@ -769,8 +833,8 @@ const TableBodyCellEdit = props => {
|
|
|
769
833
|
display: 'flex',
|
|
770
834
|
height: '36px',
|
|
771
835
|
width: cell.column.getSize(),
|
|
772
|
-
|
|
773
|
-
|
|
836
|
+
minWidth: cell.column.getSize(),
|
|
837
|
+
maxWidth: cell.column.getSize(),
|
|
774
838
|
...(0, _utils.getCommonPinningStyles)(cell.column)
|
|
775
839
|
}
|
|
776
840
|
}, cell.column.getIndex() === expandIconColumnIndex && isDataTree && /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -806,8 +870,15 @@ const TableBodyCellEdit = props => {
|
|
|
806
870
|
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-collapsed"
|
|
807
871
|
})) : /*#__PURE__*/_react.default.createElement("span", {
|
|
808
872
|
className: "ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-spaced"
|
|
809
|
-
}))), renderSelection({
|
|
810
|
-
cell
|
|
873
|
+
}))), cell.column.id === "selection_column" && renderSelection({
|
|
874
|
+
cell,
|
|
875
|
+
table,
|
|
876
|
+
selectionSettings,
|
|
877
|
+
setIsSelectionChange,
|
|
878
|
+
expanded,
|
|
879
|
+
isDataTree,
|
|
880
|
+
setExpanded,
|
|
881
|
+
expandIconColumnIndex
|
|
811
882
|
}));
|
|
812
883
|
}
|
|
813
884
|
const handleChange = () => {
|
|
@@ -870,8 +941,8 @@ const TableBodyCellEdit = props => {
|
|
|
870
941
|
style: {
|
|
871
942
|
display: 'flex',
|
|
872
943
|
width: cell.column.getSize(),
|
|
873
|
-
|
|
874
|
-
|
|
944
|
+
minWidth: cell.column.getSize(),
|
|
945
|
+
maxWidth: cell.column.getSize(),
|
|
875
946
|
height: '36px',
|
|
876
947
|
...(0, _utils.getCommonPinningStyles)(cell.column),
|
|
877
948
|
cursor: isPasting ? 'crosshair' : undefined
|
|
@@ -882,6 +953,9 @@ const TableBodyCellEdit = props => {
|
|
|
882
953
|
rowId: cell.row.id,
|
|
883
954
|
colId: cell.column.id
|
|
884
955
|
});
|
|
956
|
+
if (canEdit) {
|
|
957
|
+
handleCellClick?.(rowNumber, record, columnMeta, record[rowKey], record[columnMeta.field ?? '']);
|
|
958
|
+
}
|
|
885
959
|
} else {
|
|
886
960
|
handleMouseDown(cell.row.id, cell.column.id);
|
|
887
961
|
if (editingKey) {
|
|
@@ -40,7 +40,7 @@ export declare function groupArrayByColumns(arr: any[], columns: string[] | unde
|
|
|
40
40
|
export declare const flatColumns2: <RecordType>(columns: ColumnsTable<RecordType>) => ColumnsTable<RecordType>;
|
|
41
41
|
export declare const checkThousandSeparator: (thousandSeparator: string | undefined, decimalSeparator: string | undefined) => string;
|
|
42
42
|
export declare const checkDecimalSeparator: (thousandSeparator: string | undefined, decimalSeparator: string | undefined) => string;
|
|
43
|
-
export declare
|
|
43
|
+
export declare const getFixedFields: <T>(columns: ColumnsTable<T>, type: 'left' | 'right') => string[];
|
|
44
44
|
export declare function areStringArraysEqual(a: string[], b: string[]): boolean;
|
|
45
45
|
export declare const getDefaultOperator: (col: ColumnTable) => FilterOperator;
|
|
46
46
|
export declare function isEqualSet(setA: any, setB: any): boolean;
|
|
@@ -130,5 +130,8 @@ export declare const updateColumns1: (columns: ColumnTable[], includes: string[]
|
|
|
130
130
|
export declare const convertToObj: (arr: any) => {
|
|
131
131
|
[k: string]: any;
|
|
132
132
|
};
|
|
133
|
+
export declare const convertToObjTrue: (arr: any) => {
|
|
134
|
+
[k: string]: any;
|
|
135
|
+
};
|
|
133
136
|
export declare const getDiffent2Array: (a: any[], b: any[]) => any[];
|
|
134
137
|
export declare function isTree(arr: any[]): boolean;
|
|
@@ -18,14 +18,12 @@ exports.convertArrayWithIndent = void 0;
|
|
|
18
18
|
exports.convertColumnsToTreeData = convertColumnsToTreeData;
|
|
19
19
|
exports.convertFilters = exports.convertDayjsToDate = exports.convertDateToDayjs = void 0;
|
|
20
20
|
exports.convertFormat = convertFormat;
|
|
21
|
-
exports.extendsObject = exports.detectSeparators = exports.customWeekStartEndFormat = exports.convertToObj = exports.convertLabelToTitle = void 0;
|
|
21
|
+
exports.extendsObject = exports.detectSeparators = exports.customWeekStartEndFormat = exports.convertToObjTrue = exports.convertToObj = exports.convertLabelToTitle = void 0;
|
|
22
22
|
exports.filterDataByColumns = filterDataByColumns;
|
|
23
23
|
exports.getAllVisibleKeys1 = exports.getAllVisibleKeys = exports.getAllRowKey = exports.genPresets = exports.flattenData = exports.flattenArray = exports.flatColumns2 = exports.findItemByKey = void 0;
|
|
24
24
|
exports.getCellsByPosition = getCellsByPosition;
|
|
25
25
|
exports.getColIdsBetween = getColIdsBetween;
|
|
26
|
-
exports.getEditType = exports.getDiffent2Array = exports.getDefaultValue = exports.getDefaultOperator = exports.getDatepickerFormat = exports.getDateRangeFormat = exports.getCommonPinningStyles = void 0;
|
|
27
|
-
exports.getFixedFields = getFixedFields;
|
|
28
|
-
exports.getFormat = void 0;
|
|
26
|
+
exports.getFormat = exports.getFixedFields = exports.getEditType = exports.getDiffent2Array = exports.getDefaultValue = exports.getDefaultOperator = exports.getDatepickerFormat = exports.getDateRangeFormat = exports.getCommonPinningStyles = void 0;
|
|
29
27
|
exports.getHiddenParentKeys = getHiddenParentKeys;
|
|
30
28
|
exports.getHiddenParentKeys1 = getHiddenParentKeys1;
|
|
31
29
|
exports.getInvisibleColumns = getInvisibleColumns;
|
|
@@ -90,7 +88,7 @@ const getCommonPinningStyles = column => {
|
|
|
90
88
|
// opacity: isPinned ? 0.5 : 1,
|
|
91
89
|
opacity: 1,
|
|
92
90
|
position: isPinned ? "sticky" : "relative",
|
|
93
|
-
|
|
91
|
+
width: column.getSize(),
|
|
94
92
|
zIndex: isPinned ? 2 : 0
|
|
95
93
|
// border: '1px solid #e5e7eb',
|
|
96
94
|
// borderTop: 0,
|
|
@@ -367,7 +365,7 @@ const checkDecimalSeparator = (thousandSeparator, decimalSeparator) => {
|
|
|
367
365
|
}
|
|
368
366
|
};
|
|
369
367
|
exports.checkDecimalSeparator = checkDecimalSeparator;
|
|
370
|
-
|
|
368
|
+
const getFixedFields = (columns, type) => {
|
|
371
369
|
const result = [];
|
|
372
370
|
function traverse(cols) {
|
|
373
371
|
for (const col of cols) {
|
|
@@ -381,7 +379,8 @@ function getFixedFields(columns, type) {
|
|
|
381
379
|
}
|
|
382
380
|
traverse(columns);
|
|
383
381
|
return result;
|
|
384
|
-
}
|
|
382
|
+
};
|
|
383
|
+
exports.getFixedFields = getFixedFields;
|
|
385
384
|
function areStringArraysEqual(a, b) {
|
|
386
385
|
if (a.length !== b.length) return false;
|
|
387
386
|
const sortedA = [...a].sort();
|
|
@@ -1962,6 +1961,17 @@ const convertToObj = arr => {
|
|
|
1962
1961
|
return Object.fromEntries(arr.map(key => [key, false]));
|
|
1963
1962
|
};
|
|
1964
1963
|
exports.convertToObj = convertToObj;
|
|
1964
|
+
const convertToObjTrue = arr => {
|
|
1965
|
+
// const result = Object.keys(obj).reduce((acc: any, key) => {
|
|
1966
|
+
// acc[key] = false;
|
|
1967
|
+
// return acc;
|
|
1968
|
+
// }, {});
|
|
1969
|
+
|
|
1970
|
+
// return result
|
|
1971
|
+
|
|
1972
|
+
return Object.fromEntries(arr.map(key => [key, true]));
|
|
1973
|
+
};
|
|
1974
|
+
exports.convertToObjTrue = convertToObjTrue;
|
|
1965
1975
|
const getDiffent2Array = (a, b) => {
|
|
1966
1976
|
return [...a.filter(x => !b.includes(x)), ...b.filter(x => !a.includes(x))];
|
|
1967
1977
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ColumnDef, ColumnPinningState, ExpandedState, VisibilityState } from '@tanstack/react-table';
|
|
2
2
|
import type { ColumnsTable, Sorter, TableProps } from '../type';
|
|
3
|
-
import type { Dispatch, SetStateAction } from 'react';
|
|
3
|
+
import type { Dispatch, Key, SetStateAction } from 'react';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
type Props<T> = Omit<TableProps<T>, 'columns'> & {
|
|
6
6
|
id: string;
|
|
7
7
|
rowKey: string;
|
|
8
8
|
prefix: string;
|
|
9
9
|
columns: ColumnDef<T>[];
|
|
10
|
-
propsColumns: ColumnsTable
|
|
10
|
+
propsColumns: ColumnsTable<T>;
|
|
11
11
|
columnHidden: VisibilityState;
|
|
12
12
|
expanded: ExpandedState;
|
|
13
13
|
setExpanded: any;
|
|
@@ -20,9 +20,10 @@ type Props<T> = Omit<TableProps<T>, 'columns'> & {
|
|
|
20
20
|
triggerFilter: Dispatch<SetStateAction<any>>;
|
|
21
21
|
triggerSorter: Dispatch<SetStateAction<Sorter[]>>;
|
|
22
22
|
onContextMenu?: (data: T) => (event: any) => void;
|
|
23
|
-
triggerChangeColumns?: (args: any, keys: any) => void;
|
|
23
|
+
triggerChangeColumns?: (args: any, keys: any, type: string) => void;
|
|
24
24
|
windowSize: any;
|
|
25
25
|
isDataTree: boolean;
|
|
26
|
+
mergedSelectedKeys: Key[];
|
|
26
27
|
};
|
|
27
28
|
declare const Grid: <RecordType extends object>(props: Props<RecordType>) => React.JSX.Element;
|
|
28
29
|
export default Grid;
|
|
@@ -50,6 +50,7 @@ const Grid = props => {
|
|
|
50
50
|
editAble,
|
|
51
51
|
triggerChangeColumns,
|
|
52
52
|
infiniteScroll,
|
|
53
|
+
mergedSelectedKeys,
|
|
53
54
|
...rest
|
|
54
55
|
} = props;
|
|
55
56
|
const [columnResizeMode] = _react.default.useState('onChange');
|
|
@@ -58,9 +59,14 @@ const Grid = props => {
|
|
|
58
59
|
pageIndex: pagination && pagination.currentPage ? pagination.currentPage - 1 : 0,
|
|
59
60
|
pageSize: pagination && pagination.pageSize ? pagination.pageSize : 20
|
|
60
61
|
});
|
|
61
|
-
|
|
62
|
+
|
|
63
|
+
// const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})
|
|
64
|
+
|
|
65
|
+
// const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(convertToObjTrue(selectionSettings?.selectedRowKeys ?? []))
|
|
66
|
+
const [rowSelection, setRowSelection] = _react.default.useState((0, _utils.convertToObjTrue)(mergedSelectedKeys));
|
|
62
67
|
const [grouping, setGrouping] = _react.default.useState([]);
|
|
63
68
|
const [columnSizing, setColumnSizing] = _react.default.useState({});
|
|
69
|
+
const [manualUpdate, setManualUpdate] = _react.default.useState(false);
|
|
64
70
|
// const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>(columnHidden)
|
|
65
71
|
|
|
66
72
|
const [columnFilters, setColumnFilters] = _react.default.useState([]);
|
|
@@ -99,7 +105,7 @@ const Grid = props => {
|
|
|
99
105
|
getSubRows: row => row.children,
|
|
100
106
|
// RowSelection
|
|
101
107
|
enableSubRowSelection: selectionSettings && selectionSettings.mode === 'checkbox' && selectionSettings.type !== 'single',
|
|
102
|
-
enableMultiRowSelection: selectionSettings && selectionSettings.mode === 'checkbox'
|
|
108
|
+
enableMultiRowSelection: selectionSettings && (selectionSettings.mode === 'checkbox' || selectionSettings.type !== 'single'),
|
|
103
109
|
enableRowSelection: true,
|
|
104
110
|
onRowSelectionChange: setRowSelection,
|
|
105
111
|
// RowSelection
|
|
@@ -134,8 +140,24 @@ const Grid = props => {
|
|
|
134
140
|
|
|
135
141
|
// debugTable: true
|
|
136
142
|
});
|
|
143
|
+
_react.default.useEffect(() => {
|
|
144
|
+
if (columnHidden) {
|
|
145
|
+
const abb = table.getVisibleLeafColumns()?.[0];
|
|
146
|
+
if (abb) {
|
|
147
|
+
setColumnSizing({
|
|
148
|
+
"#": abb.getSize()
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}, [columnHidden, table]);
|
|
153
|
+
_react.default.useEffect(() => {
|
|
154
|
+
if (!manualUpdate) {
|
|
155
|
+
setRowSelection((0, _utils.convertToObjTrue)(mergedSelectedKeys));
|
|
156
|
+
}
|
|
157
|
+
}, [manualUpdate, mergedSelectedKeys]);
|
|
137
158
|
_react.default.useEffect(() => {
|
|
138
159
|
if (isSelectionChange.isChange) {
|
|
160
|
+
setManualUpdate(true);
|
|
139
161
|
const aa = table.getState().rowSelection;
|
|
140
162
|
const dataTable = table.getRowModel().flatRows;
|
|
141
163
|
const ids = Object.keys(aa);
|
|
@@ -146,6 +168,10 @@ const Grid = props => {
|
|
|
146
168
|
rowData: isSelectionChange.rowData,
|
|
147
169
|
selected: rs
|
|
148
170
|
});
|
|
171
|
+
setIsSelectionChange(prev => ({
|
|
172
|
+
...prev,
|
|
173
|
+
isChange: false
|
|
174
|
+
}));
|
|
149
175
|
}
|
|
150
176
|
}, [isSelectionChange, rowSelected, rowSelection, table]);
|
|
151
177
|
_react.default.useEffect(() => {
|
|
@@ -182,7 +182,7 @@ const TableWrapper = props => {
|
|
|
182
182
|
'ui-rc-table-ping-left': tableContainerRef && (tableContainerRef.current?.scrollLeft ?? 0) > 0
|
|
183
183
|
})
|
|
184
184
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
185
|
-
|
|
185
|
+
// id={id}
|
|
186
186
|
ref: tableContainerRef,
|
|
187
187
|
style: {
|
|
188
188
|
overflow: 'auto',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Dispatch, SetStateAction } from 'react';
|
|
2
|
-
import type { ExpandableConfig, IFormat, IWrapSettings, Locale, RangeState, RecordDoubleClickEventArgs, SelectionSettings } from "./type";
|
|
2
|
+
import type { ColumnTable, ExpandableConfig, IFormat, IWrapSettings, Locale, RangeState, RecordDoubleClickEventArgs, SelectionSettings } from "./type";
|
|
3
3
|
import type { SubmitHandler } from "react-hook-form";
|
|
4
4
|
import type { ExpandedState } from '@tanstack/react-table';
|
|
5
5
|
export type IPositionCell = {
|
|
@@ -66,6 +66,7 @@ export interface IContext<T> {
|
|
|
66
66
|
handleAddMulti?: (item: any, n: number, id?: string) => void;
|
|
67
67
|
dataErrors?: any[];
|
|
68
68
|
isDataTree: boolean;
|
|
69
|
+
handleCellClick?: (rowNumber: number, record: T, column: ColumnTable, rowId: string, cellValue: any) => void;
|
|
69
70
|
}
|
|
70
71
|
export declare const TableContext: import("react").Context<IContext<any>>;
|
|
71
72
|
export type ContextCellChange = {
|