qbs-react-grid 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/css/qbs-react-grid.css +1 -1095
  2. package/dist/css/qbs-react-grid.min.css +1 -1
  3. package/dist/css/qbs-react-grid.min.css.map +1 -1
  4. package/es/Table.js +19 -19
  5. package/es/less/index.less +3 -0
  6. package/es/less/qbs-table.less +89 -22
  7. package/es/qbsTable/QbsTable.js +40 -7
  8. package/es/qbsTable/TableCardList.d.ts +5 -0
  9. package/es/qbsTable/TableCardList.js +564 -0
  10. package/es/qbsTable/Toolbar.js +21 -5
  11. package/es/qbsTable/commontypes.d.ts +12 -0
  12. package/es/qbsTable/utilities/CardComponent.d.ts +14 -0
  13. package/es/qbsTable/utilities/CardComponent.js +83 -0
  14. package/es/qbsTable/utilities/CardMenuDropdown.d.ts +13 -0
  15. package/es/qbsTable/utilities/CardMenuDropdown.js +93 -0
  16. package/es/qbsTable/utilities/SwitchCardColumns.d.ts +2 -0
  17. package/es/qbsTable/utilities/SwitchCardColumns.js +24 -0
  18. package/es/qbsTable/utilities/ToolTip.js +2 -5
  19. package/es/qbsTable/utilities/icons.d.ts +3 -0
  20. package/es/qbsTable/utilities/icons.js +45 -0
  21. package/es/qbsTable/utilities/store.d.ts +2 -0
  22. package/es/qbsTable/utilities/store.js +60 -0
  23. package/es/utils/getTotalByColumns.js +1 -1
  24. package/es/utils/mergeCells.js +1 -1
  25. package/es/utils/useCellDescriptor.js +11 -11
  26. package/es/utils/useClassNames.js +2 -0
  27. package/lib/Table.js +19 -19
  28. package/lib/less/index.less +3 -0
  29. package/lib/less/qbs-table.less +89 -22
  30. package/lib/qbsTable/QbsTable.js +40 -7
  31. package/lib/qbsTable/TableCardList.d.ts +5 -0
  32. package/lib/qbsTable/TableCardList.js +571 -0
  33. package/lib/qbsTable/Toolbar.js +20 -4
  34. package/lib/qbsTable/commontypes.d.ts +12 -0
  35. package/lib/qbsTable/utilities/CardComponent.d.ts +14 -0
  36. package/lib/qbsTable/utilities/CardComponent.js +91 -0
  37. package/lib/qbsTable/utilities/CardMenuDropdown.d.ts +13 -0
  38. package/lib/qbsTable/utilities/CardMenuDropdown.js +100 -0
  39. package/lib/qbsTable/utilities/SwitchCardColumns.d.ts +2 -0
  40. package/lib/qbsTable/utilities/SwitchCardColumns.js +30 -0
  41. package/lib/qbsTable/utilities/ToolTip.js +2 -5
  42. package/lib/qbsTable/utilities/icons.d.ts +3 -0
  43. package/lib/qbsTable/utilities/icons.js +50 -2
  44. package/lib/qbsTable/utilities/store.d.ts +2 -0
  45. package/lib/qbsTable/utilities/store.js +66 -0
  46. package/lib/utils/getTotalByColumns.js +1 -1
  47. package/lib/utils/mergeCells.js +1 -1
  48. package/lib/utils/useCellDescriptor.js +11 -11
  49. package/lib/utils/useClassNames.js +2 -0
  50. package/package.json +11 -6
  51. package/src/less/index.less +3 -0
  52. package/src/less/qbs-table.less +89 -22
  53. package/src/qbsTable/QbsTable.tsx +205 -173
  54. package/src/qbsTable/TableCardList.tsx +629 -0
  55. package/src/qbsTable/Toolbar.tsx +25 -4
  56. package/src/qbsTable/commontypes.ts +12 -0
  57. package/src/qbsTable/utilities/CardComponent.tsx +132 -0
  58. package/src/qbsTable/utilities/CardMenuDropdown.tsx +120 -0
  59. package/src/qbsTable/utilities/SwitchCardColumns.tsx +29 -0
  60. package/src/qbsTable/utilities/ToolTip.tsx +1 -4
  61. package/src/qbsTable/utilities/icons.tsx +51 -0
  62. package/src/qbsTable/utilities/store.ts +61 -0
@@ -11,12 +11,13 @@ import ToolBar from './Toolbar';
11
11
  import ColumToggle from './utilities/ColumShowHide';
12
12
  import debounce from './utilities/debounce';
13
13
  import { deepEqual } from './utilities/deepEqual';
14
+ import NoData from './utilities/empty';
14
15
  import { SettingsIcon } from './utilities/icons';
15
16
 
16
17
  // import 'qbs-react-table/dist/css/qbs-react-grid.css';
17
18
 
18
19
  import '../../dist/css/qbs-react-grid.css';
19
- import NoData from './utilities/empty';
20
+ import CardComponent from './utilities/CardComponent';
20
21
  var CHECKBOX_LINE_HEIGHT = '36px';
21
22
  var COLUMN_WIDTH = 250;
22
23
  var QbsTable = function QbsTable(_ref) {
@@ -91,7 +92,15 @@ var QbsTable = function QbsTable(_ref) {
91
92
  _renderEmpty = _ref.renderEmpty,
92
93
  autoHeight = _ref.autoHeight,
93
94
  emptySubTitle = _ref.emptySubTitle,
94
- emptyTitle = _ref.emptyTitle;
95
+ emptyTitle = _ref.emptyTitle,
96
+ _ref$tableView = _ref.tableView,
97
+ tableView = _ref$tableView === void 0 ? true : _ref$tableView,
98
+ _ref$enableTableToggl = _ref.enableTableToggle,
99
+ enableTableToggle = _ref$enableTableToggl === void 0 ? false : _ref$enableTableToggl,
100
+ _ref$cardColumLimit = _ref.cardColumLimit,
101
+ cardColumLimit = _ref$cardColumLimit === void 0 ? 5 : _ref$cardColumLimit,
102
+ _ref$childDetailHeadi = _ref.childDetailHeading,
103
+ childDetailHeading = _ref$childDetailHeadi === void 0 ? '' : _ref$childDetailHeadi;
95
104
  var _useState = useState(false),
96
105
  loading = _useState[0],
97
106
  setLoading = _useState[1];
@@ -109,6 +118,9 @@ var QbsTable = function QbsTable(_ref) {
109
118
  isOpen = _useState4[0],
110
119
  setIsOpen = _useState4[1];
111
120
  var prevColumns = useRef();
121
+ var _useState5 = useState(tableView),
122
+ tableViewToggle = _useState5[0],
123
+ setTableViewToggle = _useState5[1];
112
124
  var tableBodyRef = useRef(null);
113
125
  var handleSortColumn = useCallback(function (sortColumn, sortType) {
114
126
  setLoading(true);
@@ -131,6 +143,10 @@ var QbsTable = function QbsTable(_ref) {
131
143
  var keys = event.target.checked ? data.map(function (item) {
132
144
  return item.id;
133
145
  }) : [];
146
+ // let updatedKeys = [...keys];
147
+ // if (checkedKeys) {
148
+ // updatedKeys = [...checkedKeys, ...updatedKeys];
149
+ // } TODO => previous bug fix removed this section
134
150
  var updatedKeys = [].concat(keys);
135
151
  setCheckedKeys(updatedKeys);
136
152
  handleChecked(updatedKeys);
@@ -227,7 +243,10 @@ var QbsTable = function QbsTable(_ref) {
227
243
  onSelect: handleClear,
228
244
  handleColumnToggle: handleColumnToggle,
229
245
  dataLength: data === null || data === void 0 ? void 0 : data.length,
230
- searchPlaceholder: searchPlaceholder
246
+ searchPlaceholder: searchPlaceholder,
247
+ setTableViewToggle: setTableViewToggle,
248
+ tableViewToggle: tableViewToggle,
249
+ enableTableToggle: enableTableToggle
231
250
  };
232
251
  var themeToggle = useMemo(function () {
233
252
  return document.getElementById('themeToggle');
@@ -404,7 +423,7 @@ var QbsTable = function QbsTable(_ref) {
404
423
  "data-theme": dataTheme
405
424
  }, toolbar && /*#__PURE__*/React.createElement(ToolBar, toolbarProps), /*#__PURE__*/React.createElement("div", {
406
425
  className: "qbs-table-border-wrap"
407
- }, /*#__PURE__*/React.createElement(Table, {
426
+ }, tableViewToggle ? /*#__PURE__*/React.createElement(Table, {
408
427
  height: autoHeight ? undefined : height,
409
428
  key: tableKey,
410
429
  tableKey: tableKey,
@@ -476,13 +495,13 @@ var QbsTable = function QbsTable(_ref) {
476
495
  }, /*#__PURE__*/React.createElement("input", {
477
496
  type: "checkbox",
478
497
  onChange: handleCheckAll,
479
- id: "checkbox-all",
498
+ id: 'checkbox-all',
480
499
  className: "qbs-table-checkbox-input " + classes.tableCheckBoxClass,
481
500
  checked: (data === null || data === void 0 ? void 0 : data.length) > 0 && data.every(function (item) {
482
501
  return checkedKeys === null || checkedKeys === void 0 ? void 0 : checkedKeys.includes(item.id);
483
502
  })
484
503
  }), /*#__PURE__*/React.createElement("label", {
485
- htmlFor: "checkbox-all"
504
+ htmlFor: 'checkbox-all'
486
505
  }, /*#__PURE__*/React.createElement("svg", {
487
506
  width: "8",
488
507
  height: "6",
@@ -553,7 +572,21 @@ var QbsTable = function QbsTable(_ref) {
553
572
  className: classes.cellClass + " " + classes.actionCellClass,
554
573
  handleMenuActions: handleMenuActions,
555
574
  dataTheme: dataTheme
556
- }))), /*#__PURE__*/React.createElement("div", null, pagination && (data === null || data === void 0 ? void 0 : data.length) > 0 && /*#__PURE__*/React.createElement(Pagination, {
575
+ }))) : /*#__PURE__*/React.createElement("div", {
576
+ className: " p-2"
577
+ }, data.map(function (items) {
578
+ return /*#__PURE__*/React.createElement("div", {
579
+ className: "flex flex-col gap-3 p-2",
580
+ key: items === null || items === void 0 ? void 0 : items.id
581
+ }, /*#__PURE__*/React.createElement(CardComponent, {
582
+ data: items,
583
+ cardColumLimit: cardColumLimit,
584
+ childDetailHeading: childDetailHeading,
585
+ columns: columns,
586
+ tableBodyRef: tableBodyRef,
587
+ actionProps: actionProps
588
+ }));
589
+ })), /*#__PURE__*/React.createElement("div", null, pagination && (data === null || data === void 0 ? void 0 : data.length) > 0 && /*#__PURE__*/React.createElement(Pagination, {
557
590
  paginationProps: paginationProps
558
591
  }))));
559
592
  };
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { QbsTableProps } from './commontypes';
3
+ import '../../dist/css/qbs-react-grid.css';
4
+ declare const QbsTable: React.FC<QbsTableProps>;
5
+ export default QbsTable;
@@ -0,0 +1,564 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import Cell from '../Cell';
4
+ import Column from '../Column';
5
+ import ColumnGroup from '../ColumnGroup';
6
+ import HeaderCell from '../HeaderCell';
7
+ import Pagination from '../Pagination';
8
+ import Table from '../Table';
9
+ import { ActionCell, CheckCell, CustomRowStatus, CustomTableCell, ExpandCell } from './CustomTableCell';
10
+ import ToolBar from './Toolbar';
11
+ import ColumToggle from './utilities/ColumShowHide';
12
+ import debounce from './utilities/debounce';
13
+ import { deepEqual } from './utilities/deepEqual';
14
+ import NoData from './utilities/empty';
15
+ import { SettingsIcon } from './utilities/icons';
16
+
17
+ // import 'qbs-react-table/dist/css/qbs-react-grid.css';
18
+
19
+ import '../../dist/css/qbs-react-grid.css';
20
+ var CHECKBOX_LINE_HEIGHT = '36px';
21
+ var COLUMN_WIDTH = 250;
22
+ var QbsTable = function QbsTable(_ref) {
23
+ var _Object$keys;
24
+ var handleColumnSort = _ref.handleColumnSort,
25
+ data = _ref.data,
26
+ propColumn = _ref.columns,
27
+ sortColumn = _ref.sortColumn,
28
+ sortType = _ref.sortType,
29
+ _ref$selection = _ref.selection,
30
+ selection = _ref$selection === void 0 ? false : _ref$selection,
31
+ onSelect = _ref.onSelect,
32
+ _ref$title = _ref.title,
33
+ title = _ref$title === void 0 ? 'My Tabl' : _ref$title,
34
+ _ref$search = _ref.search,
35
+ search = _ref$search === void 0 ? false : _ref$search,
36
+ asyncSearch = _ref.asyncSearch,
37
+ searchValue = _ref.searchValue,
38
+ onSearch = _ref.onSearch,
39
+ handleSearchValue = _ref.handleSearchValue,
40
+ _ref$paginationProps = _ref.paginationProps,
41
+ paginationProps = _ref$paginationProps === void 0 ? {} : _ref$paginationProps,
42
+ _ref$pagination = _ref.pagination,
43
+ pagination = _ref$pagination === void 0 ? false : _ref$pagination,
44
+ _ref$cellBordered = _ref.cellBordered,
45
+ cellBordered = _ref$cellBordered === void 0 ? false : _ref$cellBordered,
46
+ _ref$bordered = _ref.bordered,
47
+ bordered = _ref$bordered === void 0 ? false : _ref$bordered,
48
+ minHeight = _ref.minHeight,
49
+ _ref$height = _ref.height,
50
+ height = _ref$height === void 0 ? 630 : _ref$height,
51
+ onExpandChange = _ref.onExpandChange,
52
+ wordWrap = _ref.wordWrap,
53
+ _ref$dataRowKey = _ref.dataRowKey,
54
+ dataRowKey = _ref$dataRowKey === void 0 ? 'id' : _ref$dataRowKey,
55
+ defaultExpandAllRows = _ref.defaultExpandAllRows,
56
+ handleRowExpanded = _ref.handleRowExpanded,
57
+ _ref$shouldUpdateScro = _ref.shouldUpdateScroll,
58
+ shouldUpdateScroll = _ref$shouldUpdateScro === void 0 ? false : _ref$shouldUpdateScro,
59
+ _ref$rowExpand = _ref.rowExpand,
60
+ rowExpand = _ref$rowExpand === void 0 ? false : _ref$rowExpand,
61
+ _ref$actionProps = _ref.actionProps,
62
+ actionProps = _ref$actionProps === void 0 ? [] : _ref$actionProps,
63
+ theme = _ref.theme,
64
+ handleMenuActions = _ref.handleMenuActions,
65
+ onRowClick = _ref.onRowClick,
66
+ expandedRowKeys = _ref.expandedRowKeys,
67
+ setExpandedRowKeys = _ref.setExpandedRowKeys,
68
+ primaryFilter = _ref.primaryFilter,
69
+ advancefilter = _ref.advancefilter,
70
+ _ref$classes = _ref.classes,
71
+ classes = _ref$classes === void 0 ? {} : _ref$classes,
72
+ toolbar = _ref.toolbar,
73
+ _ref$columnToggle = _ref.columnToggle,
74
+ columnToggle = _ref$columnToggle === void 0 ? true : _ref$columnToggle,
75
+ handleColumnToggle = _ref.handleColumnToggle,
76
+ tableHeaderActions = _ref.tableHeaderActions,
77
+ isLoading = _ref.isLoading,
78
+ selectedRowActions = _ref.selectedRowActions,
79
+ handleResetColumns = _ref.handleResetColumns,
80
+ selectedRows = _ref.selectedRows,
81
+ _ref$headerHeight = _ref.headerHeight,
82
+ headerHeight = _ref$headerHeight === void 0 ? 40 : _ref$headerHeight,
83
+ tableBodyHeight = _ref.tableBodyHeight,
84
+ customRowStatus = _ref.customRowStatus,
85
+ searchPlaceholder = _ref.searchPlaceholder,
86
+ _ref$rowExpandedHeigh = _ref.rowExpandedHeight,
87
+ rowExpandedHeight = _ref$rowExpandedHeigh === void 0 ? 317 : _ref$rowExpandedHeigh,
88
+ renderSortIcon = _ref.renderSortIcon,
89
+ _ref$tableKey = _ref.tableKey,
90
+ tableKey = _ref$tableKey === void 0 ? 'parent' : _ref$tableKey,
91
+ _renderEmpty = _ref.renderEmpty,
92
+ autoHeight = _ref.autoHeight,
93
+ emptySubTitle = _ref.emptySubTitle,
94
+ emptyTitle = _ref.emptyTitle;
95
+ var _useState = useState(false),
96
+ loading = _useState[0],
97
+ setLoading = _useState[1];
98
+ var _useState2 = useState(propColumn),
99
+ columns = _useState2[0],
100
+ setColumns = _useState2[1];
101
+ var _useState3 = useState([]),
102
+ checkedKeys = _useState3[0],
103
+ setCheckedKeys = _useState3[1];
104
+ var dataTheme = useMemo(function () {
105
+ var _localStorage$getItem;
106
+ return (_localStorage$getItem = localStorage.getItem('theme')) != null ? _localStorage$getItem : theme;
107
+ }, [theme]);
108
+ var _useState4 = useState(false),
109
+ isOpen = _useState4[0],
110
+ setIsOpen = _useState4[1];
111
+ var prevColumns = useRef();
112
+ var tableBodyRef = useRef(null);
113
+ var handleSortColumn = useCallback(function (sortColumn, sortType) {
114
+ setLoading(true);
115
+ setTimeout(function () {
116
+ setLoading(false);
117
+ handleColumnSort === null || handleColumnSort === void 0 ? void 0 : handleColumnSort(sortColumn, sortType);
118
+ }, 500);
119
+ }, [handleColumnSort]);
120
+ useEffect(function () {
121
+ if (selectedRows) {
122
+ setCheckedKeys(selectedRows != null ? selectedRows : []);
123
+ } else {
124
+ setCheckedKeys([]);
125
+ }
126
+ }, [selectedRows]);
127
+ var handleChecked = debounce(function (keys) {
128
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(keys);
129
+ }, 500);
130
+ var handleCheckAll = useCallback(function (event) {
131
+ var keys = event.target.checked ? data.map(function (item) {
132
+ return item.id;
133
+ }) : [];
134
+ // let updatedKeys = [...keys];
135
+ // if (checkedKeys) {
136
+ // updatedKeys = [...checkedKeys, ...updatedKeys];
137
+ // } TODO => previous bug fix removed this section
138
+ var updatedKeys = [].concat(keys);
139
+ setCheckedKeys(updatedKeys);
140
+ handleChecked(updatedKeys);
141
+ }, [data]);
142
+ var handleCheck = useCallback(function (event) {
143
+ var value = event.target.value;
144
+ if (value !== undefined) {
145
+ var updatedKeys = event.target.checked ? [].concat(checkedKeys, [value]) : checkedKeys.filter(function (key) {
146
+ return key !== value;
147
+ });
148
+ setCheckedKeys(updatedKeys);
149
+ handleChecked(updatedKeys);
150
+ }
151
+ }, [checkedKeys]);
152
+ var handleToggle = useCallback(function (columnName) {
153
+ var lastVisibleColumn = null;
154
+ var visibleCount = 0;
155
+ var updatedColumns = columns === null || columns === void 0 ? void 0 : columns.map(function (col) {
156
+ // Toggle visibility for the matched column
157
+ if (col.title === columnName) {
158
+ col = _extends({}, col, {
159
+ isVisible: !col.isVisible
160
+ });
161
+ }
162
+ if (col.isVisible) {
163
+ lastVisibleColumn = col;
164
+ visibleCount++;
165
+ }
166
+ return col;
167
+ });
168
+ if (visibleCount > 0 && lastVisibleColumn) {
169
+ updatedColumns.forEach(function (col) {
170
+ var _lastVisibleColumn;
171
+ if (col.field === ((_lastVisibleColumn = lastVisibleColumn) === null || _lastVisibleColumn === void 0 ? void 0 : _lastVisibleColumn.field) && col.title === lastVisibleColumn.title) {
172
+ col.resizable = false;
173
+ } else {
174
+ col.resizable = true;
175
+ }
176
+ });
177
+ }
178
+ setColumns(updatedColumns);
179
+ }, [columns]);
180
+ var handleColumnWidth = useCallback(function (newWidth, dataKey) {
181
+ if (newWidth === undefined || dataKey === undefined) return;
182
+ setColumns(function (prevColumns) {
183
+ return prevColumns.map(function (column) {
184
+ return column.field === dataKey ? _extends({}, column, {
185
+ colWidth: newWidth
186
+ }) : column;
187
+ });
188
+ });
189
+ }, []);
190
+ useEffect(function () {
191
+ if (wordWrap === 'fit-content') {
192
+ setColumns(function (prevColumns) {
193
+ return prevColumns.map(function (column) {
194
+ return column.field ? _extends({}, column, {
195
+ colWidth: calculateWidth(column.field)
196
+ }) : column;
197
+ });
198
+ });
199
+ }
200
+ }, [wordWrap]);
201
+ var onReorder = useCallback(function (columns) {
202
+ setColumns(columns);
203
+ }, []);
204
+
205
+ // useEffect(() => {
206
+ // }, [columns]);
207
+
208
+ var handleClear = function handleClear(_ref2) {
209
+ setCheckedKeys([]);
210
+ handleChecked([]);
211
+ };
212
+ var toolbarProps = {
213
+ title: title,
214
+ search: search,
215
+ searchValue: searchValue,
216
+ pagination: pagination,
217
+ onSearch: onSearch,
218
+ handleSearchValue: handleSearchValue,
219
+ asyncSearch: asyncSearch,
220
+ paginationProps: paginationProps,
221
+ primaryFilter: primaryFilter,
222
+ advancefilter: advancefilter,
223
+ className: classes === null || classes === void 0 ? void 0 : classes.toolbarClass,
224
+ handleToggle: handleToggle,
225
+ onReorder: onReorder,
226
+ columnToggle: columnToggle,
227
+ columns: columns,
228
+ checkedKeys: checkedKeys,
229
+ tableHeaderActions: tableHeaderActions,
230
+ selectedRowActions: selectedRowActions,
231
+ onSelect: handleClear,
232
+ handleColumnToggle: handleColumnToggle,
233
+ dataLength: data === null || data === void 0 ? void 0 : data.length,
234
+ searchPlaceholder: searchPlaceholder
235
+ };
236
+ var themeToggle = useMemo(function () {
237
+ return document.getElementById('themeToggle');
238
+ }, []);
239
+ useEffect(function () {
240
+ var handleThemeToggle = function handleThemeToggle() {
241
+ if (themeToggle !== null && themeToggle !== void 0 && themeToggle.checked) {
242
+ document.body.setAttribute('data-theme', 'dark');
243
+ } else {
244
+ document.body.removeAttribute('data-theme');
245
+ }
246
+ };
247
+ var handleDOMContentLoaded = function handleDOMContentLoaded() {
248
+ if (localStorage.getItem('theme') === 'dark') {
249
+ document.body.setAttribute('data-theme', 'dark');
250
+ if (themeToggle) {
251
+ themeToggle.checked = true;
252
+ }
253
+ }
254
+ };
255
+ themeToggle === null || themeToggle === void 0 ? void 0 : themeToggle.addEventListener('change', handleThemeToggle);
256
+ document.addEventListener('DOMContentLoaded', handleDOMContentLoaded);
257
+ return function () {
258
+ themeToggle === null || themeToggle === void 0 ? void 0 : themeToggle.removeEventListener('change', handleThemeToggle);
259
+ document.removeEventListener('DOMContentLoaded', handleDOMContentLoaded);
260
+ };
261
+ }, [themeToggle]);
262
+ var handleExpanded = useCallback(function (rowData) {
263
+ console.log(rowData);
264
+ var keyValue = dataRowKey;
265
+ var key = rowData[keyValue];
266
+ var nextExpandedRowKeys = new Set(expandedRowKeys);
267
+ if (nextExpandedRowKeys.has(key)) {
268
+ nextExpandedRowKeys["delete"](key);
269
+ } else {
270
+ nextExpandedRowKeys.add(key);
271
+ }
272
+ setExpandedRowKeys === null || setExpandedRowKeys === void 0 ? void 0 : setExpandedRowKeys(Array.from(nextExpandedRowKeys));
273
+ }, [dataRowKey, expandedRowKeys, setExpandedRowKeys]);
274
+ var calculateWidth = function calculateWidth(str, fontSize, characterWidth) {
275
+ if (fontSize === void 0) {
276
+ fontSize = 8;
277
+ }
278
+ if (characterWidth === void 0) {
279
+ characterWidth = 1;
280
+ }
281
+ var result = findLargestCell(str) * fontSize * characterWidth;
282
+ return result > 60 ? result : 60;
283
+ };
284
+ function findLargestCell(columnTitle) {
285
+ var largestCellLength = 0;
286
+ data.forEach(function (row) {
287
+ if (row[columnTitle] && String(row[columnTitle]).length > largestCellLength) {
288
+ largestCellLength = String(row[columnTitle]).length;
289
+ }
290
+ });
291
+ return largestCellLength;
292
+ }
293
+ var handleColumnsResizable = useCallback(function () {
294
+ var _filteredColumns$leng;
295
+ var filteredColumns = columns === null || columns === void 0 ? void 0 : columns.filter(function (item) {
296
+ return item.isVisible;
297
+ });
298
+ var length = (_filteredColumns$leng = filteredColumns === null || filteredColumns === void 0 ? void 0 : filteredColumns.length) != null ? _filteredColumns$leng : 0;
299
+ var lastVisibleColumn = filteredColumns[length - 1];
300
+ var reColumns = columns === null || columns === void 0 ? void 0 : columns.map(function (item) {
301
+ return (item === null || item === void 0 ? void 0 : item.field) === (lastVisibleColumn === null || lastVisibleColumn === void 0 ? void 0 : lastVisibleColumn.field) ? _extends({}, item, {
302
+ resizable: false
303
+ }) : item;
304
+ });
305
+ setColumns(reColumns);
306
+ }, [columns]);
307
+ useEffect(function () {
308
+ setColumns(propColumn);
309
+ }, [propColumn]);
310
+ useEffect(function () {
311
+ if (!deepEqual(columns, prevColumns.current)) {
312
+ handleColumnsResizable();
313
+ }
314
+ prevColumns.current = columns;
315
+ }, [columns, handleColumnsResizable]);
316
+ var findGrouped = function findGrouped() {
317
+ return columns !== null && columns !== void 0 && columns.find(function (item) {
318
+ return item.grouped;
319
+ }) ? true : false;
320
+ };
321
+ var columnsRendered = useMemo(function () {
322
+ return (columns != null ? columns : []).map(function (_ref3) {
323
+ var title = _ref3.title,
324
+ field = _ref3.field,
325
+ resizable = _ref3.resizable,
326
+ sortable = _ref3.sortable,
327
+ colWidth = _ref3.colWidth,
328
+ align = _ref3.align,
329
+ grouped = _ref3.grouped,
330
+ groupHeader = _ref3.groupHeader,
331
+ fixed = _ref3.fixed,
332
+ children = _ref3.children,
333
+ customCell = _ref3.customCell,
334
+ renderCell = _ref3.renderCell,
335
+ isVisible = _ref3.isVisible,
336
+ link = _ref3.link,
337
+ getPath = _ref3.getPath,
338
+ rowClick = _ref3.rowClick,
339
+ sortKey = _ref3.sortKey,
340
+ type = _ref3.type,
341
+ hideLink = _ref3.hideLink;
342
+ return /*#__PURE__*/React.createElement(React.Fragment, null, isVisible && /*#__PURE__*/React.createElement(React.Fragment, null, grouped ? /*#__PURE__*/React.createElement(ColumnGroup, {
343
+ header: groupHeader,
344
+ fixed: fixed,
345
+ align: align,
346
+ verticalAlign: "middle",
347
+ groupHeaderHeight: 40
348
+ }, /*#__PURE__*/React.createElement(React.Fragment, null, children === null || children === void 0 ? void 0 : children.map(function (child) {
349
+ var _child$colWidth;
350
+ return /*#__PURE__*/React.createElement(Column, {
351
+ key: child.title,
352
+ sortable: child.sortable,
353
+ width: (_child$colWidth = child.colWidth) != null ? _child$colWidth : COLUMN_WIDTH,
354
+ resizable: child.resizable,
355
+ align: child.align,
356
+ onResize: handleColumnWidth,
357
+ fixed: child.fixed
358
+ }, /*#__PURE__*/React.createElement(HeaderCell, {
359
+ dataTheme: dataTheme,
360
+ verticalAlign: 'middle',
361
+ className: " " + classes.headerClass,
362
+ sortKey: child.sortKey,
363
+ renderSortIcon: renderSortIcon
364
+ }, child.title), child.customCell || child.link ? /*#__PURE__*/React.createElement(CustomTableCell, {
365
+ renderCell: child.renderCell,
366
+ dataKey: child.field,
367
+ dataTheme: dataTheme,
368
+ type: child.type,
369
+ path: child.getPath,
370
+ link: child.link
371
+ }) : /*#__PURE__*/React.createElement(Cell, {
372
+ className: " " + classes.cellClass,
373
+ dataKey: child.field,
374
+ dataTheme: dataTheme
375
+ }));
376
+ }))) : /*#__PURE__*/React.createElement(Column, {
377
+ key: title,
378
+ sortable: sortable,
379
+ width: colWidth != null ? colWidth : COLUMN_WIDTH,
380
+ resizable: resizable,
381
+ align: align,
382
+ fixed: fixed,
383
+ onResize: handleColumnWidth
384
+ }, /*#__PURE__*/React.createElement(HeaderCell, {
385
+ dataTheme: dataTheme,
386
+ verticalAlign: findGrouped() ? 'middle' : undefined,
387
+ className: " " + classes.headerClass,
388
+ sortKey: sortKey,
389
+ renderSortIcon: renderSortIcon
390
+ }, title), customCell || link ? /*#__PURE__*/React.createElement(CustomTableCell, {
391
+ renderCell: renderCell,
392
+ dataKey: field,
393
+ rowClick: rowClick,
394
+ type: type,
395
+ hideLink: hideLink,
396
+ path: getPath,
397
+ dataTheme: dataTheme,
398
+ link: link
399
+ }) : /*#__PURE__*/React.createElement(Cell, {
400
+ dataKey: field,
401
+ dataTheme: dataTheme,
402
+ className: " " + classes.cellClass
403
+ }))));
404
+ });
405
+ }, [columns, dataTheme]);
406
+ return /*#__PURE__*/React.createElement("div", {
407
+ className: "qbs-table " + classes.tableContainerClass,
408
+ "data-theme": dataTheme
409
+ }, toolbar && /*#__PURE__*/React.createElement(ToolBar, toolbarProps), /*#__PURE__*/React.createElement("div", {
410
+ className: "qbs-table-border-wrap"
411
+ }, /*#__PURE__*/React.createElement(Table, {
412
+ height: autoHeight ? undefined : height,
413
+ key: tableKey,
414
+ tableKey: tableKey,
415
+ data: data,
416
+ tableBodyRef: tableBodyRef,
417
+ dataTheme: dataTheme,
418
+ wordWrap: wordWrap,
419
+ autoHeight: autoHeight,
420
+ sortColumn: sortColumn,
421
+ style: {
422
+ position: 'relative'
423
+ },
424
+ sortType: sortType,
425
+ onSortColumn: handleSortColumn,
426
+ onRowClick: onRowClick,
427
+ tableBodyHeight: tableBodyHeight,
428
+ cellBordered: cellBordered,
429
+ bordered: bordered,
430
+ renderEmpty: function renderEmpty(info) {
431
+ return _renderEmpty ? _renderEmpty(info) : /*#__PURE__*/React.createElement(NoData, {
432
+ title: emptyTitle != null ? emptyTitle : 'No Data Found',
433
+ subtitle: emptySubTitle
434
+ });
435
+ },
436
+ columns: columns,
437
+ minHeight: minHeight,
438
+ headerHeight: headerHeight,
439
+ rowExpandedHeight: rowExpandedHeight,
440
+ loading: isLoading != null ? isLoading : loading,
441
+ showHeader: true,
442
+ defaultChecked: true,
443
+ expandedRowKeys: expandedRowKeys,
444
+ onExpandChange: onExpandChange,
445
+ rowKey: dataRowKey != null ? dataRowKey : 'id',
446
+ defaultExpandAllRows: defaultExpandAllRows,
447
+ shouldUpdateScroll: shouldUpdateScroll,
448
+ renderRowExpanded: function renderRowExpanded(rowData) {
449
+ return handleRowExpanded === null || handleRowExpanded === void 0 ? void 0 : handleRowExpanded(rowData);
450
+ }
451
+ }, rowExpand && /*#__PURE__*/React.createElement(Column, {
452
+ width: 70,
453
+ align: "center",
454
+ fixed: "left"
455
+ }, /*#__PURE__*/React.createElement(HeaderCell, {
456
+ verticalAlign: findGrouped() ? 'middle' : undefined,
457
+ className: " " + classes.headerlClass,
458
+ renderSortIcon: renderSortIcon
459
+ }, "#"), /*#__PURE__*/React.createElement(ExpandCell, {
460
+ dataKey: dataRowKey,
461
+ expandedRowKeys: expandedRowKeys,
462
+ onChange: handleExpanded
463
+ })), selection && /*#__PURE__*/React.createElement(Column, {
464
+ width: 50,
465
+ align: "center",
466
+ fixed: "left"
467
+ }, /*#__PURE__*/React.createElement(HeaderCell, {
468
+ style: {
469
+ padding: 0
470
+ },
471
+ verticalAlign: findGrouped() ? 'middle' : undefined,
472
+ dataTheme: dataTheme,
473
+ renderSortIcon: renderSortIcon,
474
+ className: "qbs-checkbox-border-none " + classes.headerlClass
475
+ }, /*#__PURE__*/React.createElement("div", {
476
+ style: {
477
+ lineHeight: CHECKBOX_LINE_HEIGHT
478
+ },
479
+ className: "qbs-table-checkbox " + classes.selectionCell
480
+ }, /*#__PURE__*/React.createElement("input", {
481
+ type: "checkbox",
482
+ onChange: handleCheckAll,
483
+ id: 'checkbox-all',
484
+ className: "qbs-table-checkbox-input " + classes.tableCheckBoxClass,
485
+ checked: (data === null || data === void 0 ? void 0 : data.length) > 0 && data.every(function (item) {
486
+ return checkedKeys === null || checkedKeys === void 0 ? void 0 : checkedKeys.includes(item.id);
487
+ })
488
+ }), /*#__PURE__*/React.createElement("label", {
489
+ htmlFor: 'checkbox-all'
490
+ }, /*#__PURE__*/React.createElement("svg", {
491
+ width: "8",
492
+ height: "6",
493
+ viewBox: "0 0 8 6",
494
+ fill: "none",
495
+ xmlns: "http://www.w3.org/2000/svg"
496
+ }, /*#__PURE__*/React.createElement("path", {
497
+ d: "M0 3.21739L2.89883 6L8 1.06994L6.89494 0L2.89883 3.86768L1.09728 2.14745L0 3.21739Z",
498
+ fill: "white"
499
+ }))))), /*#__PURE__*/React.createElement(CheckCell, {
500
+ dataKey: "id",
501
+ checkedKeys: checkedKeys,
502
+ className: "" + classes.tableCheckBoxClass,
503
+ onChange: handleCheck,
504
+ dataTheme: dataTheme
505
+ })), customRowStatus && ((_Object$keys = Object.keys(customRowStatus)) === null || _Object$keys === void 0 ? void 0 : _Object$keys.length) > 0 && /*#__PURE__*/React.createElement(Column, {
506
+ width: 50,
507
+ align: "center",
508
+ fixed: "left"
509
+ }, /*#__PURE__*/React.createElement(HeaderCell, {
510
+ verticalAlign: findGrouped() ? 'middle' : undefined,
511
+ className: " " + classes.headerlClass,
512
+ renderSortIcon: renderSortIcon
513
+ }, ' '), /*#__PURE__*/React.createElement(CustomRowStatus, {
514
+ getIcon: customRowStatus.getIcon,
515
+ dataKey: customRowStatus.field,
516
+ rowClick: customRowStatus.onClick,
517
+ path: customRowStatus.getPath,
518
+ link: customRowStatus.link,
519
+ getToolTip: customRowStatus.getToolTip
520
+ })), columnsRendered, !actionProps || (actionProps === null || actionProps === void 0 ? void 0 : actionProps.length) === 0 && columnToggle && /*#__PURE__*/React.createElement(Column, {
521
+ width: 40,
522
+ fixed: "right"
523
+ }, /*#__PURE__*/React.createElement(HeaderCell, {
524
+ verticalAlign: findGrouped() ? 'middle' : undefined,
525
+ className: " " + classes.headerlClass,
526
+ dataTheme: dataTheme,
527
+ renderSortIcon: renderSortIcon
528
+ }, /*#__PURE__*/React.createElement(ColumToggle, {
529
+ columns: columns,
530
+ onToggle: handleToggle,
531
+ onReorder: onReorder,
532
+ isOpen: isOpen,
533
+ tableHeight: height,
534
+ setIsOpen: setIsOpen,
535
+ handleResetColumns: handleResetColumns,
536
+ handleColumnToggle: handleColumnToggle
537
+ })), /*#__PURE__*/React.createElement(Cell, null)), actionProps && (actionProps === null || actionProps === void 0 ? void 0 : actionProps.length) > 0 && /*#__PURE__*/React.createElement(Column, {
538
+ width: 40,
539
+ fixed: "right"
540
+ }, /*#__PURE__*/React.createElement(HeaderCell, {
541
+ verticalAlign: findGrouped() ? 'middle' : undefined,
542
+ className: " " + classes.headerlClass,
543
+ dataTheme: dataTheme,
544
+ renderSortIcon: renderSortIcon
545
+ }, !columnToggle ? /*#__PURE__*/React.createElement(SettingsIcon, null) : /*#__PURE__*/React.createElement(ColumToggle, {
546
+ columns: columns,
547
+ onToggle: handleToggle,
548
+ tableHeight: height,
549
+ onReorder: onReorder,
550
+ isOpen: isOpen,
551
+ setIsOpen: setIsOpen,
552
+ handleResetColumns: handleResetColumns,
553
+ handleColumnToggle: handleColumnToggle
554
+ })), /*#__PURE__*/React.createElement(ActionCell, {
555
+ tableBodyRef: tableBodyRef,
556
+ actionProps: actionProps,
557
+ className: classes.cellClass + " " + classes.actionCellClass,
558
+ handleMenuActions: handleMenuActions,
559
+ dataTheme: dataTheme
560
+ }))), /*#__PURE__*/React.createElement("div", null, pagination && (data === null || data === void 0 ? void 0 : data.length) > 0 && /*#__PURE__*/React.createElement(Pagination, {
561
+ paginationProps: paginationProps
562
+ }))));
563
+ };
564
+ export default QbsTable;