qbs-react-grid 2.0.11 → 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 +7 -3
- package/es/qbsTable/Toolbar.js +6 -4
- package/es/qbsTable/commontypes.d.ts +3 -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 +7 -3
- package/lib/qbsTable/Toolbar.js +6 -4
- package/lib/qbsTable/commontypes.d.ts +3 -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/Table.tsx +36 -4
- package/src/qbsTable/CustomTableCell.tsx +11 -1
- package/src/qbsTable/QbsTable.tsx +7 -3
- package/src/qbsTable/Toolbar.tsx +26 -21
- package/src/qbsTable/commontypes.ts +5 -2
- 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
|
@@ -123,7 +123,9 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
123
123
|
setTableFullView = _ref.setTableFullView,
|
|
124
124
|
setRowViewToggle = _ref.setRowViewToggle,
|
|
125
125
|
_ref$dropType = _ref.dropType,
|
|
126
|
-
dropType = _ref$dropType === void 0 ? 'horizondal' : _ref$dropType
|
|
126
|
+
dropType = _ref$dropType === void 0 ? 'horizondal' : _ref$dropType,
|
|
127
|
+
rowHeight = _ref.rowHeight,
|
|
128
|
+
isFullScreen = _ref.isFullScreen;
|
|
127
129
|
var _useState = useState(false),
|
|
128
130
|
loading = _useState[0],
|
|
129
131
|
setLoading = _useState[1];
|
|
@@ -290,7 +292,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
290
292
|
defaultRowView: defaultRowView,
|
|
291
293
|
fullWidthView: fullWidthView,
|
|
292
294
|
setTableFullView: setTableFullView,
|
|
293
|
-
setRowViewToggle: setRowViewToggle
|
|
295
|
+
setRowViewToggle: setRowViewToggle,
|
|
296
|
+
isFullScreen: isFullScreen
|
|
294
297
|
};
|
|
295
298
|
var themeToggle = useMemo(function () {
|
|
296
299
|
return document.getElementById('themeToggle');
|
|
@@ -587,7 +590,6 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
587
590
|
var scrollTop = wrapper.scrollTop,
|
|
588
591
|
clientHeight = wrapper.clientHeight;
|
|
589
592
|
var scrollHeight = Math.abs(scroll) + (height - headerHeight);
|
|
590
|
-
|
|
591
593
|
// Trigger fetch when user scrolls within 100px of bottom
|
|
592
594
|
if (scrollTop + clientHeight >= scrollHeight - 70) {
|
|
593
595
|
loadMoreData === null || loadMoreData === void 0 ? void 0 : loadMoreData(); // fetch next page here
|
|
@@ -607,6 +609,7 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
607
609
|
dataTheme: dataTheme,
|
|
608
610
|
wordWrap: wordWrap,
|
|
609
611
|
wheelWrapperRef: wheelWrapperRef,
|
|
612
|
+
rowHeight: rowHeight,
|
|
610
613
|
autoHeight: autoHeight,
|
|
611
614
|
handleInfiniteScroll: handleInfiniteScroll,
|
|
612
615
|
sortColumn: sortColumn,
|
|
@@ -751,6 +754,7 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
751
754
|
})), /*#__PURE__*/React.createElement(ActionCell, {
|
|
752
755
|
tableBodyRef: tableBodyRef,
|
|
753
756
|
dropType: dropType,
|
|
757
|
+
wheelWrapperRef: wheelWrapperRef,
|
|
754
758
|
actionProps: actionProps,
|
|
755
759
|
className: classes.cellClass + " " + classes.actionCellClass,
|
|
756
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,
|
|
@@ -138,6 +138,8 @@ export interface QbsTableProps {
|
|
|
138
138
|
setTableFullView?: (value: boolean) => void;
|
|
139
139
|
setRowViewToggle?: (value: boolean) => void;
|
|
140
140
|
dropType?: 'horizondal' | 'vertical';
|
|
141
|
+
rowHeight?: number;
|
|
142
|
+
isFullScreen?: boolean;
|
|
141
143
|
}
|
|
142
144
|
export interface QbsTableToolbarProps {
|
|
143
145
|
title?: string;
|
|
@@ -178,5 +180,6 @@ export interface QbsTableToolbarProps {
|
|
|
178
180
|
fullWidthView?: boolean;
|
|
179
181
|
setTableFullView?: (value: boolean) => void;
|
|
180
182
|
setRowViewToggle?: (value: boolean) => void;
|
|
183
|
+
isFullScreen?: boolean;
|
|
181
184
|
}
|
|
182
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
|
@@ -129,7 +129,9 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
129
129
|
setTableFullView = _ref.setTableFullView,
|
|
130
130
|
setRowViewToggle = _ref.setRowViewToggle,
|
|
131
131
|
_ref$dropType = _ref.dropType,
|
|
132
|
-
dropType = _ref$dropType === void 0 ? 'horizondal' : _ref$dropType
|
|
132
|
+
dropType = _ref$dropType === void 0 ? 'horizondal' : _ref$dropType,
|
|
133
|
+
rowHeight = _ref.rowHeight,
|
|
134
|
+
isFullScreen = _ref.isFullScreen;
|
|
133
135
|
var _useState = (0, _react.useState)(false),
|
|
134
136
|
loading = _useState[0],
|
|
135
137
|
setLoading = _useState[1];
|
|
@@ -296,7 +298,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
296
298
|
defaultRowView: defaultRowView,
|
|
297
299
|
fullWidthView: fullWidthView,
|
|
298
300
|
setTableFullView: setTableFullView,
|
|
299
|
-
setRowViewToggle: setRowViewToggle
|
|
301
|
+
setRowViewToggle: setRowViewToggle,
|
|
302
|
+
isFullScreen: isFullScreen
|
|
300
303
|
};
|
|
301
304
|
var themeToggle = (0, _react.useMemo)(function () {
|
|
302
305
|
return document.getElementById('themeToggle');
|
|
@@ -593,7 +596,6 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
593
596
|
var scrollTop = wrapper.scrollTop,
|
|
594
597
|
clientHeight = wrapper.clientHeight;
|
|
595
598
|
var scrollHeight = Math.abs(scroll) + (height - headerHeight);
|
|
596
|
-
|
|
597
599
|
// Trigger fetch when user scrolls within 100px of bottom
|
|
598
600
|
if (scrollTop + clientHeight >= scrollHeight - 70) {
|
|
599
601
|
loadMoreData === null || loadMoreData === void 0 ? void 0 : loadMoreData(); // fetch next page here
|
|
@@ -613,6 +615,7 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
613
615
|
dataTheme: dataTheme,
|
|
614
616
|
wordWrap: wordWrap,
|
|
615
617
|
wheelWrapperRef: wheelWrapperRef,
|
|
618
|
+
rowHeight: rowHeight,
|
|
616
619
|
autoHeight: autoHeight,
|
|
617
620
|
handleInfiniteScroll: handleInfiniteScroll,
|
|
618
621
|
sortColumn: sortColumn,
|
|
@@ -757,6 +760,7 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
757
760
|
})), /*#__PURE__*/_react["default"].createElement(_CustomTableCell.ActionCell, {
|
|
758
761
|
tableBodyRef: tableBodyRef,
|
|
759
762
|
dropType: dropType,
|
|
763
|
+
wheelWrapperRef: wheelWrapperRef,
|
|
760
764
|
actionProps: actionProps,
|
|
761
765
|
className: classes.cellClass + " " + classes.actionCellClass,
|
|
762
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,
|
|
@@ -138,6 +138,8 @@ export interface QbsTableProps {
|
|
|
138
138
|
setTableFullView?: (value: boolean) => void;
|
|
139
139
|
setRowViewToggle?: (value: boolean) => void;
|
|
140
140
|
dropType?: 'horizondal' | 'vertical';
|
|
141
|
+
rowHeight?: number;
|
|
142
|
+
isFullScreen?: boolean;
|
|
141
143
|
}
|
|
142
144
|
export interface QbsTableToolbarProps {
|
|
143
145
|
title?: string;
|
|
@@ -178,5 +180,6 @@ export interface QbsTableToolbarProps {
|
|
|
178
180
|
fullWidthView?: boolean;
|
|
179
181
|
setTableFullView?: (value: boolean) => void;
|
|
180
182
|
setRowViewToggle?: (value: boolean) => void;
|
|
183
|
+
isFullScreen?: boolean;
|
|
181
184
|
}
|
|
182
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
package/src/Table.tsx
CHANGED
|
@@ -3,17 +3,50 @@ import debounce from 'lodash/debounce';
|
|
|
3
3
|
import flatten from 'lodash/flatten';
|
|
4
4
|
import isFunction from 'lodash/isFunction';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
|
-
import React, {
|
|
6
|
+
import React, {
|
|
7
|
+
useCallback,
|
|
8
|
+
useEffect,
|
|
9
|
+
useImperativeHandle,
|
|
10
|
+
useReducer,
|
|
11
|
+
useRef,
|
|
12
|
+
useState
|
|
13
|
+
} from 'react';
|
|
7
14
|
|
|
8
15
|
import CellGroup from './CellGroup';
|
|
9
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
CELL_PADDING_HEIGHT,
|
|
18
|
+
EXPANDED_KEY,
|
|
19
|
+
ROW_HEADER_HEIGHT,
|
|
20
|
+
ROW_HEIGHT,
|
|
21
|
+
SCROLLBAR_WIDTH,
|
|
22
|
+
SORT_TYPE,
|
|
23
|
+
TREE_DEPTH
|
|
24
|
+
} from './constants';
|
|
10
25
|
import EmptyMessage from './EmptyMessage';
|
|
11
26
|
import Loader from './Loader';
|
|
12
27
|
import MouseArea from './MouseArea';
|
|
13
28
|
import Row, { RowProps } from './Row';
|
|
14
29
|
import Scrollbar, { ScrollbarInstance } from './Scrollbar';
|
|
15
30
|
import TableContext from './TableContext';
|
|
16
|
-
import {
|
|
31
|
+
import {
|
|
32
|
+
findAllParents,
|
|
33
|
+
findRowKeys,
|
|
34
|
+
flattenData,
|
|
35
|
+
isRTL,
|
|
36
|
+
isSupportTouchEvent,
|
|
37
|
+
mergeCells,
|
|
38
|
+
resetLeftForCells,
|
|
39
|
+
shouldShowRowByExpanded,
|
|
40
|
+
useAffix,
|
|
41
|
+
useCellDescriptor,
|
|
42
|
+
useClassNames,
|
|
43
|
+
useControlled,
|
|
44
|
+
usePosition,
|
|
45
|
+
useScrollListener,
|
|
46
|
+
useTableDimension,
|
|
47
|
+
useTableRows,
|
|
48
|
+
useUpdateEffect
|
|
49
|
+
} from './utils';
|
|
17
50
|
|
|
18
51
|
import type {
|
|
19
52
|
RowDataType,
|
|
@@ -314,7 +347,6 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
314
347
|
wheelWrapperRef,
|
|
315
348
|
...rest
|
|
316
349
|
} = props;
|
|
317
|
-
|
|
318
350
|
const {
|
|
319
351
|
withClassPrefix,
|
|
320
352
|
merge: mergeCls,
|
|
@@ -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
|
|
@@ -103,7 +103,9 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
103
103
|
fullWidthView = false,
|
|
104
104
|
setTableFullView,
|
|
105
105
|
setRowViewToggle,
|
|
106
|
-
dropType='horizondal'
|
|
106
|
+
dropType = 'horizondal',
|
|
107
|
+
rowHeight,
|
|
108
|
+
isFullScreen
|
|
107
109
|
}) => {
|
|
108
110
|
const [loading, setLoading] = useState(false);
|
|
109
111
|
const [columns, setColumns] = useState(propColumn);
|
|
@@ -269,7 +271,8 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
269
271
|
defaultRowView: defaultRowView,
|
|
270
272
|
fullWidthView: fullWidthView,
|
|
271
273
|
setTableFullView: setTableFullView,
|
|
272
|
-
setRowViewToggle: setRowViewToggle
|
|
274
|
+
setRowViewToggle: setRowViewToggle,
|
|
275
|
+
isFullScreen: isFullScreen
|
|
273
276
|
};
|
|
274
277
|
const themeToggle = useMemo(() => document.getElementById('themeToggle') as HTMLInputElement, []);
|
|
275
278
|
|
|
@@ -598,7 +601,6 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
598
601
|
|
|
599
602
|
const { scrollTop, clientHeight } = wrapper;
|
|
600
603
|
const scrollHeight = Math.abs(scroll) + (height - headerHeight);
|
|
601
|
-
|
|
602
604
|
// Trigger fetch when user scrolls within 100px of bottom
|
|
603
605
|
if (scrollTop + clientHeight >= scrollHeight - 70) {
|
|
604
606
|
loadMoreData?.(); // fetch next page here
|
|
@@ -619,6 +621,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
619
621
|
dataTheme={dataTheme}
|
|
620
622
|
wordWrap={wordWrap}
|
|
621
623
|
wheelWrapperRef={wheelWrapperRef}
|
|
624
|
+
rowHeight={rowHeight}
|
|
622
625
|
autoHeight={autoHeight}
|
|
623
626
|
handleInfiniteScroll={handleInfiniteScroll}
|
|
624
627
|
sortColumn={sortColumn}
|
|
@@ -789,6 +792,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
789
792
|
<ActionCell
|
|
790
793
|
tableBodyRef={tableBodyRef}
|
|
791
794
|
dropType={dropType}
|
|
795
|
+
wheelWrapperRef={wheelWrapperRef}
|
|
792
796
|
actionProps={actionProps}
|
|
793
797
|
className={`${classes.cellClass} ${classes.actionCellClass}`}
|
|
794
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
|
|
|
@@ -140,8 +140,10 @@ export interface QbsTableProps {
|
|
|
140
140
|
fullWidthView?: boolean;
|
|
141
141
|
setTableFullView?: (value: boolean) => void;
|
|
142
142
|
setRowViewToggle?: (value: boolean) => void;
|
|
143
|
-
dropType?: 'horizondal' | 'vertical'
|
|
144
|
-
|
|
143
|
+
dropType?: 'horizondal' | 'vertical';
|
|
144
|
+
rowHeight?: number;
|
|
145
|
+
isFullScreen?: boolean
|
|
146
|
+
}
|
|
145
147
|
|
|
146
148
|
export interface QbsTableToolbarProps {
|
|
147
149
|
title?: string;
|
|
@@ -182,4 +184,5 @@ export interface QbsTableToolbarProps {
|
|
|
182
184
|
fullWidthView?: boolean;
|
|
183
185
|
setTableFullView?: (value: boolean) => void;
|
|
184
186
|
setRowViewToggle?: (value: boolean) => void;
|
|
187
|
+
isFullScreen?: boolean
|
|
185
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);
|