Skip to content

Commit 65f3876

Browse files
fix(AnalyticalTable): Don't modify read-only classList (#339)
* fix(AnalyticalTable): Don't modify read-only classList * Simplify Table Body Classes
1 parent de4e72d commit 65f3876

File tree

3 files changed

+21
-43
lines changed

3 files changed

+21
-43
lines changed

packages/main/src/components/AnalyticalTable/AnayticalTable.jss.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ const styles = ({ parameters }: JSSTheme) => ({
3838
tbody: {
3939
position: 'relative',
4040
zIndex: 0,
41-
backgroundColor: parameters.sapUiListBackground
41+
backgroundColor: parameters.sapUiListBackground,
42+
overflowX: 'hidden !important',
43+
overflowY: 'auto !important'
4244
},
4345
alternateRowColor: {
4446
backgroundColor: parameters.sapUiListHeaderBackground
@@ -97,10 +99,6 @@ const styles = ({ parameters }: JSSTheme) => ({
9799
whiteSpace: 'nowrap',
98100
alignItems: 'center'
99101
},
100-
virtualTableBody: {
101-
overflowX: 'hidden !important',
102-
overflowY: 'auto !important'
103-
},
104102
noDataContainer: {
105103
display: 'flex',
106104
justifyContent: 'center',

packages/main/src/components/AnalyticalTable/__snapshots__/AnalyticalTable.test.tsx.snap

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,10 @@ exports[`AnalyticalTable Alternate Row Color 1`] = `
279279
</div>
280280
</header>
281281
<div
282-
class="AnalyticalTable--virtualTableBody-"
282+
class="AnalyticalTable--tbody-"
283283
style="position: relative; height: 220px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
284284
>
285285
<div
286-
class="AnalyticalTable--tbody-"
287286
style="height: 220px; width: 100%;"
288287
>
289288
<div
@@ -751,11 +750,10 @@ exports[`AnalyticalTable Loading - Loader 1`] = `
751750
</div>
752751
</header>
753752
<div
754-
class="AnalyticalTable--virtualTableBody-"
753+
class="AnalyticalTable--tbody-"
755754
style="position: relative; height: 220px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
756755
>
757756
<div
758-
class="AnalyticalTable--tbody-"
759757
style="height: 220px; width: 100%;"
760758
>
761759
<div
@@ -1834,11 +1832,10 @@ exports[`AnalyticalTable Tree Table 1`] = `
18341832
</div>
18351833
</header>
18361834
<div
1837-
class="AnalyticalTable--virtualTableBody-"
1835+
class="AnalyticalTable--tbody- AnalyticalTable--selectable-"
18381836
style="position: relative; height: 220px; width: 636px; overflow: auto; will-change: transform; direction: ltr;"
18391837
>
18401838
<div
1841-
class="AnalyticalTable--tbody- AnalyticalTable--selectable-"
18421839
style="height: 220px; width: 100%;"
18431840
>
18441841
<div
@@ -2362,11 +2359,10 @@ exports[`AnalyticalTable custom row height 1`] = `
23622359
</div>
23632360
</header>
23642361
<div
2365-
class="AnalyticalTable--virtualTableBody-"
2362+
class="AnalyticalTable--tbody-"
23662363
style="position: relative; height: 300px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
23672364
>
23682365
<div
2369-
class="AnalyticalTable--tbody-"
23702366
style="height: 300px; width: 100%;"
23712367
>
23722368
<div
@@ -3123,11 +3119,10 @@ exports[`AnalyticalTable test Asc desc 1`] = `
31233119
</div>
31243120
</header>
31253121
<div
3126-
class="AnalyticalTable--virtualTableBody-"
3122+
class="AnalyticalTable--tbody-"
31273123
style="position: relative; height: 220px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
31283124
>
31293125
<div
3130-
class="AnalyticalTable--tbody-"
31313126
style="height: 220px; width: 100%;"
31323127
>
31333128
<div
@@ -3599,11 +3594,10 @@ exports[`AnalyticalTable test Asc desc 2`] = `
35993594
</div>
36003595
</header>
36013596
<div
3602-
class="AnalyticalTable--virtualTableBody-"
3597+
class="AnalyticalTable--tbody-"
36033598
style="position: relative; height: 220px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
36043599
>
36053600
<div
3606-
class="AnalyticalTable--tbody-"
36073601
style="height: 220px; width: 100%;"
36083602
>
36093603
<div
@@ -4075,11 +4069,10 @@ exports[`AnalyticalTable test Asc desc 3`] = `
40754069
</div>
40764070
</header>
40774071
<div
4078-
class="AnalyticalTable--virtualTableBody-"
4072+
class="AnalyticalTable--tbody-"
40794073
style="position: relative; height: 220px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
40804074
>
40814075
<div
4082-
class="AnalyticalTable--tbody-"
40834076
style="height: 220px; width: 100%;"
40844077
>
40854078
<div
@@ -4547,11 +4540,10 @@ exports[`AnalyticalTable test drag and drop of a draggable column 1`] = `
45474540
</div>
45484541
</header>
45494542
<div
4550-
class="AnalyticalTable--virtualTableBody-"
4543+
class="AnalyticalTable--tbody-"
45514544
style="position: relative; height: 220px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
45524545
>
45534546
<div
4554-
class="AnalyticalTable--tbody-"
45554547
style="height: 220px; width: 100%;"
45564548
>
45574549
<div
@@ -5019,11 +5011,10 @@ exports[`AnalyticalTable without selection Column 1`] = `
50195011
</div>
50205012
</header>
50215013
<div
5022-
class="AnalyticalTable--virtualTableBody-"
5014+
class="AnalyticalTable--tbody- AnalyticalTable--selectable-"
50235015
style="position: relative; height: 220px; width: 600px; overflow: auto; will-change: transform; direction: ltr;"
50245016
>
50255017
<div
5026-
class="AnalyticalTable--tbody- AnalyticalTable--selectable-"
50275018
style="height: 220px; width: 100%;"
50285019
>
50295020
<div

packages/main/src/components/AnalyticalTable/virtualization/VirtualTableBody.tsx

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import '@ui5/webcomponents-icons/dist/icons/navigation-down-arrow';
22
import '@ui5/webcomponents-icons/dist/icons/navigation-right-arrow';
3+
import { StyleClassHelper } from '@ui5/webcomponents-react-base/lib/StyleClassHelper';
34
import { TableSelectionMode } from '@ui5/webcomponents-react/lib/TableSelectionMode';
4-
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
5+
import React, { useCallback, useMemo, useRef } from 'react';
56
import { FixedSizeList } from 'react-window';
67
import { VirtualTableRow } from './VirtualTableRow';
78

@@ -24,24 +25,7 @@ export const VirtualTableBody = (props) => {
2425
selectedFlatRows
2526
} = props;
2627

27-
const innerDivRef = useRef(null);
28-
29-
useEffect(() => {
30-
if (innerDivRef.current) {
31-
innerDivRef.current.classList = '';
32-
innerDivRef.current.classList.add(classes.tbody);
33-
if (selectionMode === TableSelectionMode.SINGLE_SELECT || selectionMode === TableSelectionMode.MULTI_SELECT) {
34-
innerDivRef.current.classList.add(classes.selectable);
35-
}
36-
}
37-
}, [
38-
innerDivRef.current,
39-
selectionMode,
40-
classes.tbody,
41-
classes.selectable,
42-
alternateRowColor,
43-
classes.alternateRowColor
44-
]);
28+
const innerDivRef = useRef<HTMLElement>();
4529

4630
const itemCount = Math.max(minRows, rows.length);
4731
const overscan = overscanCount ? overscanCount : Math.floor(visibleRows / 2);
@@ -74,9 +58,14 @@ export const VirtualTableBody = (props) => {
7458
[prepareRow]
7559
);
7660

61+
const classNames = StyleClassHelper.of(classes.tbody);
62+
if (selectionMode === TableSelectionMode.SINGLE_SELECT || selectionMode === TableSelectionMode.MULTI_SELECT) {
63+
classNames.put(classes.selectable);
64+
}
65+
7766
return (
7867
<FixedSizeList
79-
className={classes.virtualTableBody}
68+
className={classNames.valueOf()}
8069
ref={reactWindowRef}
8170
height={tableBodyHeight}
8271
width={totalColumnsWidth}

0 commit comments

Comments
 (0)