qbs-react-grid 1.1.10 → 1.1.12

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.
@@ -2,11 +2,12 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  var _excluded = ["rowData", "onChange", "checkedKeys", "dataKey", "dataTheme"],
4
4
  _excluded2 = ["rowData", "dataKey", "expandedRowKeys", "onChange"],
5
- _excluded3 = ["rowData", "renderCell", "toolTip", "dataKey", "onChange", "rowClick", "type", "link"];
5
+ _excluded3 = ["rowData", "renderCell", "toolTip", "dataKey", "onChange", "rowClick", "type", "path", "link"];
6
6
  import React from 'react';
7
7
  import Cell from '../Cell';
8
8
  import { handleCellFormat } from './utilities/handleFormatCell';
9
9
  import MenuDropDown from './utilities/menuDropDown';
10
+ import { Link } from 'react-router-dom';
10
11
  var CHECKBOX_LINE_HEIGHT = '36px';
11
12
  export var CheckCell = /*#__PURE__*/React.memo(function (_ref) {
12
13
  var rowData = _ref.rowData,
@@ -72,7 +73,7 @@ export var ExpandCell = /*#__PURE__*/React.memo(function (_ref3) {
72
73
  }) ? '-' : '+'));
73
74
  });
74
75
  export var CustomTableCell = /*#__PURE__*/React.memo(function (_ref4) {
75
- var _renderCell, _renderCell2;
76
+ var _renderCell, _renderCell2, _renderCell3;
76
77
  var rowData = _ref4.rowData,
77
78
  renderCell = _ref4.renderCell,
78
79
  toolTip = _ref4.toolTip,
@@ -80,14 +81,18 @@ export var CustomTableCell = /*#__PURE__*/React.memo(function (_ref4) {
80
81
  onChange = _ref4.onChange,
81
82
  rowClick = _ref4.rowClick,
82
83
  type = _ref4.type,
84
+ path = _ref4.path,
83
85
  link = _ref4.link,
84
86
  props = _objectWithoutPropertiesLoose(_ref4, _excluded3);
85
87
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Cell, _extends({}, props, {
86
88
  dataKey: dataKey
87
- }), link ? /*#__PURE__*/React.createElement("a", {
89
+ }), link && !path ? /*#__PURE__*/React.createElement("a", {
88
90
  onClick: function onClick() {
89
91
  return rowClick === null || rowClick === void 0 ? void 0 : rowClick(rowData);
90
92
  },
91
93
  className: "qbs-table-row-link"
92
- }, renderCell ? (_renderCell = renderCell(rowData)) === null || _renderCell === void 0 ? void 0 : _renderCell.cell : handleCellFormat(rowData[dataKey], type)) : /*#__PURE__*/React.createElement(React.Fragment, null, renderCell ? (_renderCell2 = renderCell(rowData)) === null || _renderCell2 === void 0 ? void 0 : _renderCell2.cell : handleCellFormat(rowData[dataKey], type))));
94
+ }, renderCell ? (_renderCell = renderCell(rowData)) === null || _renderCell === void 0 ? void 0 : _renderCell.cell : handleCellFormat(rowData[dataKey], type)) : path ? /*#__PURE__*/React.createElement(Link, {
95
+ to: path,
96
+ className: "qbs-table-row-link"
97
+ }, renderCell ? (_renderCell2 = renderCell(rowData)) === null || _renderCell2 === void 0 ? void 0 : _renderCell2.cell : handleCellFormat(rowData[dataKey], type)) : /*#__PURE__*/React.createElement(React.Fragment, null, renderCell ? (_renderCell3 = renderCell(rowData)) === null || _renderCell3 === void 0 ? void 0 : _renderCell3.cell : handleCellFormat(rowData[dataKey], type))));
93
98
  });
@@ -129,17 +129,33 @@ var QbsTable = function QbsTable(_ref) {
129
129
  }
130
130
  }, [checkedKeys]);
