diff --git a/projects/igniteui-angular/src/lib/grids/grid/row-pinning.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/row-pinning.spec.ts
index 565030a52d3..08ca884ae43 100644
--- a/projects/igniteui-angular/src/lib/grids/grid/row-pinning.spec.ts
+++ b/projects/igniteui-angular/src/lib/grids/grid/row-pinning.spec.ts
@@ -8,6 +8,7 @@ import { configureTestSuite } from '../../test-utils/configure-suite';
import { ColumnPinningPosition, RowPinningPosition } from '../common/enums';
import { IPinningConfig } from '../common/grid.interface';
import { SampleTestData } from '../../test-utils/sample-test-data.spec';
+import { verifyLayoutHeadersAreAligned, verifyDOMMatchesLayoutSettings } from '../../test-utils/helper-utils.spec';
import { GridFunctions } from '../../test-utils/grid-functions.spec';
import { SortingDirection } from '../../data-operations/sorting-expression.interface';
import { IgxGridTransaction } from '../tree-grid';
@@ -24,6 +25,7 @@ describe('Row Pinning #grid', () => {
TestBed.configureTestingModule({
declarations: [
GridRowPinningComponent,
+ GridRowPinningWithMRLComponent,
GridRowPinningWithMDVComponent,
GridRowPinningWithTransactionsComponent
],
@@ -389,6 +391,92 @@ describe('Row Pinning #grid', () => {
});
});
+ describe('Row pinning with MRL', () => {
+ beforeEach(fakeAsync(() => {
+ fix = TestBed.createComponent(GridRowPinningWithMRLComponent);
+ fix.detectChanges();
+ grid = fix.componentInstance.instance;
+ tick();
+ fix.detectChanges();
+ }));
+
+ it('should pin/unpin correctly to top', () => {
+ // pin
+ grid.pinRow(fix.componentInstance.data[1]);
+ fix.detectChanges();
+
+ expect(grid.pinnedRows.length).toBe(1);
+ const pinRowContainer = fix.debugElement.queryAll(By.css(FIXED_ROW_CONTAINER));
+ expect(pinRowContainer.length).toBe(1);
+ expect(pinRowContainer[0].children.length).toBe(1);
+ expect(pinRowContainer[0].children[0].context.rowID).toBe(fix.componentInstance.data[1]);
+ expect(pinRowContainer[0].children[0].nativeElement).toBe(grid.getRowByIndex(0).nativeElement);
+
+ expect(grid.getRowByIndex(0).pinned).toBeTruthy();
+ const gridPinnedRow = grid.pinnedRows[0];
+ const pinnedRowCells = gridPinnedRow.cells.toArray();
+ const headerCells = grid.headerGroups.first.children.toArray();
+
+ // headers are aligned to cells
+ verifyLayoutHeadersAreAligned(headerCells, pinnedRowCells);
+ verifyDOMMatchesLayoutSettings(gridPinnedRow, fix.componentInstance.colGroups);
+
+ // unpin
+ const row = grid.pinnedRows[0];
+ row.pinned = false;
+ fix.detectChanges();
+
+ expect(grid.pinnedRows.length).toBe(0);
+ expect(row.pinned).toBeFalsy();
+
+ const gridUnpinnedRow = grid.getRowByIndex(1);
+ const unpinnedRowCells = gridUnpinnedRow.cells.toArray();
+
+ verifyLayoutHeadersAreAligned(headerCells, unpinnedRowCells);
+ verifyDOMMatchesLayoutSettings(gridUnpinnedRow, fix.componentInstance.colGroups);
+ });
+
+ it('should pin/unpin correctly to bottom', () => {
+
+ fix.componentInstance.pinningConfig = { columns: ColumnPinningPosition.Start, rows: RowPinningPosition.Bottom };
+ fix.detectChanges();
+
+ // pin
+ grid.pinRow(fix.componentInstance.data[1]);
+ fix.detectChanges();
+
+ expect(grid.pinnedRows.length).toBe(1);
+ const pinRowContainer = fix.debugElement.queryAll(By.css(FIXED_ROW_CONTAINER));
+ expect(pinRowContainer.length).toBe(1);
+ expect(pinRowContainer[0].children.length).toBe(1);
+ expect(pinRowContainer[0].children[0].context.rowID).toBe(fix.componentInstance.data[1]);
+ expect(pinRowContainer[0].children[0].nativeElement)
+ .toBe(grid.getRowByIndex(fix.componentInstance.data.length - 1).nativeElement);
+
+ expect(grid.getRowByIndex(fix.componentInstance.data.length - 1).pinned).toBeTruthy();
+ const gridPinnedRow = grid.pinnedRows[0];
+ const pinnedRowCells = gridPinnedRow.cells.toArray();
+ const headerCells = grid.headerGroups.first.children.toArray();
+
+ // headers are aligned to cells
+ verifyLayoutHeadersAreAligned(headerCells, pinnedRowCells);
+ verifyDOMMatchesLayoutSettings(gridPinnedRow, fix.componentInstance.colGroups);
+
+ // unpin
+ const row = grid.pinnedRows[0];
+ row.pinned = false;
+ fix.detectChanges();
+
+ expect(grid.pinnedRows.length).toBe(0);
+ expect(row.pinned).toBeFalsy();
+
+ const gridUnpinnedRow = grid.getRowByIndex(1);
+ const unpinnedRowCells = gridUnpinnedRow.cells.toArray();
+
+ verifyLayoutHeadersAreAligned(headerCells, unpinnedRowCells);
+ verifyDOMMatchesLayoutSettings(gridUnpinnedRow, fix.componentInstance.colGroups);
+ });
+ });
});
@Component({
@@ -410,6 +498,32 @@ export class GridRowPinningComponent {
public instance: IgxGridComponent;
}
+@Component({
+ template: `
+
+
+
+
+
+ `
+})
+export class GridRowPinningWithMRLComponent extends GridRowPinningComponent {
+ cols: Array = [
+ { field: 'ID', rowStart: 1, colStart: 1 },
+ { field: 'CompanyName', rowStart: 1, colStart: 2 },
+ { field: 'ContactName', rowStart: 1, colStart: 3 },
+ { field: 'ContactTitle', rowStart: 2, colStart: 1, rowEnd: 4, colEnd: 4 },
+ ];
+ colGroups = [
+ {
+ group: 'group1',
+ columns: this.cols
+ }
+ ];
+}
+
@Component({
template: `