Skip to content

Commit e2b382d

Browse files
authored
Merge branch 'master' into ibarakov/fix-12787
2 parents f6e6e1e + ce92337 commit e2b382d

File tree

4 files changed

+101
-8
lines changed

4 files changed

+101
-8
lines changed

projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,44 @@ describe('igxGridEditingActions #grid ', () => {
195195
expect(pinningIcons.length).toBe(1);
196196
expect(pinningIcons[0].nativeElement.className.indexOf('igx-button--disabled') === -1).toBeTruthy();
197197
});
198+
199+
it('should emit correct rowPinning arguments with pinning actions', () => {
200+
spyOn(grid.rowPinning, 'emit').and.callThrough();
201+
const row = grid.getRowByIndex(1);
202+
203+
actionStrip.show(grid.rowList.toArray()[1]);
204+
fixture.detectChanges();
205+
let pinningIcon = fixture.debugElement.queryAll(By.css(`igx-grid-pinning-actions igx-icon`))[0];
206+
207+
pinningIcon.parent.triggerEventHandler('click', new Event('click'));
208+
fixture.detectChanges();
209+
210+
expect(grid.rowPinning.emit).toHaveBeenCalledTimes(1);
211+
expect(grid.rowPinning.emit).toHaveBeenCalledWith({
212+
rowID : row.key,
213+
insertAtIndex: 0,
214+
isPinned: true,
215+
row,
216+
cancel: false
217+
});
218+
219+
const row5 = grid.getRowByIndex(4);
220+
actionStrip.show(grid.rowList.toArray()[4]);
221+
fixture.detectChanges();
222+
pinningIcon = fixture.debugElement.queryAll(By.css(`igx-grid-pinning-actions igx-icon`))[0];
223+
224+
pinningIcon.parent.triggerEventHandler('click', new Event('click'));
225+
fixture.detectChanges();
226+
227+
expect(grid.rowPinning.emit).toHaveBeenCalledTimes(2);
228+
expect(grid.rowPinning.emit).toHaveBeenCalledWith({
229+
rowID : row5.key,
230+
insertAtIndex: 1,
231+
isPinned: true,
232+
row: row5,
233+
cancel: false
234+
});
235+
});
198236
});
199237

200238
describe('auto show/hide', () => {

projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective
8181
}
8282
const row = this.strip.context;
8383
const grid = row.grid;
84-
grid.pinRow(row.key);
84+
grid.pinRow(row.key, grid.pinnedRecords.length);
8585
this.strip.hide();
8686
}
8787

projects/igniteui-angular/src/lib/grids/api.service.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,12 @@ export class GridBaseAPIService<T extends GridType> implements GridServiceType {
152152
}
153153
if (this.grid.primaryKey === cell.column.field) {
154154
if (this.grid.pinnedRecords.length > 0) {
155-
if (this.grid.pinnedRecords.find(r => r == cell.rowData)) {
156-
const pinnedRowIndex = this.grid.pinnedRecords.indexOf(cell.rowData);
155+
const rowIndex = this.grid.pinnedRecords.indexOf(cell.rowData);
156+
if (rowIndex !== -1) {
157157
const previousRowId = cell.value;
158-
this.unpin_row(previousRowId);
159-
this.pin_row(args.newValue, pinnedRowIndex);
158+
const rowType = this.grid.getRowByIndex(cell.rowIndex);
159+
this.unpin_row(previousRowId, rowType);
160+
this.pin_row(args.newValue, rowIndex, rowType);
160161
}
161162
}
162163
if (this.grid.selectionService.isRowSelected(cell.id.rowID)) {
@@ -566,13 +567,13 @@ export class GridBaseAPIService<T extends GridType> implements GridServiceType {
566567
grid._pinnedRecordIDs.splice(insertIndex, 0, rowID);
567568
}
568569

569-
public unpin_row(rowID: any): void {
570+
public unpin_row(rowID: any, row: RowType): void {
570571
const grid = (this.grid as any);
571572
const index = grid._pinnedRecordIDs.indexOf(rowID);
572573
if (index === -1) {
573574
return;
574575
}
575-
const eventArgs = this.get_pin_row_event_args(rowID, null , null, false);
576+
const eventArgs = this.get_pin_row_event_args(rowID, null , row, false);
576577
grid.rowPinning.emit(eventArgs);
577578

578579
if (eventArgs.cancel) {
@@ -589,7 +590,7 @@ export class GridBaseAPIService<T extends GridType> implements GridServiceType {
589590
cancel: false
590591
}
591592
if (typeof index === 'number') {
592-
eventArgs.insertAtIndex = index;
593+
eventArgs.insertAtIndex = index <= this.grid.pinnedRecords.length ? index : this.grid.pinnedRecords.length;
593594
}
594595
return eventArgs;
595596
}

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,60 @@ describe('Row Pinning #grid', () => {
176176
expect(grid.rowPinning.emit).toHaveBeenCalledTimes(2);
177177
});
178178

179+
it('should emit correct rowPinning arguments on pin/unpin.', () => {
180+
spyOn(grid.rowPinning, 'emit').and.callThrough();
181+
182+
const row = grid.getRowByIndex(5);
183+
const rowID = row.key;
184+
row.pin();
185+
186+
expect(grid.rowPinning.emit).toHaveBeenCalledTimes(1);
187+
expect(grid.rowPinning.emit).toHaveBeenCalledWith({
188+
rowID,
189+
insertAtIndex: 0,
190+
isPinned: true,
191+
row,
192+
cancel: false
193+
});
194+
195+
const row2 = grid.getRowByIndex(3);
196+
const rowID2 = row2.key;
197+
row2.pin();
198+
199+
expect(grid.rowPinning.emit).toHaveBeenCalledTimes(2);
200+
expect(grid.rowPinning.emit).toHaveBeenCalledWith({
201+
rowID: rowID2,
202+
insertAtIndex: 1,
203+
isPinned: true,
204+
row: row2,
205+
cancel: false
206+
});
207+
});
208+
209+
it('should be able to set pin possition of row on pin/unpin events.', () => {
210+
const row1 = grid.getRowByIndex(0);
211+
row1.pin();
212+
expect(row1.pinned).toBe(true);
213+
expect(grid.pinnedRecords.length).toBe(1);
214+
expect(grid.pinnedRecords[0]).toEqual(row1.data);
215+
216+
const row2 = grid.getRowByIndex(2);
217+
row2.pin();
218+
grid.pinRow(row2.key);
219+
expect(row2.pinned).toBe(true);
220+
expect(grid.pinnedRecords.length).toBe(2);
221+
expect(grid.pinnedRecords[1]).toEqual(row2.data);
222+
223+
grid.rowPinning.subscribe((e: IPinRowEventArgs) => {
224+
e.insertAtIndex = 0;
225+
});
226+
const row5 = grid.getRowByIndex(5);
227+
row5.pin();
228+
expect(row2.pinned).toBe(true);
229+
expect(grid.pinnedRecords.length).toBe(3);
230+
expect(grid.pinnedRecords[0]).toEqual(row5.data);
231+
});
232+
179233
it('should emit rowPinned on pin/unpin.', () => {
180234
spyOn(grid.rowPinned, 'emit').and.callThrough();
181235

0 commit comments

Comments
 (0)