Skip to content

Commit 24b8fd5

Browse files
authored
fix(datatable, cell): consistency when multiple frozen columns exist … (#8180)
* fix(datatable, cell): consistency when multiple frozen columns exist and better alignment when there are non-frozen columns in between frozen columns * fix: run prettier
1 parent 54aa03e commit 24b8fd5

3 files changed

Lines changed: 28 additions & 10 deletions

File tree

components/lib/datatable/BodyRow.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,14 @@ export const BodyRow = React.memo((props) => {
520520
let left = 0;
521521
let prev = elementRef.current && elementRef.current.previousElementSibling;
522522

523-
if (prev && prev.classList.contains('p-frozen-column')) {
524-
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
523+
while (prev) {
524+
if (prev.classList.contains('p-frozen-column')) {
525+
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
526+
elementRef.current.style.left = left + 'px';
527+
break;
528+
}
529+
530+
prev = prev.previousElementSibling;
525531
}
526532

527533
styleObject.left = left + 'px';

components/lib/datatable/FooterCell.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export const FooterCell = React.memo((props) => {
4545

4646
if (align === 'right') {
4747
let right = 0;
48-
let next = elementRef.current.nextElementSibling;
48+
let next = elementRef.current && elementRef.current.nextElementSibling;
4949

5050
if (next && next.classList.contains('p-frozen-column')) {
5151
right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0);
@@ -54,10 +54,16 @@ export const FooterCell = React.memo((props) => {
5454
styleObject.right = right + 'px';
5555
} else {
5656
let left = 0;
57-
let prev = elementRef.current.previousElementSibling;
57+
let prev = elementRef.current && elementRef.current.previousElementSibling;
5858

59-
if (prev && prev.classList.contains('p-frozen-column')) {
60-
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
59+
while (prev) {
60+
if (prev && prev.classList.contains('p-frozen-column')) {
61+
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
62+
elementRef.current.style.left = left + 'px';
63+
break;
64+
}
65+
66+
prev = prev.previousElementSibling;
6167
}
6268

6369
styleObject.left = left + 'px';

components/lib/datatable/HeaderCell.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export const HeaderCell = React.memo((props) => {
106106

107107
if (align === 'right') {
108108
let right = 0;
109-
let next = elementRef.current.nextElementSibling;
109+
let next = elementRef.current && elementRef.current.nextElementSibling;
110110

111111
if (next && next.classList.contains('p-frozen-column')) {
112112
right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0);
@@ -115,10 +115,16 @@ export const HeaderCell = React.memo((props) => {
115115
styleObject.right = right + 'px';
116116
} else {
117117
let left = 0;
118-
let prev = elementRef.current.previousElementSibling;
118+
let prev = elementRef.current && elementRef.current.previousElementSibling;
119119

120-
if (prev && prev.classList.contains('p-frozen-column')) {
121-
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
120+
while (prev) {
121+
if (prev && prev.classList.contains('p-frozen-column')) {
122+
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
123+
elementRef.current.style.left = left + 'px';
124+
break;
125+
}
126+
127+
prev = prev.previousElementSibling;
122128
}
123129

124130
styleObject.left = left + 'px';

0 commit comments

Comments
 (0)