qbs-react-grid 1.1.44 → 1.1.46
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/Table.d.ts +1 -0
- package/es/Table.js +22 -6
- package/es/qbsTable/QbsTable.js +18 -7
- package/es/qbsTable/commontypes.d.ts +2 -0
- package/es/utils/useScrollListener.d.ts +3 -0
- package/es/utils/useScrollListener.js +16 -7
- package/lib/Table.d.ts +1 -0
- package/lib/Table.js +22 -6
- package/lib/qbsTable/QbsTable.js +18 -7
- package/lib/qbsTable/commontypes.d.ts +2 -0
- package/lib/utils/useScrollListener.d.ts +3 -0
- package/lib/utils/useScrollListener.js +16 -7
- package/package.json +1 -1
- package/src/Row.tsx +1 -0
- package/src/Table.tsx +25 -5
- package/src/qbsTable/QbsTable.tsx +12 -2
- package/src/qbsTable/commontypes.ts +3 -0
- package/src/utils/useScrollListener.ts +14 -6
package/es/Table.d.ts
CHANGED
|
@@ -98,6 +98,7 @@ export interface TableProps<Row, Key> extends Omit<StandardProps, 'onScroll'> {
|
|
|
98
98
|
dataTheme?: string;
|
|
99
99
|
/** Tree table, the callback function in the expanded node */
|
|
100
100
|
renderTreeToggle?: (expandButton: React.ReactNode, rowData?: Row, expanded?: boolean) => React.ReactNode;
|
|
101
|
+
tableKey?: string;
|
|
101
102
|
/** Customize what you can do to expand a zone */
|
|
102
103
|
renderRowExpanded?: (rowData?: Row) => React.ReactNode;
|
|
103
104
|
/** Custom row element */
|
package/es/Table.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
var _excluded = ["affixHeader", "children", "classPrefix", "className", "data", "defaultSortType", "width", "expandedRowKeys", "defaultExpandAllRows", "defaultExpandedRowKeys", "style", "id", "isTree", "hover", "bordered", "cellBordered", "wordWrap", "loading", "locale", "showHeader", "pagination", "paginationProps", "sortColumn", "rowHeight", "sortType", "headerHeight", "minHeight", "height", "autoHeight", "fillHeight", "rtl", "translate3d", "rowKey", "virtualized", "rowClassName", "rowExpandedHeight", "disabledScroll", "affixHorizontalScrollbar", "loadAnimation", "shouldUpdateScroll", "renderRow", "renderRowExpanded", "renderLoading", "renderEmpty", "onSortColumn", "onScroll", "renderTreeToggle", "onRowClick", "onRowContextMenu", "onExpandChange", "onTouchStart", "onTouchMove", "onTouchEnd", "dataTheme", "tableBodyHeight", "columns", "tableBodyRef"],
|
|
3
|
+
var _excluded = ["affixHeader", "children", "classPrefix", "className", "data", "defaultSortType", "width", "expandedRowKeys", "defaultExpandAllRows", "defaultExpandedRowKeys", "style", "id", "isTree", "hover", "bordered", "cellBordered", "wordWrap", "loading", "locale", "showHeader", "pagination", "paginationProps", "sortColumn", "rowHeight", "sortType", "headerHeight", "minHeight", "height", "autoHeight", "fillHeight", "rtl", "translate3d", "rowKey", "virtualized", "rowClassName", "rowExpandedHeight", "disabledScroll", "affixHorizontalScrollbar", "loadAnimation", "shouldUpdateScroll", "renderRow", "renderRowExpanded", "renderLoading", "renderEmpty", "onSortColumn", "onScroll", "renderTreeToggle", "onRowClick", "onRowContextMenu", "onExpandChange", "onTouchStart", "onTouchMove", "onTouchEnd", "dataTheme", "tableBodyHeight", "columns", "tableBodyRef", "tableKey"],
|
|
4
4
|
_excluded2 = ["depth", "rowIndex"],
|
|
5
5
|
_excluded3 = ["cellHeight"];
|
|
6
6
|
import { getTranslateDOMPositionXY } from 'dom-lib/translateDOMPositionXY';
|
|
@@ -115,11 +115,13 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
115
115
|
tableBodyHeight = props.tableBodyHeight,
|
|
116
116
|
columns = props.columns,
|
|
117
117
|
tableBodyRef = props.tableBodyRef,
|
|
118
|
+
tableKey = props.tableKey,
|
|
118
119
|
rest = _objectWithoutPropertiesLoose(props, _excluded);
|
|
119
120
|
var _useClassNames = useClassNames(classPrefix, typeof classPrefix !== 'undefined'),
|
|
120
121
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
121
122
|
mergeCls = _useClassNames.merge,
|
|
122
123
|
prefix = _useClassNames.prefix;
|
|
124
|
+
var childTableRef = useRef(null);
|
|
123
125
|
|
|
124
126
|
// Use `forceUpdate` to force the component to re-render after manipulating the DOM.
|
|
125
127
|
var _useReducer = useReducer(function (x) {
|
|
@@ -283,6 +285,7 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
283
285
|
minScrollY: minScrollY,
|
|
284
286
|
minScrollX: minScrollX,
|
|
285
287
|
scrollX: scrollX,
|
|
288
|
+
tableKey: tableKey,
|
|
286
289
|
setScrollX: setScrollX,
|
|
287
290
|
setScrollY: setScrollY,
|
|
288
291
|
forceUpdatePosition: forceUpdatePosition,
|
|
@@ -293,12 +296,14 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
293
296
|
onTouchEnd: onTouchEnd
|
|
294
297
|
}),
|
|
295
298
|
isScrolling = _useScrollListener.isScrolling,
|
|
299
|
+
isChildFocused = _useScrollListener.isChildFocused,
|
|
296
300
|
onScrollHorizontal = _useScrollListener.onScrollHorizontal,
|
|
297
301
|
onScrollVertical = _useScrollListener.onScrollVertical,
|
|
298
302
|
onScrollBody = _useScrollListener.onScrollBody,
|
|
299
303
|
onScrollTop = _useScrollListener.onScrollTop,
|
|
300
304
|
onScrollLeft = _useScrollListener.onScrollLeft,
|
|
301
|
-
onScrollTo = _useScrollListener.onScrollTo
|
|
305
|
+
onScrollTo = _useScrollListener.onScrollTo,
|
|
306
|
+
setIsChildFocused = _useScrollListener.setIsChildFocused;
|
|
302
307
|
var _useCellDescriptor = useCellDescriptor({
|
|
303
308
|
children: children,
|
|
304
309
|
rtl: rtl,
|
|
@@ -363,6 +368,12 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
363
368
|
width: widthProp || 'auto',
|
|
364
369
|
height: getTableHeight()
|
|
365
370
|
}, style);
|
|
371
|
+
var handleChildFocus = useCallback(function () {
|
|
372
|
+
setIsChildFocused(true);
|
|
373
|
+
}, []);
|
|
374
|
+
var handleChildBlur = useCallback(function () {
|
|
375
|
+
setIsChildFocused(false);
|
|
376
|
+
}, []);
|
|
366
377
|
var renderRowExpanded = useCallback(function (rowData) {
|
|
367
378
|
var _tableRef$current;
|
|
368
379
|
var styles = {
|
|
@@ -371,8 +382,11 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
371
382
|
};
|
|
372
383
|
if (typeof renderRowExpandedProp === 'function') {
|
|
373
384
|
return /*#__PURE__*/React.createElement("div", {
|
|
385
|
+
ref: childTableRef,
|
|
374
386
|
className: prefix('row-expanded'),
|
|
375
|
-
style: styles
|
|
387
|
+
style: styles,
|
|
388
|
+
onMouseEnter: handleChildFocus,
|
|
389
|
+
onMouseLeave: handleChildBlur
|
|
376
390
|
}, renderRowExpandedProp(rowData));
|
|
377
391
|
}
|
|
378
392
|
return null;
|
|
@@ -447,7 +461,9 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
447
461
|
} else {
|
|
448
462
|
rowNode = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CellGroup, null, mergeCells(cells)), shouldRenderExpandedRow && renderRowExpanded(rowData));
|
|
449
463
|
}
|
|
450
|
-
return /*#__PURE__*/React.createElement(Row, _extends({
|
|
464
|
+
return /*#__PURE__*/React.createElement(Row, _extends({
|
|
465
|
+
rowRef: childTableRef
|
|
466
|
+
}, restRowProps, {
|
|
451
467
|
"data-depth": depth,
|
|
452
468
|
style: _extends({}, rowStyles)
|
|
453
469
|
// zIndexValue={shouldRenderExpandedRow ? 100 : props.zIndexValue}
|
|
@@ -593,7 +609,7 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
593
609
|
return null;
|
|
594
610
|
}
|
|
595
611
|
var scrollbars = [];
|
|
596
|
-
if (hasHorizontalScrollbar) {
|
|
612
|
+
if (hasHorizontalScrollbar && !(tableKey === 'parent' && isChildFocused)) {
|
|
597
613
|
scrollbars.push( /*#__PURE__*/React.createElement(Scrollbar, {
|
|
598
614
|
key: "scrollbar",
|
|
599
615
|
tableId: id,
|
|
@@ -606,7 +622,7 @@ var Table = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
606
622
|
ref: scrollbarXRef
|
|
607
623
|
}));
|
|
608
624
|
}
|
|
609
|
-
if (hasVerticalScrollbar) {
|
|
625
|
+
if (hasVerticalScrollbar && !(tableKey === 'parent' && isChildFocused)) {
|
|
610
626
|
scrollbars.push( /*#__PURE__*/React.createElement(Scrollbar, {
|
|
611
627
|
vertical: true,
|
|
612
628
|
key: "vertical-scrollbar",
|
package/es/qbsTable/QbsTable.js
CHANGED
|
@@ -83,7 +83,9 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
83
83
|
customRowStatus = _ref.customRowStatus,
|
|
84
84
|
searchPlaceholder = _ref.searchPlaceholder,
|
|
85
85
|
_ref$rowExpandedHeigh = _ref.rowExpandedHeight,
|
|
86
|
-
rowExpandedHeight = _ref$rowExpandedHeigh === void 0 ? 517 : _ref$rowExpandedHeigh
|
|
86
|
+
rowExpandedHeight = _ref$rowExpandedHeigh === void 0 ? 517 : _ref$rowExpandedHeigh,
|
|
87
|
+
renderSortIcon = _ref.renderSortIcon,
|
|
88
|
+
tableKey = _ref.tableKey;
|
|
87
89
|
var _useState = useState(false),
|
|
88
90
|
loading = _useState[0],
|
|
89
91
|
setLoading = _useState[1];
|
|
@@ -347,7 +349,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
347
349
|
dataTheme: dataTheme,
|
|
348
350
|
verticalAlign: 'middle',
|
|
349
351
|
className: " " + classes.headerClass,
|
|
350
|
-
sortKey: child.sortKey
|
|
352
|
+
sortKey: child.sortKey,
|
|
353
|
+
renderSortIcon: renderSortIcon
|
|
351
354
|
}, child.title), child.customCell || child.link ? /*#__PURE__*/React.createElement(CustomTableCell, {
|
|
352
355
|
renderCell: child.renderCell,
|
|
353
356
|
dataKey: child.field,
|
|
@@ -372,7 +375,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
372
375
|
dataTheme: dataTheme,
|
|
373
376
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
374
377
|
className: " " + classes.headerClass,
|
|
375
|
-
sortKey: sortKey
|
|
378
|
+
sortKey: sortKey,
|
|
379
|
+
renderSortIcon: renderSortIcon
|
|
376
380
|
}, title), customCell || link ? /*#__PURE__*/React.createElement(CustomTableCell, {
|
|
377
381
|
renderCell: renderCell,
|
|
378
382
|
dataKey: field,
|
|
@@ -396,6 +400,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
396
400
|
className: "qbs-table-border-wrap"
|
|
397
401
|
}, /*#__PURE__*/React.createElement(Table, {
|
|
398
402
|
height: height,
|
|
403
|
+
key: tableKey,
|
|
404
|
+
tableKey: tableKey,
|
|
399
405
|
data: data,
|
|
400
406
|
tableBodyRef: tableBodyRef,
|
|
401
407
|
dataTheme: dataTheme,
|
|
@@ -431,7 +437,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
431
437
|
fixed: "left"
|
|
432
438
|
}, /*#__PURE__*/React.createElement(HeaderCell, {
|
|
433
439
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
434
|
-
className: " " + classes.headerlClass
|
|
440
|
+
className: " " + classes.headerlClass,
|
|
441
|
+
renderSortIcon: renderSortIcon
|
|
435
442
|
}, "#"), /*#__PURE__*/React.createElement(ExpandCell, {
|
|
436
443
|
dataKey: dataRowKey,
|
|
437
444
|
expandedRowKeys: expandedRowKeys,
|
|
@@ -446,6 +453,7 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
446
453
|
},
|
|
447
454
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
448
455
|
dataTheme: dataTheme,
|
|
456
|
+
renderSortIcon: renderSortIcon,
|
|
449
457
|
className: "qbs-checkbox-border-none " + classes.headerlClass
|
|
450
458
|
}, /*#__PURE__*/React.createElement("div", {
|
|
451
459
|
style: {
|
|
@@ -483,7 +491,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
483
491
|
fixed: "left"
|
|
484
492
|
}, /*#__PURE__*/React.createElement(HeaderCell, {
|
|
485
493
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
486
|
-
className: " " + classes.headerlClass
|
|
494
|
+
className: " " + classes.headerlClass,
|
|
495
|
+
renderSortIcon: renderSortIcon
|
|
487
496
|
}, ' '), /*#__PURE__*/React.createElement(CustomRowStatus, {
|
|
488
497
|
getIcon: customRowStatus.getIcon,
|
|
489
498
|
dataKey: customRowStatus.field,
|
|
@@ -497,7 +506,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
497
506
|
}, /*#__PURE__*/React.createElement(HeaderCell, {
|
|
498
507
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
499
508
|
className: " " + classes.headerlClass,
|
|
500
|
-
dataTheme: dataTheme
|
|
509
|
+
dataTheme: dataTheme,
|
|
510
|
+
renderSortIcon: renderSortIcon
|
|
501
511
|
}, /*#__PURE__*/React.createElement(ColumToggle, {
|
|
502
512
|
columns: columns,
|
|
503
513
|
onToggle: handleToggle,
|
|
@@ -513,7 +523,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
513
523
|
}, /*#__PURE__*/React.createElement(HeaderCell, {
|
|
514
524
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
515
525
|
className: " " + classes.headerlClass,
|
|
516
|
-
dataTheme: dataTheme
|
|
526
|
+
dataTheme: dataTheme,
|
|
527
|
+
renderSortIcon: renderSortIcon
|
|
517
528
|
}, !columnToggle ? /*#__PURE__*/React.createElement(SettingsIcon, null) : /*#__PURE__*/React.createElement(ColumToggle, {
|
|
518
529
|
columns: columns,
|
|
519
530
|
onToggle: handleToggle,
|
|
@@ -44,6 +44,7 @@ export interface ActionProps {
|
|
|
44
44
|
hide?: (data: any, index?: number) => boolean;
|
|
45
45
|
}
|
|
46
46
|
export interface QbsTableProps {
|
|
47
|
+
tableKey?: string;
|
|
47
48
|
isLoading?: boolean;
|
|
48
49
|
columns: QbsColumnProps[];
|
|
49
50
|
data: readonly any[];
|
|
@@ -110,6 +111,7 @@ export interface QbsTableProps {
|
|
|
110
111
|
getPath?: (data: any) => string;
|
|
111
112
|
};
|
|
112
113
|
rowExpandedHeight?: number;
|
|
114
|
+
renderSortIcon?: (sortType?: 'desc' | 'asc') => React.ReactNode;
|
|
113
115
|
}
|
|
114
116
|
export interface QbsTableToolbarProps {
|
|
115
117
|
title?: string;
|
|
@@ -21,6 +21,7 @@ interface ScrollListenerProps {
|
|
|
21
21
|
minScrollY: React.MutableRefObject<number>;
|
|
22
22
|
minScrollX: React.MutableRefObject<number>;
|
|
23
23
|
scrollX: React.MutableRefObject<number>;
|
|
24
|
+
tableKey?: string;
|
|
24
25
|
setScrollX: (v: number) => void;
|
|
25
26
|
setScrollY: (v: number) => void;
|
|
26
27
|
virtualized?: boolean;
|
|
@@ -39,6 +40,7 @@ interface ScrollListenerProps {
|
|
|
39
40
|
*/
|
|
40
41
|
declare const useScrollListener: (props: ScrollListenerProps) => {
|
|
41
42
|
isScrolling: boolean;
|
|
43
|
+
isChildFocused: boolean;
|
|
42
44
|
onScrollHorizontal: (delta: number) => void;
|
|
43
45
|
onScrollVertical: (delta: number, event: any) => void;
|
|
44
46
|
onScrollBody: (event: any) => void;
|
|
@@ -48,5 +50,6 @@ declare const useScrollListener: (props: ScrollListenerProps) => {
|
|
|
48
50
|
x?: number;
|
|
49
51
|
y?: number;
|
|
50
52
|
}) => void;
|
|
53
|
+
setIsChildFocused: React.Dispatch<React.SetStateAction<boolean>>;
|
|
51
54
|
};
|
|
52
55
|
export default useScrollListener;
|
|
@@ -67,14 +67,18 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
67
67
|
getTableHeight = props.getTableHeight,
|
|
68
68
|
contentHeight = props.contentHeight,
|
|
69
69
|
headerHeight = props.headerHeight,
|
|
70
|
-
rtl = props.rtl
|
|
70
|
+
rtl = props.rtl,
|
|
71
|
+
tableKey = props.tableKey;
|
|
71
72
|
var wheelListener = useRef();
|
|
72
73
|
var touchStartListener = useRef();
|
|
73
74
|
var touchMoveListener = useRef();
|
|
74
75
|
var touchEndListener = useRef();
|
|
75
76
|
var _useState = useState(false),
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
isChildFocused = _useState[0],
|
|
78
|
+
setIsChildFocused = _useState[1];
|
|
79
|
+
var _useState2 = useState(false),
|
|
80
|
+
isScrolling = _useState2[0],
|
|
81
|
+
setScrolling = _useState2[1];
|
|
78
82
|
var touchX = useRef(0);
|
|
79
83
|
var touchY = useRef(0);
|
|
80
84
|
var disableEventsTimeoutId = useRef(null);
|
|
@@ -86,13 +90,13 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
86
90
|
// The vertical starting value within the inertial sliding range.
|
|
87
91
|
var momentumStartY = useRef(0);
|
|
88
92
|
var shouldHandleWheelX = useCallback(function (delta) {
|
|
89
|
-
if (delta === 0 || disabledScroll || loading) {
|
|
93
|
+
if (delta === 0 || disabledScroll || loading || isChildFocused) {
|
|
90
94
|
return false;
|
|
91
95
|
}
|
|
92
96
|
return true;
|
|
93
97
|
}, [disabledScroll, loading]);
|
|
94
98
|
var shouldHandleWheelY = useCallback(function (delta) {
|
|
95
|
-
if (delta === 0 || disabledScroll || loading || autoHeight) {
|
|
99
|
+
if (delta === 0 || disabledScroll || loading || autoHeight || isChildFocused) {
|
|
96
100
|
return false;
|
|
97
101
|
}
|
|
98
102
|
if (typeof scrollY.current === 'number' && typeof minScrollY.current === 'number') {
|
|
@@ -116,9 +120,10 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
116
120
|
* @param momentumOptions The configuration of inertial scrolling is used for the touch event.
|
|
117
121
|
*/
|
|
118
122
|
var handleWheel = useCallback(function (deltaX, deltaY, momentumOptions, event) {
|
|
119
|
-
if (!tableRef.current) {
|
|
123
|
+
if (!tableRef.current || tableKey === 'parent' && isChildFocused) {
|
|
120
124
|
return;
|
|
121
125
|
}
|
|
126
|
+
// setIsChildFocused(false);
|
|
122
127
|
var nextScrollX = contentWidth.current <= tableWidth.current ? 0 : scrollX.current - deltaX;
|
|
123
128
|
var nextScrollY = scrollY.current - deltaY;
|
|
124
129
|
var y = Math.min(0, nextScrollY < minScrollY.current ? minScrollY.current : nextScrollY);
|
|
@@ -202,6 +207,7 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
202
207
|
if (!isTouching.current) {
|
|
203
208
|
return;
|
|
204
209
|
}
|
|
210
|
+
console.log('handleTouchMove');
|
|
205
211
|
var _event$touches$2 = event.touches[0],
|
|
206
212
|
pageX = _event$touches$2.pageX,
|
|
207
213
|
pageY = _event$touches$2.pageY;
|
|
@@ -235,6 +241,7 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
235
241
|
if (!isTouching.current) {
|
|
236
242
|
return;
|
|
237
243
|
}
|
|
244
|
+
console.log('handleTouchEnd');
|
|
238
245
|
isTouching.current = false;
|
|
239
246
|
var touchDuration = new Date().getTime() - momentumStartTime.current;
|
|
240
247
|
var absDeltaY = Math.abs(scrollY.current - momentumStartY.current);
|
|
@@ -398,12 +405,14 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
398
405
|
}, [handleWheel]);
|
|
399
406
|
return {
|
|
400
407
|
isScrolling: isScrolling,
|
|
408
|
+
isChildFocused: isChildFocused,
|
|
401
409
|
onScrollHorizontal: onScrollHorizontal,
|
|
402
410
|
onScrollVertical: onScrollVertical,
|
|
403
411
|
onScrollBody: onScrollBody,
|
|
404
412
|
onScrollTop: onScrollTop,
|
|
405
413
|
onScrollLeft: onScrollLeft,
|
|
406
|
-
onScrollTo: onScrollTo
|
|
414
|
+
onScrollTo: onScrollTo,
|
|
415
|
+
setIsChildFocused: setIsChildFocused
|
|
407
416
|
};
|
|
408
417
|
};
|
|
409
418
|
export default useScrollListener;
|
package/lib/Table.d.ts
CHANGED
|
@@ -98,6 +98,7 @@ export interface TableProps<Row, Key> extends Omit<StandardProps, 'onScroll'> {
|
|
|
98
98
|
dataTheme?: string;
|
|
99
99
|
/** Tree table, the callback function in the expanded node */
|
|
100
100
|
renderTreeToggle?: (expandButton: React.ReactNode, rowData?: Row, expanded?: boolean) => React.ReactNode;
|
|
101
|
+
tableKey?: string;
|
|
101
102
|
/** Customize what you can do to expand a zone */
|
|
102
103
|
renderRowExpanded?: (rowData?: Row) => React.ReactNode;
|
|
103
104
|
/** Custom row element */
|
package/lib/Table.js
CHANGED
|
@@ -20,7 +20,7 @@ var _Row = _interopRequireDefault(require("./Row"));
|
|
|
20
20
|
var _Scrollbar = _interopRequireDefault(require("./Scrollbar"));
|
|
21
21
|
var _TableContext = _interopRequireDefault(require("./TableContext"));
|
|
22
22
|
var _utils = require("./utils");
|
|
23
|
-
var _excluded = ["affixHeader", "children", "classPrefix", "className", "data", "defaultSortType", "width", "expandedRowKeys", "defaultExpandAllRows", "defaultExpandedRowKeys", "style", "id", "isTree", "hover", "bordered", "cellBordered", "wordWrap", "loading", "locale", "showHeader", "pagination", "paginationProps", "sortColumn", "rowHeight", "sortType", "headerHeight", "minHeight", "height", "autoHeight", "fillHeight", "rtl", "translate3d", "rowKey", "virtualized", "rowClassName", "rowExpandedHeight", "disabledScroll", "affixHorizontalScrollbar", "loadAnimation", "shouldUpdateScroll", "renderRow", "renderRowExpanded", "renderLoading", "renderEmpty", "onSortColumn", "onScroll", "renderTreeToggle", "onRowClick", "onRowContextMenu", "onExpandChange", "onTouchStart", "onTouchMove", "onTouchEnd", "dataTheme", "tableBodyHeight", "columns", "tableBodyRef"],
|
|
23
|
+
var _excluded = ["affixHeader", "children", "classPrefix", "className", "data", "defaultSortType", "width", "expandedRowKeys", "defaultExpandAllRows", "defaultExpandedRowKeys", "style", "id", "isTree", "hover", "bordered", "cellBordered", "wordWrap", "loading", "locale", "showHeader", "pagination", "paginationProps", "sortColumn", "rowHeight", "sortType", "headerHeight", "minHeight", "height", "autoHeight", "fillHeight", "rtl", "translate3d", "rowKey", "virtualized", "rowClassName", "rowExpandedHeight", "disabledScroll", "affixHorizontalScrollbar", "loadAnimation", "shouldUpdateScroll", "renderRow", "renderRowExpanded", "renderLoading", "renderEmpty", "onSortColumn", "onScroll", "renderTreeToggle", "onRowClick", "onRowContextMenu", "onExpandChange", "onTouchStart", "onTouchMove", "onTouchEnd", "dataTheme", "tableBodyHeight", "columns", "tableBodyRef", "tableKey"],
|
|
24
24
|
_excluded2 = ["depth", "rowIndex"],
|
|
25
25
|
_excluded3 = ["cellHeight"];
|
|
26
26
|
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); }
|
|
@@ -122,11 +122,13 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
122
122
|
tableBodyHeight = props.tableBodyHeight,
|
|
123
123
|
columns = props.columns,
|
|
124
124
|
tableBodyRef = props.tableBodyRef,
|
|
125
|
+
tableKey = props.tableKey,
|
|
125
126
|
rest = (0, _objectWithoutPropertiesLoose2["default"])(props, _excluded);
|
|
126
127
|
var _useClassNames = (0, _utils.useClassNames)(classPrefix, typeof classPrefix !== 'undefined'),
|
|
127
128
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
128
129
|
mergeCls = _useClassNames.merge,
|
|
129
130
|
prefix = _useClassNames.prefix;
|
|
131
|
+
var childTableRef = (0, _react.useRef)(null);
|
|
130
132
|
|
|
131
133
|
// Use `forceUpdate` to force the component to re-render after manipulating the DOM.
|
|
132
134
|
var _useReducer = (0, _react.useReducer)(function (x) {
|
|
@@ -290,6 +292,7 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
290
292
|
minScrollY: minScrollY,
|
|
291
293
|
minScrollX: minScrollX,
|
|
292
294
|
scrollX: scrollX,
|
|
295
|
+
tableKey: tableKey,
|
|
293
296
|
setScrollX: setScrollX,
|
|
294
297
|
setScrollY: setScrollY,
|
|
295
298
|
forceUpdatePosition: forceUpdatePosition,
|
|
@@ -300,12 +303,14 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
300
303
|
onTouchEnd: onTouchEnd
|
|
301
304
|
}),
|
|
302
305
|
isScrolling = _useScrollListener.isScrolling,
|
|
306
|
+
isChildFocused = _useScrollListener.isChildFocused,
|
|
303
307
|
onScrollHorizontal = _useScrollListener.onScrollHorizontal,
|
|
304
308
|
onScrollVertical = _useScrollListener.onScrollVertical,
|
|
305
309
|
onScrollBody = _useScrollListener.onScrollBody,
|
|
306
310
|
onScrollTop = _useScrollListener.onScrollTop,
|
|
307
311
|
onScrollLeft = _useScrollListener.onScrollLeft,
|
|
308
|
-
onScrollTo = _useScrollListener.onScrollTo
|
|
312
|
+
onScrollTo = _useScrollListener.onScrollTo,
|
|
313
|
+
setIsChildFocused = _useScrollListener.setIsChildFocused;
|
|
309
314
|
var _useCellDescriptor = (0, _utils.useCellDescriptor)({
|
|
310
315
|
children: children,
|
|
311
316
|
rtl: rtl,
|
|
@@ -370,6 +375,12 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
370
375
|
width: widthProp || 'auto',
|
|
371
376
|
height: getTableHeight()
|
|
372
377
|
}, style);
|
|
378
|
+
var handleChildFocus = (0, _react.useCallback)(function () {
|
|
379
|
+
setIsChildFocused(true);
|
|
380
|
+
}, []);
|
|
381
|
+
var handleChildBlur = (0, _react.useCallback)(function () {
|
|
382
|
+
setIsChildFocused(false);
|
|
383
|
+
}, []);
|
|
373
384
|
var renderRowExpanded = (0, _react.useCallback)(function (rowData) {
|
|
374
385
|
var _tableRef$current;
|
|
375
386
|
var styles = {
|
|
@@ -378,8 +389,11 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
378
389
|
};
|
|
379
390
|
if (typeof renderRowExpandedProp === 'function') {
|
|
380
391
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
392
|
+
ref: childTableRef,
|
|
381
393
|
className: prefix('row-expanded'),
|
|
382
|
-
style: styles
|
|
394
|
+
style: styles,
|
|
395
|
+
onMouseEnter: handleChildFocus,
|
|
396
|
+
onMouseLeave: handleChildBlur
|
|
383
397
|
}, renderRowExpandedProp(rowData));
|
|
384
398
|
}
|
|
385
399
|
return null;
|
|
@@ -454,7 +468,9 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
454
468
|
} else {
|
|
455
469
|
rowNode = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_CellGroup["default"], null, (0, _utils.mergeCells)(cells)), shouldRenderExpandedRow && renderRowExpanded(rowData));
|
|
456
470
|
}
|
|
457
|
-
return /*#__PURE__*/_react["default"].createElement(_Row["default"], (0, _extends2["default"])({
|
|
471
|
+
return /*#__PURE__*/_react["default"].createElement(_Row["default"], (0, _extends2["default"])({
|
|
472
|
+
rowRef: childTableRef
|
|
473
|
+
}, restRowProps, {
|
|
458
474
|
"data-depth": depth,
|
|
459
475
|
style: (0, _extends2["default"])({}, rowStyles)
|
|
460
476
|
// zIndexValue={shouldRenderExpandedRow ? 100 : props.zIndexValue}
|
|
@@ -600,7 +616,7 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
600
616
|
return null;
|
|
601
617
|
}
|
|
602
618
|
var scrollbars = [];
|
|
603
|
-
if (hasHorizontalScrollbar) {
|
|
619
|
+
if (hasHorizontalScrollbar && !(tableKey === 'parent' && isChildFocused)) {
|
|
604
620
|
scrollbars.push( /*#__PURE__*/_react["default"].createElement(_Scrollbar["default"], {
|
|
605
621
|
key: "scrollbar",
|
|
606
622
|
tableId: id,
|
|
@@ -613,7 +629,7 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
|
613
629
|
ref: scrollbarXRef
|
|
614
630
|
}));
|
|
615
631
|
}
|
|
616
|
-
if (hasVerticalScrollbar) {
|
|
632
|
+
if (hasVerticalScrollbar && !(tableKey === 'parent' && isChildFocused)) {
|
|
617
633
|
scrollbars.push( /*#__PURE__*/_react["default"].createElement(_Scrollbar["default"], {
|
|
618
634
|
vertical: true,
|
|
619
635
|
key: "vertical-scrollbar",
|
package/lib/qbsTable/QbsTable.js
CHANGED
|
@@ -89,7 +89,9 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
89
89
|
customRowStatus = _ref.customRowStatus,
|
|
90
90
|
searchPlaceholder = _ref.searchPlaceholder,
|
|
91
91
|
_ref$rowExpandedHeigh = _ref.rowExpandedHeight,
|
|
92
|
-
rowExpandedHeight = _ref$rowExpandedHeigh === void 0 ? 517 : _ref$rowExpandedHeigh
|
|
92
|
+
rowExpandedHeight = _ref$rowExpandedHeigh === void 0 ? 517 : _ref$rowExpandedHeigh,
|
|
93
|
+
renderSortIcon = _ref.renderSortIcon,
|
|
94
|
+
tableKey = _ref.tableKey;
|
|
93
95
|
var _useState = (0, _react.useState)(false),
|
|
94
96
|
loading = _useState[0],
|
|
95
97
|
setLoading = _useState[1];
|
|
@@ -353,7 +355,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
353
355
|
dataTheme: dataTheme,
|
|
354
356
|
verticalAlign: 'middle',
|
|
355
357
|
className: " " + classes.headerClass,
|
|
356
|
-
sortKey: child.sortKey
|
|
358
|
+
sortKey: child.sortKey,
|
|
359
|
+
renderSortIcon: renderSortIcon
|
|
357
360
|
}, child.title), child.customCell || child.link ? /*#__PURE__*/_react["default"].createElement(_CustomTableCell.CustomTableCell, {
|
|
358
361
|
renderCell: child.renderCell,
|
|
359
362
|
dataKey: child.field,
|
|
@@ -378,7 +381,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
378
381
|
dataTheme: dataTheme,
|
|
379
382
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
380
383
|
className: " " + classes.headerClass,
|
|
381
|
-
sortKey: sortKey
|
|
384
|
+
sortKey: sortKey,
|
|
385
|
+
renderSortIcon: renderSortIcon
|
|
382
386
|
}, title), customCell || link ? /*#__PURE__*/_react["default"].createElement(_CustomTableCell.CustomTableCell, {
|
|
383
387
|
renderCell: renderCell,
|
|
384
388
|
dataKey: field,
|
|
@@ -402,6 +406,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
402
406
|
className: "qbs-table-border-wrap"
|
|
403
407
|
}, /*#__PURE__*/_react["default"].createElement(_Table["default"], {
|
|
404
408
|
height: height,
|
|
409
|
+
key: tableKey,
|
|
410
|
+
tableKey: tableKey,
|
|
405
411
|
data: data,
|
|
406
412
|
tableBodyRef: tableBodyRef,
|
|
407
413
|
dataTheme: dataTheme,
|
|
@@ -437,7 +443,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
437
443
|
fixed: "left"
|
|
438
444
|
}, /*#__PURE__*/_react["default"].createElement(_HeaderCell["default"], {
|
|
439
445
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
440
|
-
className: " " + classes.headerlClass
|
|
446
|
+
className: " " + classes.headerlClass,
|
|
447
|
+
renderSortIcon: renderSortIcon
|
|
441
448
|
}, "#"), /*#__PURE__*/_react["default"].createElement(_CustomTableCell.ExpandCell, {
|
|
442
449
|
dataKey: dataRowKey,
|
|
443
450
|
expandedRowKeys: expandedRowKeys,
|
|
@@ -452,6 +459,7 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
452
459
|
},
|
|
453
460
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
454
461
|
dataTheme: dataTheme,
|
|
462
|
+
renderSortIcon: renderSortIcon,
|
|
455
463
|
className: "qbs-checkbox-border-none " + classes.headerlClass
|
|
456
464
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
457
465
|
style: {
|
|
@@ -489,7 +497,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
489
497
|
fixed: "left"
|
|
490
498
|
}, /*#__PURE__*/_react["default"].createElement(_HeaderCell["default"], {
|
|
491
499
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
492
|
-
className: " " + classes.headerlClass
|
|
500
|
+
className: " " + classes.headerlClass,
|
|
501
|
+
renderSortIcon: renderSortIcon
|
|
493
502
|
}, ' '), /*#__PURE__*/_react["default"].createElement(_CustomTableCell.CustomRowStatus, {
|
|
494
503
|
getIcon: customRowStatus.getIcon,
|
|
495
504
|
dataKey: customRowStatus.field,
|
|
@@ -503,7 +512,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
503
512
|
}, /*#__PURE__*/_react["default"].createElement(_HeaderCell["default"], {
|
|
504
513
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
505
514
|
className: " " + classes.headerlClass,
|
|
506
|
-
dataTheme: dataTheme
|
|
515
|
+
dataTheme: dataTheme,
|
|
516
|
+
renderSortIcon: renderSortIcon
|
|
507
517
|
}, /*#__PURE__*/_react["default"].createElement(_ColumShowHide["default"], {
|
|
508
518
|
columns: columns,
|
|
509
519
|
onToggle: handleToggle,
|
|
@@ -519,7 +529,8 @@ var QbsTable = function QbsTable(_ref) {
|
|
|
519
529
|
}, /*#__PURE__*/_react["default"].createElement(_HeaderCell["default"], {
|
|
520
530
|
verticalAlign: findGrouped() ? 'middle' : undefined,
|
|
521
531
|
className: " " + classes.headerlClass,
|
|
522
|
-
dataTheme: dataTheme
|
|
532
|
+
dataTheme: dataTheme,
|
|
533
|
+
renderSortIcon: renderSortIcon
|
|
523
534
|
}, !columnToggle ? /*#__PURE__*/_react["default"].createElement(_icons.SettingsIcon, null) : /*#__PURE__*/_react["default"].createElement(_ColumShowHide["default"], {
|
|
524
535
|
columns: columns,
|
|
525
536
|
onToggle: handleToggle,
|
|
@@ -44,6 +44,7 @@ export interface ActionProps {
|
|
|
44
44
|
hide?: (data: any, index?: number) => boolean;
|
|
45
45
|
}
|
|
46
46
|
export interface QbsTableProps {
|
|
47
|
+
tableKey?: string;
|
|
47
48
|
isLoading?: boolean;
|
|
48
49
|
columns: QbsColumnProps[];
|
|
49
50
|
data: readonly any[];
|
|
@@ -110,6 +111,7 @@ export interface QbsTableProps {
|
|
|
110
111
|
getPath?: (data: any) => string;
|
|
111
112
|
};
|
|
112
113
|
rowExpandedHeight?: number;
|
|
114
|
+
renderSortIcon?: (sortType?: 'desc' | 'asc') => React.ReactNode;
|
|
113
115
|
}
|
|
114
116
|
export interface QbsTableToolbarProps {
|
|
115
117
|
title?: string;
|
|
@@ -21,6 +21,7 @@ interface ScrollListenerProps {
|
|
|
21
21
|
minScrollY: React.MutableRefObject<number>;
|
|
22
22
|
minScrollX: React.MutableRefObject<number>;
|
|
23
23
|
scrollX: React.MutableRefObject<number>;
|
|
24
|
+
tableKey?: string;
|
|
24
25
|
setScrollX: (v: number) => void;
|
|
25
26
|
setScrollY: (v: number) => void;
|
|
26
27
|
virtualized?: boolean;
|
|
@@ -39,6 +40,7 @@ interface ScrollListenerProps {
|
|
|
39
40
|
*/
|
|
40
41
|
declare const useScrollListener: (props: ScrollListenerProps) => {
|
|
41
42
|
isScrolling: boolean;
|
|
43
|
+
isChildFocused: boolean;
|
|
42
44
|
onScrollHorizontal: (delta: number) => void;
|
|
43
45
|
onScrollVertical: (delta: number, event: any) => void;
|
|
44
46
|
onScrollBody: (event: any) => void;
|
|
@@ -48,5 +50,6 @@ declare const useScrollListener: (props: ScrollListenerProps) => {
|
|
|
48
50
|
x?: number;
|
|
49
51
|
y?: number;
|
|
50
52
|
}) => void;
|
|
53
|
+
setIsChildFocused: React.Dispatch<React.SetStateAction<boolean>>;
|
|
51
54
|
};
|
|
52
55
|
export default useScrollListener;
|
|
@@ -71,14 +71,18 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
71
71
|
getTableHeight = props.getTableHeight,
|
|
72
72
|
contentHeight = props.contentHeight,
|
|
73
73
|
headerHeight = props.headerHeight,
|
|
74
|
-
rtl = props.rtl
|
|
74
|
+
rtl = props.rtl,
|
|
75
|
+
tableKey = props.tableKey;
|
|
75
76
|
var wheelListener = (0, _react.useRef)();
|
|
76
77
|
var touchStartListener = (0, _react.useRef)();
|
|
77
78
|
var touchMoveListener = (0, _react.useRef)();
|
|
78
79
|
var touchEndListener = (0, _react.useRef)();
|
|
79
80
|
var _useState = (0, _react.useState)(false),
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
isChildFocused = _useState[0],
|
|
82
|
+
setIsChildFocused = _useState[1];
|
|
83
|
+
var _useState2 = (0, _react.useState)(false),
|
|
84
|
+
isScrolling = _useState2[0],
|
|
85
|
+
setScrolling = _useState2[1];
|
|
82
86
|
var touchX = (0, _react.useRef)(0);
|
|
83
87
|
var touchY = (0, _react.useRef)(0);
|
|
84
88
|
var disableEventsTimeoutId = (0, _react.useRef)(null);
|
|
@@ -90,13 +94,13 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
90
94
|
// The vertical starting value within the inertial sliding range.
|
|
91
95
|
var momentumStartY = (0, _react.useRef)(0);
|
|
92
96
|
var shouldHandleWheelX = (0, _react.useCallback)(function (delta) {
|
|
93
|
-
if (delta === 0 || disabledScroll || loading) {
|
|
97
|
+
if (delta === 0 || disabledScroll || loading || isChildFocused) {
|
|
94
98
|
return false;
|
|
95
99
|
}
|
|
96
100
|
return true;
|
|
97
101
|
}, [disabledScroll, loading]);
|
|
98
102
|
var shouldHandleWheelY = (0, _react.useCallback)(function (delta) {
|
|
99
|
-
if (delta === 0 || disabledScroll || loading || autoHeight) {
|
|
103
|
+
if (delta === 0 || disabledScroll || loading || autoHeight || isChildFocused) {
|
|
100
104
|
return false;
|
|
101
105
|
}
|
|
102
106
|
if (typeof scrollY.current === 'number' && typeof minScrollY.current === 'number') {
|
|
@@ -120,9 +124,10 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
120
124
|
* @param momentumOptions The configuration of inertial scrolling is used for the touch event.
|
|
121
125
|
*/
|
|
122
126
|
var handleWheel = (0, _react.useCallback)(function (deltaX, deltaY, momentumOptions, event) {
|
|
123
|
-
if (!tableRef.current) {
|
|
127
|
+
if (!tableRef.current || tableKey === 'parent' && isChildFocused) {
|
|
124
128
|
return;
|
|
125
129
|
}
|
|
130
|
+
// setIsChildFocused(false);
|
|
126
131
|
var nextScrollX = contentWidth.current <= tableWidth.current ? 0 : scrollX.current - deltaX;
|
|
127
132
|
var nextScrollY = scrollY.current - deltaY;
|
|
128
133
|
var y = Math.min(0, nextScrollY < minScrollY.current ? minScrollY.current : nextScrollY);
|
|
@@ -206,6 +211,7 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
206
211
|
if (!isTouching.current) {
|
|
207
212
|
return;
|
|
208
213
|
}
|
|
214
|
+
console.log('handleTouchMove');
|
|
209
215
|
var _event$touches$2 = event.touches[0],
|
|
210
216
|
pageX = _event$touches$2.pageX,
|
|
211
217
|
pageY = _event$touches$2.pageY;
|
|
@@ -239,6 +245,7 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
239
245
|
if (!isTouching.current) {
|
|
240
246
|
return;
|
|
241
247
|
}
|
|
248
|
+
console.log('handleTouchEnd');
|
|
242
249
|
isTouching.current = false;
|
|
243
250
|
var touchDuration = new Date().getTime() - momentumStartTime.current;
|
|
244
251
|
var absDeltaY = Math.abs(scrollY.current - momentumStartY.current);
|
|
@@ -402,12 +409,14 @@ var useScrollListener = function useScrollListener(props) {
|
|
|
402
409
|
}, [handleWheel]);
|
|
403
410
|
return {
|
|
404
411
|
isScrolling: isScrolling,
|
|
412
|
+
isChildFocused: isChildFocused,
|
|
405
413
|
onScrollHorizontal: onScrollHorizontal,
|
|
406
414
|
onScrollVertical: onScrollVertical,
|
|
407
415
|
onScrollBody: onScrollBody,
|
|
408
416
|
onScrollTop: onScrollTop,
|
|
409
417
|
onScrollLeft: onScrollLeft,
|
|
410
|
-
onScrollTo: onScrollTo
|
|
418
|
+
onScrollTo: onScrollTo,
|
|
419
|
+
setIsChildFocused: setIsChildFocused
|
|
411
420
|
};
|
|
412
421
|
};
|
|
413
422
|
var _default = useScrollListener;
|
package/package.json
CHANGED
package/src/Row.tsx
CHANGED
package/src/Table.tsx
CHANGED
|
@@ -223,7 +223,7 @@ export interface TableProps<Row, Key> extends Omit<StandardProps, 'onScroll'> {
|
|
|
223
223
|
rowData?: Row,
|
|
224
224
|
expanded?: boolean
|
|
225
225
|
) => React.ReactNode;
|
|
226
|
-
|
|
226
|
+
tableKey?: string;
|
|
227
227
|
/** Customize what you can do to expand a zone */
|
|
228
228
|
renderRowExpanded?: (rowData?: Row) => React.ReactNode;
|
|
229
229
|
|
|
@@ -339,6 +339,7 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
339
339
|
tableBodyHeight,
|
|
340
340
|
columns,
|
|
341
341
|
tableBodyRef,
|
|
342
|
+
tableKey,
|
|
342
343
|
...rest
|
|
343
344
|
} = props;
|
|
344
345
|
|
|
@@ -347,6 +348,7 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
347
348
|
merge: mergeCls,
|
|
348
349
|
prefix
|
|
349
350
|
} = useClassNames(classPrefix, typeof classPrefix !== 'undefined');
|
|
351
|
+
const childTableRef = useRef<HTMLDivElement>(null);
|
|
350
352
|
|
|
351
353
|
// Use `forceUpdate` to force the component to re-render after manipulating the DOM.
|
|
352
354
|
const [, forceUpdate] = useReducer(x => x + 1, 0);
|
|
@@ -494,12 +496,14 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
494
496
|
|
|
495
497
|
const {
|
|
496
498
|
isScrolling,
|
|
499
|
+
isChildFocused,
|
|
497
500
|
onScrollHorizontal,
|
|
498
501
|
onScrollVertical,
|
|
499
502
|
onScrollBody,
|
|
500
503
|
onScrollTop,
|
|
501
504
|
onScrollLeft,
|
|
502
|
-
onScrollTo
|
|
505
|
+
onScrollTo,
|
|
506
|
+
setIsChildFocused
|
|
503
507
|
} = useScrollListener({
|
|
504
508
|
rtl,
|
|
505
509
|
data: dataProp,
|
|
@@ -521,6 +525,7 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
521
525
|
minScrollY,
|
|
522
526
|
minScrollX,
|
|
523
527
|
scrollX,
|
|
528
|
+
tableKey,
|
|
524
529
|
setScrollX,
|
|
525
530
|
setScrollY,
|
|
526
531
|
forceUpdatePosition,
|
|
@@ -605,13 +610,27 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
605
610
|
...style
|
|
606
611
|
};
|
|
607
612
|
|
|
613
|
+
const handleChildFocus = useCallback(() => {
|
|
614
|
+
setIsChildFocused(true);
|
|
615
|
+
}, []);
|
|
616
|
+
|
|
617
|
+
const handleChildBlur = useCallback(() => {
|
|
618
|
+
setIsChildFocused(false);
|
|
619
|
+
}, []);
|
|
620
|
+
|
|
608
621
|
const renderRowExpanded = useCallback(
|
|
609
622
|
(rowData?: Row) => {
|
|
610
623
|
const styles = { height: rowExpandedHeight, maxWidth: tableRef?.current?.clientWidth };
|
|
611
624
|
|
|
612
625
|
if (typeof renderRowExpandedProp === 'function') {
|
|
613
626
|
return (
|
|
614
|
-
<div
|
|
627
|
+
<div
|
|
628
|
+
ref={childTableRef}
|
|
629
|
+
className={prefix('row-expanded')}
|
|
630
|
+
style={styles}
|
|
631
|
+
onMouseEnter={handleChildFocus}
|
|
632
|
+
onMouseLeave={handleChildBlur}
|
|
633
|
+
>
|
|
615
634
|
{renderRowExpandedProp(rowData)}
|
|
616
635
|
</div>
|
|
617
636
|
);
|
|
@@ -729,6 +748,7 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
729
748
|
}
|
|
730
749
|
return (
|
|
731
750
|
<Row
|
|
751
|
+
rowRef={childTableRef}
|
|
732
752
|
{...restRowProps}
|
|
733
753
|
data-depth={depth}
|
|
734
754
|
style={{
|
|
@@ -926,7 +946,7 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
926
946
|
|
|
927
947
|
const scrollbars: React.ReactNode[] = [];
|
|
928
948
|
|
|
929
|
-
if (hasHorizontalScrollbar) {
|
|
949
|
+
if (hasHorizontalScrollbar && !(tableKey === 'parent' && isChildFocused)) {
|
|
930
950
|
scrollbars.push(
|
|
931
951
|
<Scrollbar
|
|
932
952
|
key="scrollbar"
|
|
@@ -940,7 +960,7 @@ const Table = React.forwardRef(<Row extends RowDataType, Key>(props: TableProps<
|
|
|
940
960
|
);
|
|
941
961
|
}
|
|
942
962
|
|
|
943
|
-
if (hasVerticalScrollbar) {
|
|
963
|
+
if (hasVerticalScrollbar && !(tableKey === 'parent' && isChildFocused)) {
|
|
944
964
|
scrollbars.push(
|
|
945
965
|
<Scrollbar
|
|
946
966
|
vertical
|
|
@@ -74,7 +74,9 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
74
74
|
tableBodyHeight,
|
|
75
75
|
customRowStatus,
|
|
76
76
|
searchPlaceholder,
|
|
77
|
-
rowExpandedHeight=517,
|
|
77
|
+
rowExpandedHeight = 517,
|
|
78
|
+
renderSortIcon,
|
|
79
|
+
tableKey
|
|
78
80
|
}) => {
|
|
79
81
|
const [loading, setLoading] = useState(false);
|
|
80
82
|
const [columns, setColumns] = useState(propColumn);
|
|
@@ -83,7 +85,6 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
83
85
|
const [isOpen, setIsOpen] = useState(false);
|
|
84
86
|
const prevColumns = useRef<any | null>();
|
|
85
87
|
const tableBodyRef = useRef<HTMLDivElement>(null);
|
|
86
|
-
|
|
87
88
|
const handleSortColumn = useCallback(
|
|
88
89
|
(sortColumn: any, sortType: any) => {
|
|
89
90
|
setLoading(true);
|
|
@@ -355,6 +356,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
355
356
|
verticalAlign={'middle'}
|
|
356
357
|
className={` ${classes.headerClass}`}
|
|
357
358
|
sortKey={child.sortKey}
|
|
359
|
+
renderSortIcon={renderSortIcon}
|
|
358
360
|
>
|
|
359
361
|
{child.title}
|
|
360
362
|
</HeaderCell>
|
|
@@ -393,6 +395,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
393
395
|
verticalAlign={findGrouped() ? 'middle' : undefined}
|
|
394
396
|
className={` ${classes.headerClass}`}
|
|
395
397
|
sortKey={sortKey}
|
|
398
|
+
renderSortIcon={renderSortIcon}
|
|
396
399
|
>
|
|
397
400
|
{title}
|
|
398
401
|
</HeaderCell>
|
|
@@ -430,6 +433,8 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
430
433
|
<div className="qbs-table-border-wrap">
|
|
431
434
|
<Table
|
|
432
435
|
height={height}
|
|
436
|
+
key={tableKey}
|
|
437
|
+
tableKey={tableKey}
|
|
433
438
|
data={data}
|
|
434
439
|
tableBodyRef={tableBodyRef}
|
|
435
440
|
dataTheme={dataTheme}
|
|
@@ -463,6 +468,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
463
468
|
<HeaderCell
|
|
464
469
|
verticalAlign={findGrouped() ? 'middle' : undefined}
|
|
465
470
|
className={` ${classes.headerlClass}`}
|
|
471
|
+
renderSortIcon={renderSortIcon}
|
|
466
472
|
>
|
|
467
473
|
#
|
|
468
474
|
</HeaderCell>
|
|
@@ -479,6 +485,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
479
485
|
style={{ padding: 0 }}
|
|
480
486
|
verticalAlign={findGrouped() ? 'middle' : undefined}
|
|
481
487
|
dataTheme={dataTheme}
|
|
488
|
+
renderSortIcon={renderSortIcon}
|
|
482
489
|
className={`qbs-checkbox-border-none ${classes.headerlClass}`}
|
|
483
490
|
>
|
|
484
491
|
<div
|
|
@@ -522,6 +529,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
522
529
|
<HeaderCell
|
|
523
530
|
verticalAlign={findGrouped() ? 'middle' : undefined}
|
|
524
531
|
className={` ${classes.headerlClass}`}
|
|
532
|
+
renderSortIcon={renderSortIcon}
|
|
525
533
|
>
|
|
526
534
|
{' '}
|
|
527
535
|
</HeaderCell>
|
|
@@ -543,6 +551,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
543
551
|
verticalAlign={findGrouped() ? 'middle' : undefined}
|
|
544
552
|
className={` ${classes.headerlClass}`}
|
|
545
553
|
dataTheme={dataTheme}
|
|
554
|
+
renderSortIcon={renderSortIcon}
|
|
546
555
|
>
|
|
547
556
|
<ColumToggle
|
|
548
557
|
columns={columns}
|
|
@@ -564,6 +573,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
564
573
|
verticalAlign={findGrouped() ? 'middle' : undefined}
|
|
565
574
|
className={` ${classes.headerlClass}`}
|
|
566
575
|
dataTheme={dataTheme}
|
|
576
|
+
renderSortIcon={renderSortIcon}
|
|
567
577
|
>
|
|
568
578
|
{!columnToggle ? (
|
|
569
579
|
<SettingsIcon />
|
|
@@ -49,6 +49,8 @@ export interface ActionProps {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export interface QbsTableProps {
|
|
52
|
+
tableKey?: string;
|
|
53
|
+
|
|
52
54
|
isLoading?: boolean;
|
|
53
55
|
columns: QbsColumnProps[];
|
|
54
56
|
data: readonly any[];
|
|
@@ -113,6 +115,7 @@ export interface QbsTableProps {
|
|
|
113
115
|
getPath?: (data: any) => string;
|
|
114
116
|
};
|
|
115
117
|
rowExpandedHeight?: number;
|
|
118
|
+
renderSortIcon?: (sortType?: 'desc' | 'asc') => React.ReactNode;
|
|
116
119
|
}
|
|
117
120
|
|
|
118
121
|
export interface QbsTableToolbarProps {
|
|
@@ -40,6 +40,7 @@ interface ScrollListenerProps {
|
|
|
40
40
|
minScrollY: React.MutableRefObject<number>;
|
|
41
41
|
minScrollX: React.MutableRefObject<number>;
|
|
42
42
|
scrollX: React.MutableRefObject<number>;
|
|
43
|
+
tableKey?: string;
|
|
43
44
|
setScrollX: (v: number) => void;
|
|
44
45
|
setScrollY: (v: number) => void;
|
|
45
46
|
virtualized?: boolean;
|
|
@@ -104,13 +105,15 @@ const useScrollListener = (props: ScrollListenerProps) => {
|
|
|
104
105
|
getTableHeight,
|
|
105
106
|
contentHeight,
|
|
106
107
|
headerHeight,
|
|
107
|
-
rtl
|
|
108
|
+
rtl,
|
|
109
|
+
tableKey
|
|
108
110
|
} = props;
|
|
109
111
|
|
|
110
112
|
const wheelListener = useRef<ListenerCallback>();
|
|
111
113
|
const touchStartListener = useRef<ListenerCallback>();
|
|
112
114
|
const touchMoveListener = useRef<ListenerCallback>();
|
|
113
115
|
const touchEndListener = useRef<ListenerCallback>();
|
|
116
|
+
const [isChildFocused, setIsChildFocused] = useState(false);
|
|
114
117
|
|
|
115
118
|
const [isScrolling, setScrolling] = useState(false);
|
|
116
119
|
const touchX = useRef(0);
|
|
@@ -126,7 +129,7 @@ const useScrollListener = (props: ScrollListenerProps) => {
|
|
|
126
129
|
|
|
127
130
|
const shouldHandleWheelX = useCallback(
|
|
128
131
|
(delta: number) => {
|
|
129
|
-
if (delta === 0 || disabledScroll || loading) {
|
|
132
|
+
if (delta === 0 || disabledScroll || loading || isChildFocused) {
|
|
130
133
|
return false;
|
|
131
134
|
}
|
|
132
135
|
|
|
@@ -137,7 +140,7 @@ const useScrollListener = (props: ScrollListenerProps) => {
|
|
|
137
140
|
|
|
138
141
|
const shouldHandleWheelY = useCallback(
|
|
139
142
|
(delta: number) => {
|
|
140
|
-
if (delta === 0 || disabledScroll || loading || autoHeight) {
|
|
143
|
+
if (delta === 0 || disabledScroll || loading || autoHeight || isChildFocused) {
|
|
141
144
|
return false;
|
|
142
145
|
}
|
|
143
146
|
|
|
@@ -171,10 +174,10 @@ const useScrollListener = (props: ScrollListenerProps) => {
|
|
|
171
174
|
momentumOptions?: { duration: number; bezier: string },
|
|
172
175
|
event?: React.MouseEvent
|
|
173
176
|
) => {
|
|
174
|
-
if (!tableRef.current) {
|
|
177
|
+
if (!tableRef.current || (tableKey === 'parent' && isChildFocused)) {
|
|
175
178
|
return;
|
|
176
179
|
}
|
|
177
|
-
|
|
180
|
+
// setIsChildFocused(false);
|
|
178
181
|
const nextScrollX = contentWidth.current <= tableWidth.current ? 0 : scrollX.current - deltaX;
|
|
179
182
|
const nextScrollY = scrollY.current - deltaY;
|
|
180
183
|
|
|
@@ -294,6 +297,8 @@ const useScrollListener = (props: ScrollListenerProps) => {
|
|
|
294
297
|
if (!isTouching.current) {
|
|
295
298
|
return;
|
|
296
299
|
}
|
|
300
|
+
console.log('handleTouchMove');
|
|
301
|
+
|
|
297
302
|
const { pageX, pageY } = event.touches[0];
|
|
298
303
|
const deltaX = touchX.current - pageX;
|
|
299
304
|
const deltaY = autoHeight ? 0 : touchY.current - pageY;
|
|
@@ -333,6 +338,7 @@ const useScrollListener = (props: ScrollListenerProps) => {
|
|
|
333
338
|
if (!isTouching.current) {
|
|
334
339
|
return;
|
|
335
340
|
}
|
|
341
|
+
console.log('handleTouchEnd');
|
|
336
342
|
isTouching.current = false;
|
|
337
343
|
const touchDuration = new Date().getTime() - momentumStartTime.current;
|
|
338
344
|
const absDeltaY = Math.abs(scrollY.current - momentumStartY.current);
|
|
@@ -521,12 +527,14 @@ const useScrollListener = (props: ScrollListenerProps) => {
|
|
|
521
527
|
|
|
522
528
|
return {
|
|
523
529
|
isScrolling,
|
|
530
|
+
isChildFocused,
|
|
524
531
|
onScrollHorizontal,
|
|
525
532
|
onScrollVertical,
|
|
526
533
|
onScrollBody,
|
|
527
534
|
onScrollTop,
|
|
528
535
|
onScrollLeft,
|
|
529
|
-
onScrollTo
|
|
536
|
+
onScrollTo,
|
|
537
|
+
setIsChildFocused
|
|
530
538
|
};
|
|
531
539
|
};
|
|
532
540
|
|