131
131
  var handleToggle = useCallback(function (columnName) {
132
- setColumns(function (cols) {
133
- return cols.map(function (col) {
134
- return col.title === columnName ? _extends({}, col, {
132
+ var lastVisibleColumn = null;
133
+ var visibleCount = 0;
134
+ var updatedColumns = columns === null || columns === void 0 ? void 0 : columns.map(function (col) {
135
+ // Toggle visibility for the matched column
136
+ if (col.title === columnName) {
137
+ col = _extends({}, col, {
135
138
  isVisible: !col.isVisible
136
- }) : col;
137
- });
139
+ });
140
+ }
141
+ if (col.isVisible) {
142
+ lastVisibleColumn = col;
143
+ visibleCount++;
144
+ }
145
+ return col;
138
146
  });
139
- setTimeout(function () {
140
- handleColumnsResizable();
141
- }, 500);
142
- }, []);
147
+ if (visibleCount > 0 && lastVisibleColumn) {
148
+ updatedColumns.forEach(function (col) {
149
+ var _lastVisibleColumn;
150
+ if (col.field === ((_lastVisibleColumn = lastVisibleColumn) === null || _lastVisibleColumn === void 0 ? void 0 : _lastVisibleColumn.field)) {
151
+ col.resizable = false;
152
+ } else {
153
+ col.resizable = true;
154
+ }
155
+ });
156
+ }
157
+ setColumns(updatedColumns);
158
+ }, [columns]);
143
159
  var handleColumnWidth = useCallback(function (newWidth, dataKey) {
144
160
  if (newWidth === undefined || dataKey === undefined) return;
145
161
  setColumns(function (prevColumns) {
@@ -295,6 +311,7 @@ var QbsTable = function QbsTable(_ref) {
295
311
  renderCell = _ref3.renderCell,
296
312
  isVisible = _ref3.isVisible,
297
313
  link = _ref3.link,
314
+ path = _ref3.path,
298
315
  rowClick = _ref3.rowClick,
299
316
  sortKey = _ref3.sortKey,
300
317
  type = _ref3.type;
@@ -319,11 +336,12 @@ var QbsTable = function QbsTable(_ref) {
319
336
  verticalAlign: 'middle',
320
337
  className: " " + classes.headerClass,
321
338
  sortKey: child.sortKey
322
- }, child.title), customCell || child.link ? /*#__PURE__*/React.createElement(CustomTableCell, {
339
+ }, child.title), child.customCell || child.link ? /*#__PURE__*/React.createElement(CustomTableCell, {
323
340
  renderCell: child.renderCell,
324
341
  dataKey: child.field,
325
342
  dataTheme: dataTheme,
326
343
  type: child.type,
344
+ path: child.path,
327
345
  link: child.link
328
346
  }) : /*#__PURE__*/React.createElement(Cell, {
329
347
  className: " " + classes.cellClass,
@@ -348,6 +366,7 @@ var QbsTable = function QbsTable(_ref) {
348
366
  dataKey: field,
349
367
  rowClick: rowClick,
350
368
  type: type,
369
+ path: path,
351
370
  dataTheme: dataTheme,
352
371
  link: link
353
372
  }) : /*#__PURE__*/React.createElement(Cell, {
@@ -18,6 +18,7 @@ export interface ColumnBase {
18
18
  rowClick?: (rowData: any) => void;
19
19
  sortKey?: string;
20
20
  type?: string;
21
+ path?: string;
21
22
  }
22
23
  export interface QbsColumnProps extends ColumnBase {
23
24
  grouped?: boolean;
@@ -9,9 +9,10 @@ var _react = _interopRequireDefault(require("react"));
9
9
  var _Cell = _interopRequireDefault(require("../Cell"));
10
10
  var _handleFormatCell = require("./utilities/handleFormatCell");
11
11
  var _menuDropDown = _interopRequireDefault(require("./utilities/menuDropDown"));
12
+ var _reactRouterDom = require("react-router-dom");
12
13
  var _excluded = ["rowData", "onChange", "checkedKeys", "dataKey", "dataTheme"],
13
14
  _excluded2 = ["rowData", "dataKey", "expandedRowKeys", "onChange"],
14
- _excluded3 = ["rowData", "renderCell", "toolTip", "dataKey", "onChange", "rowClick", "type", "link"];
15
+ _excluded3 = ["rowData", "renderCell", "toolTip", "dataKey", "onChange", "rowClick", "type", "path", "link"];
15
16
  var CHECKBOX_LINE_HEIGHT = '36px';
16
17
  var CheckCell = /*#__PURE__*/_react["default"].memo(function (_ref) {
17
18
  var rowData = _ref.rowData,
@@ -80,7 +81,7 @@ var ExpandCell = /*#__PURE__*/_react["default"].memo(function (_ref3) {
80
81
  });
81
82
  exports.ExpandCell = ExpandCell;
82
83
  var CustomTableCell = /*#__PURE__*/_react["default"].memo(function (_ref4) {
83
- var _renderCell, _renderCell2;
84
+ var _renderCell, _renderCell2, _renderCell3;
84
85
  var rowData = _ref4.rowData,
85
86
  renderCell = _ref4.renderCell,
86
87
  toolTip = _ref4.toolTip,
@@ -88,15 +89,19 @@ var CustomTableCell = /*#__PURE__*/_react["default"].memo(function (_ref4) {
88
89
  onChange = _ref4.onChange,
89
90
  rowClick = _ref4.rowClick,
90
91
  type = _ref4.type,
92
+ path = _ref4.path,
91
93
  link = _ref4.link,
92
94
  props = (0, _objectWithoutPropertiesLoose2["default"])(_ref4, _excluded3);
93
95
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Cell["default"], (0, _extends2["default"])({}, props, {
94
96
  dataKey: dataKey
95
- }), link ? /*#__PURE__*/_react["default"].createElement("a", {
97
+ }), link && !path ? /*#__PURE__*/_react["default"].createElement("a", {
96
98
  onClick: function onClick() {
97
99
  return rowClick === null || rowClick === void 0 ? void 0 : rowClick(rowData);
98
100
  },
99
101
  className: "qbs-table-row-link"
100
- }, renderCell ? (_renderCell = renderCell(rowData)) === null || _renderCell === void 0 ? void 0 : _renderCell.cell : (0, _handleFormatCell.handleCellFormat)(rowData[dataKey], type)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, renderCell ? (_renderCell2 = renderCell(rowData)) === null || _renderCell2 === void 0 ? void 0 : _renderCell2.cell : (0, _handleFormatCell.handleCellFormat)(rowData[dataKey], type))));
102
+ }, renderCell ? (_renderCell = renderCell(rowData)) === null || _renderCell === void 0 ? void 0 : _renderCell.cell : (0, _handleFormatCell.handleCellFormat)(rowData[dataKey], type)) : path ? /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Link, {
103
+ to: path,
104
+ className: "qbs-table-row-link"
105
+ }, renderCell ? (_renderCell2 = renderCell(rowData)) === null || _renderCell2 === void 0 ? void 0 : _renderCell2.cell : (0, _handleFormatCell.handleCellFormat)(rowData[dataKey], type)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, renderCell ? (_renderCell3 = renderCell(rowData)) === null || _renderCell3 === void 0 ? void 0 : _renderCell3.cell : (0, _handleFormatCell.handleCellFormat)(rowData[dataKey], type))));
101
106
  });
102
107
  exports.CustomTableCell = CustomTableCell;
@@ -136,17 +136,33 @@ var QbsTable = function QbsTable(_ref) {
136
136
  }
137
137
  }, [checkedKeys]);
138
138
  var handleToggle = (0, _react.useCallback)(function (columnName) {
139
- setColumns(function (cols) {
140
- return cols.map(function (col) {
141
- return col.title === columnName ? (0, _extends2["default"])({}, col, {
139
+ var lastVisibleColumn = null;
140
+ var visibleCount = 0;
141
+ var updatedColumns = columns === null || columns === void 0 ? void 0 : columns.map(function (col) {
142
+ // Toggle visibility for the matched column
143
+ if (col.title === columnName) {
144
+ col = (0, _extends2["default"])({}, col, {
142
145
  isVisible: !col.isVisible
143
- }) : col;
144
- });
146
+ });
147
+ }
148
+ if (col.isVisible) {
149
+ lastVisibleColumn = col;
150
+ visibleCount++;
151
+ }
152
+ return col;
145
153
  });
146
- setTimeout(function () {
147
- handleColumnsResizable();
148
- }, 500);
149
- }, []);
154
+ if (visibleCount > 0 && lastVisibleColumn) {
155
+ updatedColumns.forEach(function (col) {
156
+ var _lastVisibleColumn;
157
+ if (col.field === ((_lastVisibleColumn = lastVisibleColumn) === null || _lastVisibleColumn === void 0 ? void 0 : _lastVisibleColumn.field)) {
158
+ col.resizable = false;
159
+ } else {
160
+ col.resizable = true;
161
+ }
162
+ });
163
+ }
164
+ setColumns(updatedColumns);
165
+ }, [columns]);
150
166
  var handleColumnWidth = (0, _react.useCallback)(function (newWidth, dataKey) {
151
167
  if (newWidth === undefined || dataKey === undefined) return;
152
168
  setColumns(function (prevColumns) {
@@ -302,6 +318,7 @@ var QbsTable = function QbsTable(_ref) {
302
318
  renderCell = _ref3.renderCell,
303
319
  isVisible = _ref3.isVisible,
304
320
  link = _ref3.link,
321
+ path = _ref3.path,
305
322
  rowClick = _ref3.rowClick,
306
323
  sortKey = _ref3.sortKey,
307
324
  type = _ref3.type;
@@ -326,11 +343,12 @@ var QbsTable = function QbsTable(_ref) {
326
343
  verticalAlign: 'middle',
327
344
  className: " " + classes.headerClass,
328
345
  sortKey: child.sortKey
329
- }, child.title), customCell || child.link ? /*#__PURE__*/_react["default"].createElement(_CustomTableCell.CustomTableCell, {
346
+ }, child.title), child.customCell || child.link ? /*#__PURE__*/_react["default"].createElement(_CustomTableCell.CustomTableCell, {
330
347
  renderCell: child.renderCell,
331
348
  dataKey: child.field,
332
349
  dataTheme: dataTheme,
333
350
  type: child.type,
351
+ path: child.path,
334
352
  link: child.link
335
353
  }) : /*#__PURE__*/_react["default"].createElement(_Cell["default"], {
336
354
  className: " " + classes.cellClass,
@@ -355,6 +373,7 @@ var QbsTable = function QbsTable(_ref) {
355
373
  dataKey: field,
356
374
  rowClick: rowClick,
357
375
  type: type,
376
+ path: path,
358
377
  dataTheme: dataTheme,
359
378
  link: link
360
379
  }) : /*#__PURE__*/_react["default"].createElement(_Cell["default"], {
@@ -18,6 +18,7 @@ export interface ColumnBase {
18
18
  rowClick?: (rowData: any) => void;
19
19
  sortKey?: string;
20
20
  type?: string;
21
+ path?: string;
21
22
  }
22
23
  export interface QbsColumnProps extends ColumnBase {
23
24
  grouped?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qbs-react-grid",
3
- "version": "1.1.10",
3
+ "version": "1.1.12",
4
4
  "description": "A React table component",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -44,13 +44,16 @@
44
44
  "classnames": "^2.3.1",
45
45
  "dom-lib": "^3.1.3",
46
46
  "lodash": "^4.17.21",
47
- "react-is": "^17.0.2"
47
+ "react-is": "^17.0.2",
48
+ "react-router-dom": "^6.21.0"
48
49
  },
49
50
  "peerDependencies": {
50
51
  "prop-types": "^15.7.1",
51
52
  "react": "^18.2.0",
52
53
  "react-dom": "^18.2.0",
53
- "rsuite": "^5.21.0"
54
+ "rsuite": "^5.21.0",
55
+ "react-router-dom": "^6.21.0"
56
+
54
57
  },
55
58
  "devDependencies": {
56
59
  "@babel/cli": "^7.12.8",
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import Cell from '../Cell';
4
4
  import { handleCellFormat } from './utilities/handleFormatCell';
5
5
  import MenuDropDown from './utilities/menuDropDown';
6
-
6
+ import { Link } from 'react-router-dom';
7
7
  const CHECKBOX_LINE_HEIGHT = '36px';
8
8
  export const CheckCell: React.FC<any> = React.memo(
9
9
  ({ rowData, onChange, checkedKeys, dataKey, dataTheme, ...props }) => (
@@ -61,14 +61,18 @@ export const ExpandCell: React.FC<any> = React.memo(
61
61
  )
62
62
  );
63
63
  export const CustomTableCell: React.FC<any> = React.memo(
64
- ({ rowData, renderCell, toolTip, dataKey, onChange, rowClick, type, link, ...props }) => {
64
+ ({ rowData, renderCell, toolTip, dataKey, onChange, rowClick, type, path, link, ...props }) => {
65
65
  return (
66
66
  <>
67
67
  <Cell {...props} dataKey={dataKey}>
68
- {link ? (
68
+ {link && !path ? (
69
69
  <a onClick={() => rowClick?.(rowData)} className="qbs-table-row-link">
70
70
  {renderCell ? renderCell(rowData)?.cell : handleCellFormat(rowData[dataKey], type)}
71
71
  </a>
72
+ ) : path ? (
73
+ <Link to={path} className="qbs-table-row-link">
74
+ {renderCell ? renderCell(rowData)?.cell : handleCellFormat(rowData[dataKey], type)}
75
+ </Link>
72
76
  ) : (
73
77
  <>{renderCell ? renderCell(rowData)?.cell : handleCellFormat(rowData[dataKey], type)}</>
74
78
  )}
@@ -118,14 +118,39 @@ const QbsTable: React.FC<QbsTableProps> = ({
118
118
 
119
119
  [checkedKeys]
120
120
  );
121
- const handleToggle = useCallback((columnName: string) => {
122
- setColumns(cols =>
123
- cols.map(col => (col.title === columnName ? { ...col, isVisible: !col.isVisible } : col))
124
- );
125
- setTimeout(() => {
126
- handleColumnsResizable();
127
- }, 500);
128
- }, []);
121
+
122
+ const handleToggle = useCallback(
123
+ (columnName: string) => {
124
+ let lastVisibleColumn: any = null;
125
+ let visibleCount = 0;
126
+
127
+ const updatedColumns = columns?.map(col => {
128
+ // Toggle visibility for the matched column
129
+ if (col.title === columnName) {
130
+ col = { ...col, isVisible: !col.isVisible };
131
+ }
132
+ if (col.isVisible) {
133
+ lastVisibleColumn = col;
134
+ visibleCount++;
135
+ }
136
+
137
+ return col;
138
+ });
139
+
140
+ if (visibleCount > 0 && lastVisibleColumn) {
141
+ updatedColumns.forEach(col => {
142
+ if (col.field === lastVisibleColumn?.field) {
143
+ col.resizable = false;
144
+ } else {
145
+ col.resizable = true;
146
+ }
147
+ });
148
+ }
149
+
150
+ setColumns(updatedColumns);
151
+ },
152
+ [columns]
153
+ );
129
154
 
130
155
  const handleColumnWidth = useCallback((newWidth?: number, dataKey?: any) => {
131
156
  if (newWidth === undefined || dataKey === undefined) return;
@@ -283,6 +308,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
283
308
  renderCell,
284
309
  isVisible,
285
310
  link,
311
+ path,
286
312
  rowClick,
287
313
  sortKey,
288
314
  type
@@ -317,12 +343,13 @@ const QbsTable: React.FC<QbsTableProps> = ({
317
343
  >
318
344
  {child.title}
319
345
  </HeaderCell>
320
- {customCell || child.link ? (
346
+ {child.customCell || child.link ? (
321
347
  <CustomTableCell
322
348
  renderCell={child.renderCell}
323
349
  dataKey={child.field}
324
350
  dataTheme={dataTheme}
325
351
  type={child.type}
352
+ path={child.path}
326
353
  link={child.link}
327
354
  />
328
355
  ) : (
@@ -360,6 +387,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
360
387
  dataKey={field}
361
388
  rowClick={rowClick}
362
389
  type={type}
390
+ path={path}
363
391
  dataTheme={dataTheme}
364
392
  link={link}
365
393
  />
@@ -19,6 +19,7 @@ export interface ColumnBase {
19
19
  rowClick?: (rowData: any) => void;
20
20
  sortKey?: string;
21
21
  type?: string;
22
+ path?: string;
22
23
  }
23
24
 
24
25
  export interface QbsColumnProps extends ColumnBase {
@@ -99,7 +100,7 @@ export interface QbsTableProps {
99
100
  handleColumnToggle?: (columns: QbsColumnProps[]) => void;
100
101
  handleResetColumns?: () => void;
101
102
  headerHeight?: number;
102
- tableBodyHeight?:string
103
+ tableBodyHeight?: string;
103
104
  }
104
105
 
105
106
  export interface QbsTableToolbarProps {