Skip to content

Commit f28a20d

Browse files
authored
Merge branch '15.0.x' into tree-grid-tests
2 parents a02c2da + 31df26d commit f28a20d

File tree

4 files changed

+102
-6
lines changed

4 files changed

+102
-6
lines changed

projects/igniteui-angular/src/lib/grids/common/crud.service.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,9 @@ export class IgxGridCRUDService extends IgxRowAddCrudState {
634634

635635
this.grid.navigateTo(this.row.index, -1);
636636
// when selecting the dummy row we need to adjust for top pinned rows
637-
const indexAdjust = this.grid.isRowPinningToTop && !this.addRowParent.isPinned ? this.grid.pinnedRows.length : 0;
637+
const indexAdjust = this.grid.isRowPinningToTop ?
638+
(!this.addRowParent.isPinned ? this.grid.pinnedRows.length : 0) :
639+
(!this.addRowParent.isPinned ? 0 : this.grid.unpinnedRecords.length);
638640

639641
// TODO: Type this without shoving a bunch of internal properties in the row type
640642
const dummyRow = this.grid.gridAPI.get_row_by_index(this.row.index + indexAdjust) as any;

projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-add-row-ui.spec.ts

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { TestBed, waitForAsync, ComponentFixture } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
44
import { IgxTreeGridModule, IgxTreeGridComponent } from './public_api';
5-
import { IgxTreeGridEditActionsComponent } from '../../test-utils/tree-grid-components.spec';
5+
import { IgxTreeGridEditActionsComponent, IgxTreeGridEditActionsPinningComponent } from '../../test-utils/tree-grid-components.spec';
66
import { configureTestSuite } from '../../test-utils/configure-suite';
77
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
88
import { IgxActionStripModule, IgxActionStripComponent } from '../../action-strip/public_api';
@@ -23,7 +23,8 @@ describe('IgxTreeGrid - Add Row UI #tGrid', () => {
2323
beforeAll(waitForAsync(() => {
2424
TestBed.configureTestingModule({
2525
declarations: [
26-
IgxTreeGridEditActionsComponent
26+
IgxTreeGridEditActionsComponent,
27+
IgxTreeGridEditActionsPinningComponent
2728
],
2829
imports: [IgxTreeGridModule, NoopAnimationsModule, IgxActionStripModule]
2930
}).compileComponents();
@@ -126,5 +127,70 @@ describe('IgxTreeGrid - Add Row UI #tGrid', () => {
126127

127128
expect(treeGrid.rowList.length).toBe(1);
128129
});
130+
131+
it('should add row on correct position and enter edit mode from pinned row - pinning position: Top', () => {
132+
fix = TestBed.createComponent(IgxTreeGridEditActionsPinningComponent);
133+
fix.detectChanges();
134+
treeGrid = fix.componentInstance.treeGrid;
135+
actionStrip = fix.componentInstance.actionStrip;
136+
137+
treeGrid.pinRow(1);
138+
treeGrid.pinRow(6);
139+
140+
expect(treeGrid.getRowByKey(1).pinned).toBeTrue();
141+
expect(treeGrid.getRowByKey(6).pinned).toBeTrue();
142+
143+
actionStrip.show(treeGrid.rowList.toArray()[1]);
144+
fix.detectChanges();
145+
146+
const editActions = fix.debugElement.queryAll(By.css(`igx-grid-action-button`));
147+
148+
expect(editActions[3].componentInstance.iconName).toBe('add-row');
149+
const addRowBtn = editActions[3].componentInstance;
150+
addRowBtn.actionClick.emit();
151+
fix.detectChanges();
152+
endTransition();
153+
154+
let addRow = treeGrid.gridAPI.get_row_by_index(2);
155+
expect(addRow.addRowUI).toBeTrue();
156+
expect(addRow.inEditMode).toBeTrue();
157+
158+
treeGrid.gridAPI.crudService.endEdit(true);
159+
fix.detectChanges();
160+
});
161+
162+
it('should add row on correct position and enter edit mode from pinned row - pinning position: Bottom', () => {
163+
fix = TestBed.createComponent(IgxTreeGridEditActionsPinningComponent);
164+
fix.detectChanges();
165+
treeGrid = fix.componentInstance.treeGrid;
166+
actionStrip = fix.componentInstance.actionStrip;
167+
168+
treeGrid.pinning = fix.componentInstance.pinningConfig;
169+
fix.detectChanges();
170+
171+
treeGrid.pinRow(1);
172+
treeGrid.pinRow(6);
173+
174+
expect(treeGrid.getRowByKey(1).pinned).toBeTrue();
175+
expect(treeGrid.getRowByKey(6).pinned).toBeTrue();
176+
177+
actionStrip.show(treeGrid.rowList.last);
178+
fix.detectChanges();
179+
180+
const editActions = fix.debugElement.queryAll(By.css(`igx-grid-action-button`));
181+
182+
expect(editActions[3].componentInstance.iconName).toBe('add-row');
183+
const addRowBtn = editActions[3].componentInstance;
184+
addRowBtn.actionClick.emit();
185+
fix.detectChanges();
186+
endTransition();
187+
188+
let addRow = treeGrid.gridAPI.get_row_by_index(10);
189+
expect(addRow.addRowUI).toBeTrue();
190+
expect(addRow.inEditMode).toBeTrue();
191+
192+
treeGrid.gridAPI.crudService.endEdit(true);
193+
fix.detectChanges();
194+
});
129195
});
130196
});

projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.pipes.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,12 @@ export class IgxTreeGridAddRowPipe implements PipeTransform {
315315
}
316316
const copy = collection.slice(0);
317317
const rec = (this.grid.crudService.row as IgxAddRow).recordRef;
318-
copy.splice(this.grid.crudService.row.index, 0, rec);
318+
if (this.grid.crudService.addRowParent.isPinned) {
319+
const parentRowIndex = copy.findIndex(record => record.rowID === this.grid.crudService.addRowParent.rowID);
320+
copy.splice(parentRowIndex + 1, 0, rec);
321+
} else {
322+
copy.splice(this.grid.crudService.row.index, 0, rec);
323+
}
319324
this.grid.records.set(rec.key, rec);
320325
return copy;
321326
}

projects/igniteui-angular/src/lib/test-utils/tree-grid-components.spec.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { Component, ViewChild, OnInit } from '@angular/core';
22
import { IgxTreeGridComponent } from '../grids/tree-grid/tree-grid.component';
33
import { SampleTestData } from './sample-test-data.spec';
4-
import { IgxSummaryOperand, IgxNumberSummaryOperand, IgxSummaryResult } from '../grids/public_api';
4+
import { IgxSummaryOperand, IgxNumberSummaryOperand, IgxSummaryResult, IPinningConfig } from '../grids/public_api';
55
import { DisplayDensity } from '../core/displayDensity';
66
import { IgxActionStripComponent } from '../action-strip/action-strip.component';
7-
import { DefaultSortingStrategy } from 'igniteui-angular';
7+
import { DefaultSortingStrategy, RowPinningPosition } from 'igniteui-angular';
88
import { IGroupingExpression } from '../data-operations/grouping-expression.interface';
99
import { IgxTreeGridGroupByAreaComponent } from '../grids/grouping/tree-grid-group-by-area.component';
1010

@@ -1021,3 +1021,26 @@ export class IgxTreeGridPrimaryForeignKeyCascadeSelectionComponent {
10211021
public actionStrip: IgxActionStripComponent;
10221022
public data = SampleTestData.employeeSmallPrimaryForeignKeyTreeData();
10231023
}
1024+
1025+
@Component({
1026+
template: `
1027+
<igx-tree-grid #treeGrid [data]="data" primaryKey="ID" foreignKey="ParentID" width="900px" height="600px" [rowEditable]="true">
1028+
<igx-column [field]="'ID'" dataType="number"></igx-column>
1029+
<igx-column [field]="'ParentID'" dataType="number"></igx-column>
1030+
<igx-column [field]="'Name'" dataType="string"></igx-column>
1031+
<igx-column [field]="'JobTitle'" dataType="string"></igx-column>
1032+
<igx-column [field]="'Age'" dataType="number"></igx-column>
1033+
<igx-action-strip #actionStrip>
1034+
<igx-grid-pinning-actions></igx-grid-pinning-actions>
1035+
<igx-grid-editing-actions [addRow]="true"></igx-grid-editing-actions>
1036+
</igx-action-strip>
1037+
</igx-tree-grid>
1038+
`
1039+
})
1040+
export class IgxTreeGridEditActionsPinningComponent {
1041+
@ViewChild(IgxTreeGridComponent, { static: true }) public treeGrid: IgxTreeGridComponent;
1042+
@ViewChild('actionStrip', { read: IgxActionStripComponent, static: true })
1043+
public actionStrip: IgxActionStripComponent;
1044+
public data = SampleTestData.employeePrimaryForeignKeyTreeData();
1045+
public pinningConfig: IPinningConfig = { rows: RowPinningPosition.Bottom };
1046+
}

0 commit comments

Comments
 (0)