diff --git a/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss
index cc5ce39d8af..283ea92dccb 100644
--- a/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss
+++ b/projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss
@@ -718,6 +718,9 @@
%grid-display-container-tr {
width: 100%;
overflow: visible;
+ flex: 1;
+ // needed to override the min-width of the column headers
+ min-width: 0;
}
%grid-mrl-block {
@@ -915,7 +918,7 @@
}
padding-block: 0;
- flex: 1 0 auto;
+ flex: 0 0 auto;
background: inherit;
z-index: 4;
cursor: move;
diff --git a/projects/igniteui-angular/src/lib/grids/columns/column.component.ts b/projects/igniteui-angular/src/lib/grids/columns/column.component.ts
index 30c7ab57c89..e3324cc3a3d 100644
--- a/projects/igniteui-angular/src/lib/grids/columns/column.component.ts
+++ b/projects/igniteui-angular/src/lib/grids/columns/column.component.ts
@@ -1619,13 +1619,6 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
return this.pinningPosition === ColumnPinningPosition.End && pinnedCols[0] === this;
}
- /** @hidden @internal **/
- public get rightPinnedOffset(): string {
- return this.pinned && this.pinningPosition === ColumnPinningPosition.End ?
- - this.grid.pinnedEndWidth - this.grid.pinnedStartWidth + 'px' :
- null;
- }
-
/** @hidden @internal **/
public get gridRowSpan(): number {
return this.rowEnd && this.rowStart ? this.rowEnd - this.rowStart : 1;
diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html b/projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html
index f0eecaecd20..ed28bdfba17 100644
--- a/projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html
+++ b/projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html
@@ -65,7 +65,6 @@
{
@@ -134,7 +134,7 @@ describe('IgxGrid - Column Pinning #grid', () => {
expect(GridFunctions.isCellPinned(cell)).toBe(true);
});
- it('should allow pinning/unpinning via the column API', () => {
+ it('should allow pinning/unpinning via the column API', () => {
const col = grid.getColumnByName('ID');
col.pinned = true;
@@ -694,9 +694,14 @@ describe('IgxGrid - Column Pinning #grid', () => {
expect(grid.getColumnByName('CompanyName').isFirstPinned).toBeTruthy();
const row = grid.gridAPI.get_row_by_index(0).nativeElement;
// check cells are rendered after main display container and have left offset
+ const headerRowDisplayContainer = fix.debugElement.query(By.directive(IgxGridHeaderRowComponent)).nativeElement.querySelector(".igx-display-container");
+ const displayContainerRect = headerRowDisplayContainer.getBoundingClientRect();
+ let xAxis = displayContainerRect.x + displayContainerRect.width;
for (let i = 0; i <= pinnedCols.length - 1; i++) {
const elem = row.children[i + 1];
- expect(parseInt((elem as any).style.left, 10)).toBe(-330);
+ const rect = elem.getBoundingClientRect();
+ expect(rect.x).toBe(xAxis);
+ xAxis += rect.width;
}
// check correct headers have left border
@@ -715,9 +720,13 @@ describe('IgxGrid - Column Pinning #grid', () => {
const row = grid.gridAPI.get_row_by_index(0).nativeElement;
expect(GridFunctions.getRowDisplayContainer(fix, 0)).toBeTruthy();
+ const headerRowdisplayContainer = fix.debugElement.query(By.directive(IgxGridHeaderRowComponent)).nativeElement.querySelector(".igx-display-container");
+ const displayContainerRect = headerRowdisplayContainer.getBoundingClientRect();
+ const xAxis = displayContainerRect.x + displayContainerRect.width;
+
expect(row.children[1].classList.contains(`${CELL_PINNED_CLASS}-first`)).toBeTruthy();
expect(row.children[1].classList.contains(GRID_MRL_BLOCK)).toBeTruthy();
- expect(parseInt((row.children[1] as any).style.left, 10)).toEqual(-408);
+ expect(row.children[1].getBoundingClientRect().x).toEqual(xAxis);
// check correct headers have left border
const firstPinnedHeader = grid.headerGroupsList.find(group => group.isPinned);
@@ -810,7 +819,7 @@ describe('IgxGrid - Column Pinning #grid', () => {
.toEqual(grid.pinnedStartColumns.length + grid.unpinnedColumns.length + 1);
expect(col.pinningPosition).toBe(ColumnPinningPosition.End);
- let cell = grid.gridAPI.get_cell_by_index(0, 'ID');
+ const cell = grid.gridAPI.get_cell_by_index(0, 'ID');
expect(cell.visibleColumnIndex)
.toEqual(grid.pinnedStartColumns.length + grid.unpinnedColumns.length + 1);
expect(GridFunctions.isCellPinned(cell)).toBe(true);
@@ -854,10 +863,10 @@ describe('IgxGrid - Column Pinning #grid', () => {
expect(grid.unpinnedColumns[1].field).toEqual('ID');
expect(grid.getColumnByName('ID').pinned).toBeFalsy();
- // move 'ID' column to the left pinned area, before ContractName
- grid.moveColumn(grid.getColumnByName('ID'), grid.getColumnByName('ContactName'), DropPosition.BeforeDropTarget);
- tick();
- fix.detectChanges();
+ // move 'ID' column to the left pinned area, before ContractName
+ grid.moveColumn(grid.getColumnByName('ID'), grid.getColumnByName('ContactName'), DropPosition.BeforeDropTarget);
+ tick();
+ fix.detectChanges();
// verify column is pinned at the correct place
expect(grid.pinnedStartColumns[0].field).toEqual('ID');
@@ -887,7 +896,7 @@ describe('IgxGrid - Column Pinning #grid', () => {
expect(cellFax.active).toBe(false);
expect(cellCompanyName.active).toBe(true);
- // navigate from left pinned area into unpinned and back
+ // navigate from left pinned area into unpinned and back
grid.navigation.activeNode = { row: 0, column: 0 };
fix.detectChanges();
expect(grid.getCellByColumn(0, "ContactName").active).toBe(true);
@@ -938,25 +947,33 @@ describe('IgxGrid - Column Pinning #grid', () => {
expect(grid.getColumnByName('Country').isFirstPinned).toBeTruthy();
expect(grid.getColumnByName('ContactTitle').isLastPinned).toBeTruthy();
const row = grid.gridAPI.get_row_by_index(0).nativeElement;
- // check pinnedEnd cells are rendered after main display container and have left offset
- for (let i = pinnedStart.length ; i <= pinnedStart.length + pinnedEnd.length - 1; i++) {
+ fix.detectChanges();
+ // check pinnedEnd cells are rendered after main display container
+ const displayContainerBoundingBox = row.querySelector('igx-display-container').getBoundingClientRect();
+ let initialStart = displayContainerBoundingBox.x + displayContainerBoundingBox.width;
+ for (let i = pinnedStart.length; i <= pinnedStart.length + pinnedEnd.length - 1; i++) {
const elem = row.children[i + 1];
- expect(parseFloat((elem as any).style.left)).toBe(- (grid.pinnedEndWidth + grid.pinnedStartWidth));
+ const rect = elem.getBoundingClientRect();
+ expect(rect.x).toBe(initialStart);
+ initialStart += rect.width
}
- // check pinnedStart cells are rendered before main display container and have no left offset
- for (let i = 0; i <= pinnedStart.length - 1; i++) {
+ // check pinnedStart cells are rendered before main display container
+ initialStart = displayContainerBoundingBox.x;
+ for (let i = pinnedStart.length - 1; i >= 0; i--) {
const elem = row.children[i];
- expect((elem as any).style.left).toBe('');
+ const rect = elem.getBoundingClientRect();
+ expect(rect.x + rect.width).toBe(initialStart);
+ initialStart -= rect.width;
}
// check correct headers are pinned and in correct order.
const pinnedHeaders = grid.headerGroupsList.filter(group => group.isPinned);
expect(pinnedHeaders.length).toBe(10);
expect(pinnedHeaders.map(x => x.column.header || x.column.field))
- .toEqual(['General Information', 'CompanyName', 'Person Details',
- 'ContactName', 'ContactTitle', 'Address Information',
- 'Country', 'Region', 'City', 'Address']);
+ .toEqual(['General Information', 'CompanyName', 'Person Details',
+ 'ContactName', 'ContactTitle', 'Address Information',
+ 'Country', 'Region', 'City', 'Address']);
});
diff --git a/projects/igniteui-angular/src/lib/grids/headers/grid-header-row.component.html b/projects/igniteui-angular/src/lib/grids/headers/grid-header-row.component.html
index 3163dd403cf..db081d07bc9 100644
--- a/projects/igniteui-angular/src/lib/grids/headers/grid-header-row.component.html
+++ b/projects/igniteui-angular/src/lib/grids/headers/grid-header-row.component.html
@@ -99,8 +99,7 @@
[ngStyle]="column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger"
[column]="column"
[style.min-width]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
- [style.flex-basis]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
- [style.left]="column.rightPinnedOffset">
+ [style.flex-basis]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL">
}
}
diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts
index 69f87fbed2b..153afd981d6 100644
--- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts
+++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts
@@ -667,6 +667,18 @@ describe('Basic IgxHierarchicalGrid #hGrid', () => {
);
jasmine.getEnv().allowRespy(false);
});
+
+ it('should calculate correct column headers width when rowSelection + expand indicators', () => {
+ hierarchicalGrid.rowSelection = 'multiple';
+ fixture.detectChanges();
+
+ const headerRowElement = hierarchicalGrid.nativeElement.querySelector("igx-grid-header-row");
+ const headerRowDiv = headerRowElement.querySelector(".igx-grid__tr");
+ const headerRowChildren = Array.from(headerRowDiv.children);
+
+ const elementsWidth = headerRowChildren.reduce((acc,el) => acc+(el as HTMLElement).offsetWidth, 0);
+ expect(elementsWidth).toEqual((headerRowDiv as HTMLElement).offsetWidth);
+ });
});
describe('IgxHierarchicalGrid Row Islands #hGrid', () => {
@@ -1689,7 +1701,7 @@ describe('Basic IgxHierarchicalGrid #hGrid', () => {
UIInteractions.simulateClickAndSelectEvent(row.expander);
fixture.detectChanges();
- let childGrid = hierarchicalGrid.gridAPI.getChildGrids()[0];
+ const childGrid = hierarchicalGrid.gridAPI.getChildGrids()[0];
const childRow = childGrid.gridAPI.get_row_by_index(0) as IgxHierarchicalRowComponent;
UIInteractions.simulateClickAndSelectEvent(childRow.expander);
fixture.detectChanges();
diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.html b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.html
index 131773bd307..03e1ee23d83 100644
--- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.html
+++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.html
@@ -119,7 +119,6 @@
[style.min-width]="col.resolvedWidth"
[style.max-width]="col.resolvedWidth"
[style.flex-basis]="col.resolvedWidth"
- [style.left]="col.rightPinnedOffset"
[width]="col.getCellWidth()"
[visibleColumnIndex]="col.visibleIndex"
[value]="data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath"
diff --git a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.html b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.html
index 5d507b28fba..48e0f2c7746 100644
--- a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.html
+++ b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.html
@@ -305,7 +305,7 @@
[ngStyle]="column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger" [column]="column"
[style.min-width]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
[style.flex-basis]="column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
- [style.left]="column.rightPinnedOffset" (pointerdown)="grid.navigation.focusOutRowHeader($event)">
+ (pointerdown)="grid.navigation.focusOutRowHeader($event)">
}
}
diff --git a/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.html b/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.html
index 6588859cf17..c2710596cae 100644
--- a/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.html
+++ b/projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.html
@@ -55,8 +55,7 @@
[style.min-height.px]="minHeight"
[style.min-width]="col.resolvedWidth"
[style.max-width]="col.resolvedWidth"
- [style.flex-basis]="col.resolvedWidth"
- [style.left]="col.rightPinnedOffset">
+ [style.flex-basis]="col.resolvedWidth">
}
diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts
index d02235cd5e2..648f70ae17e 100644
--- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts
+++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts
@@ -1431,8 +1431,8 @@ describe('IgxTreeGrid - Integration #tGrid', () => {
fix = TestBed.createComponent(IgxTreeGridRowEditingHierarchicalDSTransactionComponent);
fix.detectChanges();
treeGrid = fix.componentInstance.treeGrid as IgxTreeGridComponent;
- treeGrid.columnList.find(x => x.field === 'Age').pinned = true;
treeGrid.pinning.columns = 1;
+ treeGrid.columnList.find(x => x.field === 'Age').pinned = true;
fix.detectChanges();
const rightMostGridPart = treeGrid.nativeElement.getBoundingClientRect().right;
diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-row.component.html b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-row.component.html
index f1143950558..06b7dbc89fd 100644
--- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-row.component.html
+++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-row.component.html
@@ -123,7 +123,6 @@
[style.min-width]="col.resolvedWidth"
[style.max-width]="col.resolvedWidth"
[style.flex-basis]="col.resolvedWidth"
- [style.left]="col.rightPinnedOffset"
[width]="col.getCellWidth()"
[visibleColumnIndex]="col.visibleIndex"
[value]="data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath"
@@ -155,7 +154,6 @@
[style.min-width]="col.resolvedWidth"
[style.max-width]="col.resolvedWidth"
[style.flex-basis]="col.resolvedWidth"
- [style.left]="col.rightPinnedOffset"
[width]="col.getCellWidth()"
[visibleColumnIndex]="col.visibleIndex"
[value]="data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath"