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.
@@ -51,8 +51,8 @@ export const SELECTION_COLUMN = {};
51
51
  const InternalTable = props => {
52
52
  const {
53
53
  t,
54
- // columns: propsColumns,
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
- const aa = flatColumns2(columns).map(it => it.field);
174
- const rsss = getDiffent2Array(aa, keys);
175
- setColumnsHiddenKeys(rsss);
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: isFullScreen ? faker.string.alpha(20) : 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
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Checkbox, {
79
- checked: row.getIsSelected(),
80
- indeterminate: row.getIsSomeSelected(),
81
- onChange: row.getToggleSelectedHandler()
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 (e.key === 'Enter' || editType === 'date' || e.type === 'dblclick') {} else {
428
- setValue(columnMeta.field, editType === 'numeric' ? !isNaN(Number(e.key)) ? Number(e.key) : '' : e.key);
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
- // minWidth: cell.column.getSize(),
667
- // maxWidth: cell.column.getSize(),
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
- // minWidth: cell.column.getSize(),
741
- // maxWidth: cell.column.getSize(),
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
- // minWidth: cell.column.getSize(),
766
- // maxWidth: cell.column.getSize(),
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
- // minWidth: cell.column.getSize(),
867
- // maxWidth: cell.column.getSize(),
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 function getFixedFields(columns: ColumnTable[], type: 'left' | 'right'): string[];
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
- // width: column.getSize(),
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 function getFixedFields(columns, type) {
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
- const [rowSelection, setRowSelection] = React.useState({});
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' && selectionSettings.type !== 'single',
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
- id: id,
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 = {
@@ -16,5 +16,6 @@ export const TableContext = /*#__PURE__*/createContext({
16
16
  setIsSelectionChange: () => {},
17
17
  setSorterChange: () => {},
18
18
  setFilterChange: () => {},
19
- setExpanded: () => {}
19
+ setExpanded: () => {},
20
+ handleCellClick: () => {}
20
21
  });
@@ -57,8 +57,8 @@ const SELECTION_COLUMN = exports.SELECTION_COLUMN = {};
57
57
  const InternalTable = props => {
58
58
  const {
59
59
  t,
60
- // columns: propsColumns,
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
- const aa = (0, _utils.flatColumns2)(columns).map(it => it.field);
180
- const rsss = (0, _utils.getDiffent2Array)(aa, keys);
181
- setColumnsHiddenKeys(rsss);
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: isFullScreen ? _faker.faker.string.alpha(20) : 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
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Checkbox.default, {
86
- checked: row.getIsSelected(),
87
- indeterminate: row.getIsSomeSelected(),
88
- onChange: row.getToggleSelectedHandler()
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 (e.key === 'Enter' || editType === 'date' || e.type === 'dblclick') {} else {
435
- setValue(columnMeta.field, editType === 'numeric' ? !isNaN(Number(e.key)) ? Number(e.key) : '' : e.key);
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
- // minWidth: cell.column.getSize(),
674
- // maxWidth: cell.column.getSize(),
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
- // minWidth: cell.column.getSize(),
748
- // maxWidth: cell.column.getSize(),
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
- // minWidth: cell.column.getSize(),
773
- // maxWidth: cell.column.getSize(),
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
- // minWidth: cell.column.getSize(),
874
- // maxWidth: cell.column.getSize(),
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 function getFixedFields(columns: ColumnTable[], type: 'left' | 'right'): string[];
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
- // width: column.getSize(),
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
- function getFixedFields(columns, type) {
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
- const [rowSelection, setRowSelection] = _react.default.useState({});
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' && selectionSettings.type !== 'single',
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
- id: id,
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 = {
@@ -22,5 +22,6 @@ const TableContext = exports.TableContext = /*#__PURE__*/(0, _react.createContex
22
22
  setIsSelectionChange: () => {},
23
23
  setSorterChange: () => {},
24
24
  setFilterChange: () => {},
25
- setExpanded: () => {}
25
+ setExpanded: () => {},
26
+ handleCellClick: () => {}
26
27
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-grid-template",
3
- "version": "1.7.34",
3
+ "version": "1.7.36",
4
4
  "description": "es-grid-template",
5
5
  "keywords": [
6
6
  "react",