Skip to content

Commit 2bc857a

Browse files
authored
fix(grid): Add flex:1 to the display container so that it grows or shrinks to the available width of the grid 19.2.x (#16037)
1 parent 9d88d6e commit 2bc857a

File tree

11 files changed

+34
-30
lines changed

11 files changed

+34
-30
lines changed

projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,9 @@
12531253
%grid-display-container-tr {
12541254
width: 100%;
12551255
overflow: visible;
1256+
flex: 1;
1257+
// needed to override the min-width of the column headers
1258+
min-width: 0;
12561259
}
12571260

12581261
%grid-mrl-block {
@@ -1450,7 +1453,7 @@
14501453
}
14511454

14521455
padding-block: 0;
1453-
flex: 1 0 auto;
1456+
flex: 0 0 auto;
14541457
background: inherit;
14551458
z-index: 4;
14561459
cursor: move;

projects/igniteui-angular/src/lib/grids/columns/column.component.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,13 +1597,6 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
15971597
return !this.grid.isPinningToStart && pinnedCols[0] === this;
15981598
}
15991599

1600-
/** @hidden @internal **/
1601-
public get rightPinnedOffset(): string {
1602-
return this.pinned && !this.grid.isPinningToStart ?
1603-
- this.grid.pinnedWidth - this.grid.headerFeaturesWidth + 'px' :
1604-
null;
1605-
}
1606-
16071600
/** @hidden @internal **/
16081601
public get gridRowSpan(): number {
16091602
return this.rowEnd && this.rowStart ? this.rowEnd - this.rowStart : 1;

projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
<div class="igx-grid__mrl-block"
6666
[class.igx-grid__td--pinned-last]="col.hasLastPinnedChildColumn"
6767
[class.igx-grid__td--pinned-first]="col.hasFirstPinnedChildColumn"
68-
[style.left]="mrlRightPinnedOffset"
6968
[ngStyle]="{
7069
'grid-template-rows':col.getGridTemplate(true),
7170
'grid-template-columns':col.getGridTemplate(false),
@@ -113,7 +112,6 @@
113112
[style.min-width]="col.resolvedWidth"
114113
[style.max-width]="col.resolvedWidth"
115114
[style.flex-basis]="col.resolvedWidth"
116-
[style.left]="col.rightPinnedOffset"
117115
[width]="col.getCellWidth()"
118116
[visibleColumnIndex]="col.visibleIndex"
119117
[value]="data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath"

projects/igniteui-angular/src/lib/grids/grid/grid-row.component.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@ export class IgxGridRowComponent extends IgxRowDirective {
2626
};
2727
}
2828

