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.
- package/es/qbsTable/CustomTableCell.js +4 -2
- package/es/qbsTable/QbsTable.js +5 -3
- package/es/qbsTable/Toolbar.js +6 -4
- package/es/qbsTable/commontypes.d.ts +2 -0
- package/es/qbsTable/utilities/VerticalDropDownMenu.d.ts +1 -0
- package/es/qbsTable/utilities/VerticalDropDownMenu.js +32 -0
- package/lib/qbsTable/CustomTableCell.js +4 -2
- package/lib/qbsTable/QbsTable.js +5 -3
- package/lib/qbsTable/Toolbar.js +6 -4
- package/lib/qbsTable/commontypes.d.ts +2 -0
- package/lib/qbsTable/utilities/VerticalDropDownMenu.d.ts +1 -0
- package/lib/qbsTable/utilities/VerticalDropDownMenu.js +32 -0
- package/package.json +1 -1
- package/src/qbsTable/CustomTableCell.tsx +11 -1
- package/src/qbsTable/QbsTable.tsx +5 -3
- package/src/qbsTable/Toolbar.tsx +26 -21
- package/src/qbsTable/commontypes.ts +2 -0
- package/src/qbsTable/utilities/VerticalDropDownMenu.tsx +34 -0
|
@@ -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,
|
package/es/qbsTable/QbsTable.js
CHANGED
|
@@ -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,
|
package/es/qbsTable/Toolbar.js
CHANGED
|
@@ -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 {};
|
|
@@ -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,
|
package/lib/qbsTable/QbsTable.js
CHANGED
|
@@ -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,
|
package/lib/qbsTable/Toolbar.js
CHANGED
|
@@ -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 {};
|
|
@@ -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
|
@@ -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
|
-
({
|
|
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}
|
package/src/qbsTable/Toolbar.tsx
CHANGED
|
@@ -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
|
-
|
|
115
|
-
<
|
|
116
|
-
<
|
|
117
|
-
<
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
<
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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);
|