qbs-react-grid 2.0.12 → 2.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -55,14 +55,16 @@ export var ActionCell = /*#__PURE__*/React.memo(function (_ref2) {
55
55
  actionProps = _ref2.actionProps,
56
56
  tableBodyRef = _ref2.tableBodyRef,
57
57
  rowIndex = _ref2.rowIndex,
58
- dropType = _ref2.dropType;
58
+ dropType = _ref2.dropType,
59
+ wheelWrapperRef = _ref2.wheelWrapperRef;
59
60
  return /*#__PURE__*/React.createElement("div", null, dropType == 'vertical' ? /*#__PURE__*/React.createElement(VerticalMenuDropdown, {
60
61
  tableBodyRef: tableBodyRef,
61
62
  actionDropDown: actionProps,
62
63
  rowData: rowData,
63
64
  dataTheme: dataTheme,
64
65
  rowIndex: rowIndex,
65
- handleMenuActions: handleMenuActions
66
+ handleMenuActions: handleMenuActions,
67
+ wheelWrapperRef: wheelWrapperRef
66
68
  }) : /*#__PURE__*/React.createElement(MenuDropDown, {
67
69
  tableBodyRef: tableBodyRef,
68
70
  actionDropDown: actionProps,
@@ -124,7 +124,8 @@ var QbsTable = function QbsTable(_ref) {
124
124
  setRowViewToggle = _ref.setRowViewToggle,
125
125
  _ref$dropType = _ref.dropType,
126
126
  dropType = _ref$dropType === void 0 ? 'horizondal' : _ref$dropType,
127
- rowHeight = _ref.rowHeight;
127
+ rowHeight = _ref.rowHeight,
128
+ isFullScreen = _ref.isFullScreen;
128
129
  var _useState = useState(false),
129
130
  loading = _useState[0],
130
131
  setLoading = _useState[1];
@@ -291,7 +292,8 @@ var QbsTable = function QbsTable(_ref) {
291
292
  defaultRowView: defaultRowView,
292
293
  fullWidthView: fullWidthView,
293
294
  setTableFullView: setTableFullView,
294
- setRowViewToggle: setRowViewToggle
295
+ setRowViewToggle: setRowViewToggle,
296
+ isFullScreen: isFullScreen
295
297
  };
296
298
  var themeToggle = useMemo(function () {
297
299
  return document.getElementById('themeToggle');
@@ -588,7 +590,6 @@ var QbsTable = function QbsTable(_ref) {
588
590
  var scrollTop = wrapper.scrollTop,
589
591
  clientHeight = wrapper.clientHeight;
590
592
  var scrollHeight = Math.abs(scroll) + (height - headerHeight);
591
-
592
593
  // Trigger fetch when user scrolls within 100px of bottom
593
594
  if (scrollTop + clientHeight >= scrollHeight - 70) {
594
595
  loadMoreData === null || loadMoreData === void 0 ? void 0 : loadMoreData(); // fetch next page here
@@ -753,6 +754,7 @@ var QbsTable = function QbsTable(_ref) {
753
754
  })), /*#__PURE__*/React.createElement(ActionCell, {
754
755
  tableBodyRef: tableBodyRef,
755
756
  dropType: dropType,
757
+ wheelWrapperRef: wheelWrapperRef,
756
758
  actionProps: actionProps,
757
759
  className: classes.cellClass + " " + classes.actionCellClass,
758
760
  handleMenuActions: handleMenuActions,
@@ -35,7 +35,9 @@ var ToolBar = function ToolBar(_ref) {
35
35
  _ref$fullWidthView = _ref.fullWidthView,
36
36
  fullWidthView = _ref$fullWidthView === void 0 ? false : _ref$fullWidthView,
37
37
  setTableFullView = _ref.setTableFullView,
38
- setRowViewToggle = _ref.setRowViewToggle;
38
+ setRowViewToggle = _ref.setRowViewToggle,
39
+ _ref$isFullScreen = _ref.isFullScreen,
40
+ isFullScreen = _ref$isFullScreen === void 0 ? false : _ref$isFullScreen;
39
41
  var debouncedOnSearch = useCallback(debounce(onSearch != null ? onSearch : function () {}, 1000), [onSearch]);
40
42
  var _useState = useState(searchValue),
41
43
  searchParam = _useState[0],
@@ -106,9 +108,9 @@ var ToolBar = function ToolBar(_ref) {
106
108
  d: "M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 0 1-.659 1.591l-5.432 5.432a2.25 2.25 0 0 0-.659 1.591v2.927a2.25 2.25 0 0 1-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 0 0-.659-1.591L3.659 7.409A2.25 2.25 0 0 1 3 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0 1 12 3Z"
107
109
  }))), tableHeaderActions, /*#__PURE__*/React.createElement("div", {
108
110
  className: " pr-1 cursor-pointer relative table_custom_ctions "
109
- }, rowViewToggle && /*#__PURE__*/React.createElement("div", {
111
+ }, (rowViewToggle || isFullScreen) && /*#__PURE__*/React.createElement("div", {
110
112
  className: "flex gap-2 qbs-row-switch-cntainer"
111
- }, /*#__PURE__*/React.createElement("div", {
113
+ }, rowViewToggle && /*#__PURE__*/React.createElement("div", {
112
114
  className: "flex gap-2 table_cell_style"
113
115
  }, /*#__PURE__*/React.createElement(TooltipComponent, {
114
116
  tableBodyRef: toolbarRef,
@@ -128,7 +130,7 @@ var ToolBar = function ToolBar(_ref) {
128
130
  }
129
131
  }, /*#__PURE__*/React.createElement(ContentView, {
130
132
  className: "" + (!defaultRowView ? 'active' : '')
131
- })))), /*#__PURE__*/React.createElement("div", {
133
+ })))), isFullScreen && /*#__PURE__*/React.createElement("div", {
132
134
  className: " table_full_width"
133
135
  }, /*#__PURE__*/React.createElement(TooltipComponent, {
134
136
  tableBodyRef: toolbarRef,
@@ -139,6 +139,7 @@ export interface QbsTableProps {
139
139
  setRowViewToggle?: (value: boolean) => void;
140
140
  dropType?: 'horizondal' | 'vertical';
141
141
  rowHeight?: number;
142
+ isFullScreen?: boolean;
142
143
  }
143
144
  export interface QbsTableToolbarProps {
144
145
  title?: string;
@@ -179,5 +180,6 @@ export interface QbsTableToolbarProps {
179
180
  fullWidthView?: boolean;
180
181
  setTableFullView?: (value: boolean) => void;
181
182
  setRowViewToggle?: (value: boolean) => void;
183
+ isFullScreen?: boolean;
182
184
  }
183
185
  export {};
@@ -7,6 +7,7 @@ type Props = {
7
7
  dataTheme?: string;
8
8
  tableBodyRef: React.RefObject<HTMLDivElement>;
9
9
  rowIndex?: number;
10
+ wheelWrapperRef?: React.RefObject<HTMLDivElement>;
10
11
  };
11
12
  declare const VerticalMenuDropdown: React.FC<Props>;
12
13
  export default VerticalMenuDropdown;
@@ -1,3 +1,6 @@
1
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
1
4
  import React, { useEffect, useRef, useState } from 'react';
2
5
  import ReactDOM from 'react-dom';
3
6
  import { ThreeDotIcon } from './icons';
@@ -25,11 +28,40 @@ var VerticalMenuDropdown = function VerticalMenuDropdown(_ref) {
25
28
  setOpenMenu(false);
26
29
  }
27
30
  };
31
+ var handleScroll = function handleScroll() {
32
+ setOpenMenu(false);
33
+ };
28
34
  document.addEventListener('click', handleClickOutside);
35
+ window.addEventListener('scroll', handleScroll, true);
36
+ // Use capture phase to catch all scrolls
37
+
29
38
  return function () {
30
39
  document.removeEventListener('click', handleClickOutside);
40
+ window.removeEventListener('scroll', handleScroll, true);
31
41
  };
32
42
  }, []);
43
+ useEffect(function () {
44
+ var handleStyleChange = function handleStyleChange() {
45
+ setOpenMenu(false); // Close the dropdown
46
+ };
47
+ var scrollbarHandle = document.querySelector('.rs-table-scrollbar-handle');
48
+ if (!scrollbarHandle) return;
49
+ var observer = new MutationObserver(function (mutations) {
50
+ for (var _iterator = _createForOfIteratorHelperLoose(mutations), _step; !(_step = _iterator()).done;) {
51
+ var mutation = _step.value;
52
+ if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
53
+ handleStyleChange();
54
+ }
55
+ }
56
+ });
57
+ observer.observe(scrollbarHandle, {
58
+ attributes: true,
59
+ attributeFilter: ['style']
60
+ });
61
+ return function () {
62
+ observer.disconnect();
63
+ };
64
+ }, [openMenu]);
33
65
  var handleMenuItemClick = function handleMenuItemClick(slug) {
34
66
  var _slug$action;
35
67
  handleMenuActions === null || handleMenuActions === void 0 ? void 0 : handleMenuActions(slug, rowData);
@@ -63,14 +63,16 @@ var ActionCell = /*#__PURE__*/_react["default"].memo(function (_ref2) {
63
63
  actionProps = _ref2.actionProps,
64
64
  tableBodyRef = _ref2.tableBodyRef,
65
65
  rowIndex = _ref2.rowIndex,
66
- dropType = _ref2.dropType;
66
+ dropType = _ref2.dropType,
67
+ wheelWrapperRef = _ref2.wheelWrapperRef;
67
68
  return /*#__PURE__*/_react["default"].createElement("div", null, dropType == 'vertical' ? /*#__PURE__*/_react["default"].createElement(_VerticalDropDownMenu["default"], {
68
69
  tableBodyRef: tableBodyRef,
69
70
  actionDropDown: actionProps,
70
71
  rowData: rowData,
71
72
  dataTheme: dataTheme,
72
73
  rowIndex: rowIndex,
73
- handleMenuActions: handleMenuActions
74
+ handleMenuActions: handleMenuActions,
75
+ wheelWrapperRef: wheelWrapperRef
74
76
  }) : /*#__PURE__*/_react["default"].createElement(_menuDropDown["default"], {
75
77
  tableBodyRef: tableBodyRef,
76
78
  actionDropDown: actionProps,
@@ -130,7 +130,8 @@ var QbsTable = function QbsTable(_ref) {
130
130
  setRowViewToggle = _ref.setRowViewToggle,
131
131
  _ref$dropType = _ref.dropType,
132
132
  dropType = _ref$dropType === void 0 ? 'horizondal' : _ref$dropType,
133
- rowHeight = _ref.rowHeight;
133
+ rowHeight = _ref.rowHeight,
134
+ isFullScreen = _ref.isFullScreen;
134
135
  var _useState = (0, _react.useState)(false),
135
136
  loading = _useState[0],
136
137
  setLoading = _useState[1];
@@ -297,7 +298,8 @@ var QbsTable = function QbsTable(_ref) {
297
298
  defaultRowView: defaultRowView,
298
299
  fullWidthView: fullWidthView,
299
300
  setTableFullView: setTableFullView,
300
- setRowViewToggle: setRowViewToggle
301
+ setRowViewToggle: setRowViewToggle,
302
+ isFullScreen: isFullScreen
301
303
  };
302
304
  var themeToggle = (0, _react.useMemo)(function () {
303
305
  return document.getElementById('themeToggle');
@@ -594,7 +596,6 @@ var QbsTable = function QbsTable(_ref) {
594
596
  var scrollTop = wrapper.scrollTop,
595
597
  clientHeight = wrapper.clientHeight;
596
598
  var scrollHeight = Math.abs(scroll) + (height - headerHeight);
597
-
598
599
  // Trigger fetch when user scrolls within 100px of bottom
599
600
  if (scrollTop + clientHeight >= scrollHeight - 70) {
600
601
  loadMoreData === null || loadMoreData === void 0 ? void 0 : loadMoreData(); // fetch next page here
@@ -759,6 +760,7 @@ var QbsTable = function QbsTable(_ref) {
759
760
  })), /*#__PURE__*/_react["default"].createElement(_CustomTableCell.ActionCell, {
760
761
  tableBodyRef: tableBodyRef,
761
762
  dropType: dropType,
763
+ wheelWrapperRef: wheelWrapperRef,
762
764
  actionProps: actionProps,
763
765
  className: classes.cellClass + " " + classes.actionCellClass,
764
766
  handleMenuActions: handleMenuActions,
@@ -42,7 +42,9 @@ var ToolBar = function ToolBar(_ref) {
42
42
  _ref$fullWidthView = _ref.fullWidthView,
43
43
  fullWidthView = _ref$fullWidthView === void 0 ? false : _ref$fullWidthView,
44
44
  setTableFullView = _ref.setTableFullView,
45
- setRowViewToggle = _ref.setRowViewToggle;
45
+ setRowViewToggle = _ref.setRowViewToggle,
46
+ _ref$isFullScreen = _ref.isFullScreen,
47
+ isFullScreen = _ref$isFullScreen === void 0 ? false : _ref$isFullScreen;
46
48
  var debouncedOnSearch = (0, _react.useCallback)((0, _debounce["default"])(onSearch != null ? onSearch : function () {}, 1000), [onSearch]);
47
49
  var _useState = (0, _react.useState)(searchValue),
48
50
  searchParam = _useState[0],
@@ -113,9 +115,9 @@ var ToolBar = function ToolBar(_ref) {
113
115
  d: "M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 0 1-.659 1.591l-5.432 5.432a2.25 2.25 0 0 0-.659 1.591v2.927a2.25 2.25 0 0 1-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 0 0-.659-1.591L3.659 7.409A2.25 2.25 0 0 1 3 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0 1 12 3Z"
114
116
  }))), tableHeaderActions, /*#__PURE__*/_react["default"].createElement("div", {
115
117
  className: " pr-1 cursor-pointer relative table_custom_ctions "
116
- }, rowViewToggle && /*#__PURE__*/_react["default"].createElement("div", {
118
+ }, (rowViewToggle || isFullScreen) && /*#__PURE__*/_react["default"].createElement("div", {
117
119
  className: "flex gap-2 qbs-row-switch-cntainer"
118
- }, /*#__PURE__*/_react["default"].createElement("div", {
120
+ }, rowViewToggle && /*#__PURE__*/_react["default"].createElement("div", {
119
121
  className: "flex gap-2 table_cell_style"
120
122
  }, /*#__PURE__*/_react["default"].createElement(_ToolTip["default"], {
121
123
  tableBodyRef: toolbarRef,
@@ -135,7 +137,7 @@ var ToolBar = function ToolBar(_ref) {
135
137
  }
136
138
  }, /*#__PURE__*/_react["default"].createElement(_icons.ContentView, {
137
139
  className: "" + (!defaultRowView ? 'active' : '')
138
- })))), /*#__PURE__*/_react["default"].createElement("div", {
140
+ })))), isFullScreen && /*#__PURE__*/_react["default"].createElement("div", {
139
141
  className: " table_full_width"
140
142
  }, /*#__PURE__*/_react["default"].createElement(_ToolTip["default"], {
141
143
  tableBodyRef: toolbarRef,
@@ -139,6 +139,7 @@ export interface QbsTableProps {
139
139
  setRowViewToggle?: (value: boolean) => void;
140
140
  dropType?: 'horizondal' | 'vertical';
141
141
  rowHeight?: number;
142
+ isFullScreen?: boolean;
142
143
  }
143
144
  export interface QbsTableToolbarProps {
144
145
  title?: string;
@@ -179,5 +180,6 @@ export interface QbsTableToolbarProps {
179
180
  fullWidthView?: boolean;
180
181
  setTableFullView?: (value: boolean) => void;
181
182
  setRowViewToggle?: (value: boolean) => void;
183
+ isFullScreen?: boolean;
182
184
  }
183
185
  export {};
@@ -7,6 +7,7 @@ type Props = {
7
7
  dataTheme?: string;
8
8
  tableBodyRef: React.RefObject<HTMLDivElement>;
9
9
  rowIndex?: number;
10
+ wheelWrapperRef?: React.RefObject<HTMLDivElement>;
10
11
  };
11
12
  declare const VerticalMenuDropdown: React.FC<Props>;
12
13
  export default VerticalMenuDropdown;
@@ -9,6 +9,9 @@ var _icons = require("./icons");
9
9
  var _ToolTip = _interopRequireDefault(require("./ToolTip"));
10
10
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
11
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
15
  var VerticalMenuDropdown = function VerticalMenuDropdown(_ref) {
13
16
  var actionDropDown = _ref.actionDropDown,
14
17
  handleMenuActions = _ref.handleMenuActions,
@@ -32,11 +35,40 @@ var VerticalMenuDropdown = function VerticalMenuDropdown(_ref) {
32
35
  setOpenMenu(false);
33
36
  }
34
37
  };
38
+ var handleScroll = function handleScroll() {
39
+ setOpenMenu(false);
40
+ };
35
41
  document.addEventListener('click', handleClickOutside);
42
+ window.addEventListener('scroll', handleScroll, true);
43
+ // Use capture phase to catch all scrolls
44
+
36
45
  return function () {
37
46
  document.removeEventListener('click', handleClickOutside);
47
+ window.removeEventListener('scroll', handleScroll, true);
38
48
  };
39
49
  }, []);
50
+ (0, _react.useEffect)(function () {
51
+ var handleStyleChange = function handleStyleChange() {
52
+ setOpenMenu(false); // Close the dropdown
53
+ };
54
+ var scrollbarHandle = document.querySelector('.rs-table-scrollbar-handle');
55
+ if (!scrollbarHandle) return;
56
+ var observer = new MutationObserver(function (mutations) {
57
+ for (var _iterator = _createForOfIteratorHelperLoose(mutations), _step; !(_step = _iterator()).done;) {
58
+ var mutation = _step.value;
59
+ if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
60
+ handleStyleChange();
61
+ }
62
+ }
63
+ });
64
+ observer.observe(scrollbarHandle, {
65
+ attributes: true,
66
+ attributeFilter: ['style']
67
+ });
68
+ return function () {
69
+ observer.disconnect();
70
+ };
71
+ }, [openMenu]);
40
72
  var handleMenuItemClick = function handleMenuItemClick(slug) {
41
73
  var _slug$action;
42
74
  handleMenuActions === null || handleMenuActions === void 0 ? void 0 : handleMenuActions(slug, rowData);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qbs-react-grid",
3
- "version": "2.0.12",
3
+ "version": "2.0.13",
4
4
  "description": "A React table component",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -38,7 +38,16 @@ export const CheckCell: React.FC<any> = React.memo(
38
38
  )
39
39
  );
40
40
  export const ActionCell: React.FC<any> = React.memo(
41
- ({ rowData, handleMenuActions, dataTheme, actionProps, tableBodyRef, rowIndex, dropType }) => {
41
+ ({
42
+ rowData,
43
+ handleMenuActions,
44
+ dataTheme,
45
+ actionProps,
46
+ tableBodyRef,
47
+ rowIndex,
48
+ dropType,
49
+ wheelWrapperRef
50
+ }) => {
42
51
  return (
43
52
  <div>
44
53
  {dropType == 'vertical' ? (
@@ -49,6 +58,7 @@ export const ActionCell: React.FC<any> = React.memo(
49
58
  dataTheme={dataTheme}
50
59
  rowIndex={rowIndex}
51
60
  handleMenuActions={handleMenuActions}
61
+ wheelWrapperRef={wheelWrapperRef}
52
62
  />
53
63
  ) : (
54
64
  <MenuDropDown
@@ -104,7 +104,8 @@ const QbsTable: React.FC<QbsTableProps> = ({
104
104
  setTableFullView,
105
105
  setRowViewToggle,
106
106
  dropType = 'horizondal',
107
- rowHeight
107
+ rowHeight,
108
+ isFullScreen
108
109
  }) => {
109
110
  const [loading, setLoading] = useState(false);
110
111
  const [columns, setColumns] = useState(propColumn);
@@ -270,7 +271,8 @@ const QbsTable: React.FC<QbsTableProps> = ({
270
271
  defaultRowView: defaultRowView,
271
272
  fullWidthView: fullWidthView,
272
273
  setTableFullView: setTableFullView,
273
- setRowViewToggle: setRowViewToggle
274
+ setRowViewToggle: setRowViewToggle,
275
+ isFullScreen: isFullScreen
274
276
  };
275
277
  const themeToggle = useMemo(() => document.getElementById('themeToggle') as HTMLInputElement, []);
276
278
 
@@ -599,7 +601,6 @@ const QbsTable: React.FC<QbsTableProps> = ({
599
601
 
600
602
  const { scrollTop, clientHeight } = wrapper;
601
603
  const scrollHeight = Math.abs(scroll) + (height - headerHeight);
602
-
603
604
  // Trigger fetch when user scrolls within 100px of bottom
604
605
  if (scrollTop + clientHeight >= scrollHeight - 70) {
605
606
  loadMoreData?.(); // fetch next page here
@@ -791,6 +792,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
791
792
  <ActionCell
792
793
  tableBodyRef={tableBodyRef}
793
794
  dropType={dropType}
795
+ wheelWrapperRef={wheelWrapperRef}
794
796
  actionProps={actionProps}
795
797
  className={`${classes.cellClass} ${classes.actionCellClass}`}
796
798
  handleMenuActions={handleMenuActions}
@@ -32,7 +32,8 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
32
32
  defaultRowView = true,
33
33
  fullWidthView = false,
34
34
  setTableFullView,
35
- setRowViewToggle
35
+ setRowViewToggle,
36
+ isFullScreen = false
36
37
  }) => {
37
38
  const debouncedOnSearch = useCallback(debounce(onSearch ?? (() => {}), 1000), [onSearch]);
38
39
  const [searchParam, setSearchParam] = useState<string | undefined>(searchValue);
@@ -109,27 +110,31 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
109
110
  )}
110
111
  {tableHeaderActions}
111
112
  <div className=" pr-1 cursor-pointer relative table_custom_ctions ">
112
- {rowViewToggle && (
113
+ {(rowViewToggle || isFullScreen) && (
113
114
  <div className="flex gap-2 qbs-row-switch-cntainer">
114
- <div className="flex gap-2 table_cell_style">
115
- <TooltipComponent tableBodyRef={toolbarRef} title={'Switch to Default View'}>
116
- <div onClick={() => setRowViewToggle?.(true)}>
117
- <DefaultView className={`${defaultRowView ? 'active' : ''}`} />
118
- </div>
119
- </TooltipComponent>
120
- <TooltipComponent tableBodyRef={toolbarRef} title={'Switch to Compact View'}>
121
- <div onClick={() => setRowViewToggle?.(false)}>
122
- <ContentView className={`${!defaultRowView ? 'active' : ''}`} />
123
- </div>
124
- </TooltipComponent>
125
- </div>
126
- <div className=" table_full_width">
127
- <TooltipComponent tableBodyRef={toolbarRef} title={'Switch to Full Screen'}>
128
- <div onClick={() => setTableFullView?.(!fullWidthView)}>
129
- <ExpandIcon className={`${fullWidthView ? 'active' : ''}`} />
130
- </div>
131
- </TooltipComponent>
132
- </div>
115
+ {rowViewToggle && (
116
+ <div className="flex gap-2 table_cell_style">
117
+ <TooltipComponent tableBodyRef={toolbarRef} title={'Switch to Default View'}>
118
+ <div onClick={() => setRowViewToggle?.(true)}>
119
+ <DefaultView className={`${defaultRowView ? 'active' : ''}`} />
120
+ </div>
121
+ </TooltipComponent>
122
+ <TooltipComponent tableBodyRef={toolbarRef} title={'Switch to Compact View'}>
123
+ <div onClick={() => setRowViewToggle?.(false)}>
124
+ <ContentView className={`${!defaultRowView ? 'active' : ''}`} />
125
+ </div>
126
+ </TooltipComponent>
127
+ </div>
128
+ )}
129
+ {isFullScreen && (
130
+ <div className=" table_full_width">
131
+ <TooltipComponent tableBodyRef={toolbarRef} title={'Switch to Full Screen'}>
132
+ <div onClick={() => setTableFullView?.(!fullWidthView)}>
133
+ <ExpandIcon className={`${fullWidthView ? 'active' : ''}`} />
134
+ </div>
135
+ </TooltipComponent>
136
+ </div>
137
+ )}
133
138
  </div>
134
139
  )}
135
140
 
@@ -142,6 +142,7 @@ export interface QbsTableProps {
142
142
  setRowViewToggle?: (value: boolean) => void;
143
143
  dropType?: 'horizondal' | 'vertical';
144
144
  rowHeight?: number;
145
+ isFullScreen?: boolean
145
146
  }
146
147
 
147
148
  export interface QbsTableToolbarProps {
@@ -183,4 +184,5 @@ export interface QbsTableToolbarProps {
183
184
  fullWidthView?: boolean;
184
185
  setTableFullView?: (value: boolean) => void;
185
186
  setRowViewToggle?: (value: boolean) => void;
187
+ isFullScreen?: boolean
186
188
  }
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import ReactDOM from 'react-dom';
3
+
3
4
  import { ActionProps } from '../commontypes';
4
5
  import { ThreeDotIcon } from './icons';
5
6
  import TooltipComponent from './ToolTip';
@@ -11,6 +12,7 @@ type Props = {
11
12
  dataTheme?: string;
12
13
  tableBodyRef: React.RefObject<HTMLDivElement>;
13
14
  rowIndex?: number;
15
+ wheelWrapperRef?: React.RefObject<HTMLDivElement>;
14
16
  };
15
17
 
16
18
  const VerticalMenuDropdown: React.FC<Props> = ({
@@ -31,12 +33,44 @@ const VerticalMenuDropdown: React.FC<Props> = ({
31
33
  setOpenMenu(false);
32
34
  }
33
35
  };
36
+ const handleScroll = () => {
37
+ setOpenMenu(false);
38
+ };
34
39
 
35
40
  document.addEventListener('click', handleClickOutside);
41
+ window.addEventListener('scroll', handleScroll, true);
42
+ // Use capture phase to catch all scrolls
43
+
36
44
  return () => {
37
45
  document.removeEventListener('click', handleClickOutside);
46
+ window.removeEventListener('scroll', handleScroll, true);
38
47
  };
39
48
  }, []);
49
+ useEffect(() => {
50
+ const handleStyleChange = () => {
51
+ setOpenMenu(false); // Close the dropdown
52
+ };
53
+
54
+ const scrollbarHandle = document.querySelector('.rs-table-scrollbar-handle');
55
+ if (!scrollbarHandle) return;
56
+
57
+ const observer = new MutationObserver(mutations => {
58
+ for (const mutation of mutations) {
59
+ if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
60
+ handleStyleChange();
61
+ }
62
+ }
63
+ });
64
+
65
+ observer.observe(scrollbarHandle, {
66
+ attributes: true,
67
+ attributeFilter: ['style']
68
+ });
69
+
70
+ return () => {
71
+ observer.disconnect();
72
+ };
73
+ }, [openMenu]);
40
74
 
41
75
  const handleMenuItemClick = (slug: ActionProps) => {
42
76
  handleMenuActions?.(slug, rowData);