29-
public get mrlRightPinnedOffset(): string {
30-
return !this.grid.isPinningToStart ?
31-
- this.grid.pinnedWidth - this.grid.headerFeaturesWidth + 'px' :
32-
null;
33-
}
34-
3529
public getContextMRL(pinnedCols, row) {
3630
return {
3731
$implicit: pinnedCols,

projects/igniteui-angular/src/lib/grids/grid/grid.pinning.spec.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { IgxGridComponent } from './grid.component';
2525
import { DropPosition } from '../moving/moving.service';
2626
import { clearGridSubs, setupGridScrollDetection } from '../../test-utils/helper-utils.spec';
2727
import { SortingDirection } from '../../data-operations/sorting-strategy';
28-
import { IPinningConfig } from '../public_api';
28+
import { IgxGridHeaderRowComponent, IPinningConfig } from '../public_api';
2929

3030
describe('IgxGrid - Column Pinning #grid', () => {
3131

@@ -130,7 +130,7 @@ describe('IgxGrid - Column Pinning #grid', () => {
130130
expect(GridFunctions.isCellPinned(cell)).toBe(true);
131131
});
132132

133-
it('should allow pinning/unpinning via the column API', () => {
133+
it('should allow pinning/unpinning via the column API', () => {
134134
const col = grid.getColumnByName('ID');
135135

136136
col.pinned = true;
@@ -569,7 +569,7 @@ describe('IgxGrid - Column Pinning #grid', () => {
569569
});
570570

571571
it('should correctly pin column to right when row selectors are enabled.', () => {
572-
grid.rowSelection = GridSelectionMode.multiple;
572+
grid.rowSelection = GridSelectionMode.multiple;
573573
fix.detectChanges();
574574

575575
// check row DOM
@@ -690,9 +690,14 @@ describe('IgxGrid - Column Pinning #grid', () => {
690690
expect(grid.getColumnByName('CompanyName').isFirstPinned).toBeTruthy();
691691
const row = grid.gridAPI.get_row_by_index(0).nativeElement;
692692
// check cells are rendered after main display container and have left offset
693+
const headerRowDisplayContainer = fix.debugElement.query(By.directive(IgxGridHeaderRowComponent)).nativeElement.querySelector(".igx-display-container");
694+
const displayContainerRect = headerRowDisplayContainer.getBoundingClientRect();
695+
let xAxis = displayContainerRect.x + displayContainerRect.width;
693696
for (let i = 0; i <= pinnedCols.length - 1; i++) {
694697
const elem = row.children[i + 1];
695-
expect(parseInt((elem as any).style.left, 10)).toBe(-330);
698+
const rect = elem.getBoundingClientRect();
699+
expect(rect.x).toBe(xAxis);
700+
xAxis += rect.width;
696701
}
697702

698703
// check correct headers have left border
@@ -711,9 +716,13 @@ describe('IgxGrid - Column Pinning #grid', () => {
711716
const row = grid.gridAPI.get_row_by_index(0).nativeElement;
712717
expect(GridFunctions.getRowDisplayContainer(fix, 0)).toBeTruthy();
713718

719+
const headerRowdisplayContainer = fix.debugElement.query(By.directive(IgxGridHeaderRowComponent)).nativeElement.querySelector(".igx-display-container");
720+
const displayContainerRect = headerRowdisplayContainer.getBoundingClientRect();
721+
const xAxis = displayContainerRect.x + displayContainerRect.width;
722+
714723
expect(row.children[1].classList.contains(`${CELL_PINNED_CLASS}-first`)).toBeTruthy();
715724
expect(row.children[1].classList.contains(GRID_MRL_BLOCK)).toBeTruthy();
716-
expect(parseInt((row.children[1] as any).style.left, 10)).toEqual(-408);
725+
expect(row.children[1].getBoundingClientRect().x).toEqual(xAxis);
717726

718727
// check correct headers have left border
719728
const firstPinnedHeader = grid.headerGroupsList.find(group => group.isPinned);

projects/igniteui-angular/src/lib/grids/headers/grid-header-row.component.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,7 @@
9999
[ngStyle]="column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger"
100100
[column]="column"
101101
[style.min-width]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
102-
[style.flex-basis]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
103-
[style.left]="column.rightPinnedOffset">
102+
[style.flex-basis]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL">
104103
</igx-grid-header-group>
105104
}
106105
}

projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,18 @@ describe('Basic IgxHierarchicalGrid #hGrid', () => {
667667
);
668668
jasmine.getEnv().allowRespy(false);
669669
});
670+
671+
it('should calculate correct column headers width when rowSelection + expand indicators', () => {
672+
hierarchicalGrid.rowSelection = 'multiple';
673+
fixture.detectChanges();
674+
675+
const headerRowElement = hierarchicalGrid.nativeElement.querySelector("igx-grid-header-row");
676+
const headerRowDiv = headerRowElement.querySelector(".igx-grid__tr");
677+
const headerRowChildren = Array.from(headerRowDiv.children);
678+
679+
const elementsWidth = headerRowChildren.reduce((acc,el) => acc+(el as HTMLElement).offsetWidth, 0);
680+
expect(elementsWidth).toEqual((headerRowDiv as HTMLElement).offsetWidth);
681+
});
670682
});
671683

672684
describe('IgxHierarchicalGrid Row Islands #hGrid', () => {
@@ -1689,7 +1701,7 @@ describe('Basic IgxHierarchicalGrid #hGrid', () => {
16891701
UIInteractions.simulateClickAndSelectEvent(row.expander);
16901702
fixture.detectChanges();
16911703

1692-
let childGrid = hierarchicalGrid.gridAPI.getChildGrids()[0];
1704+
const childGrid = hierarchicalGrid.gridAPI.getChildGrids()[0];
16931705
const childRow = childGrid.gridAPI.get_row_by_index(0) as IgxHierarchicalRowComponent;
16941706
UIInteractions.simulateClickAndSelectEvent(childRow.expander);
16951707
fixture.detectChanges();

projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@
119119
[style.min-width]="col.resolvedWidth"
120120
[style.max-width]="col.resolvedWidth"
121121
[style.flex-basis]="col.resolvedWidth"
122-
[style.left]="col.rightPinnedOffset"
123122
[width]="col.getCellWidth()"
124123
[visibleColumnIndex]="col.visibleIndex"
125124
[value]="data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath"

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@
305305
[ngStyle]="column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger" [column]="column"
306306
[style.min-width]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
307307
[style.flex-basis]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
308-
[style.left]="column.rightPinnedOffset" (pointerdown)="grid.navigation.focusOutRowHeader($event)">
308+
(pointerdown)="grid.navigation.focusOutRowHeader($event)">
309309
</igx-grid-header-group>
310310
}
311311
}

projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@
5555
[style.min-height.px]="minHeight"
5656
[style.min-width]="col.resolvedWidth"
5757
[style.max-width]="col.resolvedWidth"
58-
[style.flex-basis]="col.resolvedWidth"
59-
[style.left]="col.rightPinnedOffset">
58+
[style.flex-basis]="col.resolvedWidth">
6059
</igx-grid-summary-cell>
6160
}
6261
</ng-template>

0 commit comments

Comments
 (0)