Skip to content

Commit b936e45

Browse files
committed
fix(grid): keep edit mode when tabbing #7308
1 parent c501480 commit b936e45

File tree

4 files changed

+62
-12
lines changed

4 files changed

+62
-12
lines changed

projects/igniteui-angular/src/lib/grids/grid-base.directive.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828
Directive
2929
} from '@angular/core';
3030
import ResizeObserver from 'resize-observer-polyfill';
31-
import { Subject, combineLatest, pipe } from 'rxjs';
31+
import { Subject, pipe } from 'rxjs';
3232
import { takeUntil, first, filter, throttleTime, map } from 'rxjs/operators';
3333
import { cloneArray, isEdge, isNavigationKey, flatten, mergeObjects, isIE } from '../core/utils';
3434
import { DataType } from '../data-operations/data-util';
@@ -2822,6 +2822,15 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
28222822
this.setupColumns();
28232823
}
28242824

2825+
/**
2826+
* @hidden
2827+
* @internal
2828+
*/
2829+
public setFilteredSortedData(data) {
2830+
this._filteredSortedData = data;
2831+
this.refreshSearch(true, false);
2832+
}
2833+
28252834
/**
28262835
* @hidden @internal
28272836
*/
@@ -4025,7 +4034,7 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
40254034
* ```
40264035
* @param updateActiveInfo
40274036
*/
4028-
public refreshSearch(updateActiveInfo?: boolean): number {
4037+
public refreshSearch(updateActiveInfo?: boolean, endEdit = true): number {
40294038
if (this.lastSearchInfo.searchText) {
40304039
this.rebuildMatchCache();
40314040

@@ -4040,7 +4049,12 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
40404049
});
40414050
}
40424051

4043-
return this.find(this.lastSearchInfo.searchText, 0, this.lastSearchInfo.caseSensitive, this.lastSearchInfo.exactMatch, false);
4052+
return this.find(this.lastSearchInfo.searchText,
4053+
0,
4054+
this.lastSearchInfo.caseSensitive,
4055+
this.lastSearchInfo.exactMatch,
4056+
false,
4057+
endEdit);
40444058
} else {
40454059
return 0;
40464060
}
@@ -5357,12 +5371,14 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
53575371
return col.field + col._calcWidth;
53585372
}
53595373

5360-
private find(text: string, increment: number, caseSensitive?: boolean, exactMatch?: boolean, scroll?: boolean) {
5374+
private find(text: string, increment: number, caseSensitive?: boolean, exactMatch?: boolean, scroll?: boolean, endEdit = true) {
53615375
if (!this.rowList) {
53625376
return 0;
53635377
}
53645378

5365-
this.endEdit(false);
5379+
if (endEdit) {
5380+
this.endEdit(false);
5381+
}
53665382

53675383
if (!text) {
53685384
this.clearSearch();
@@ -5438,10 +5454,6 @@ export class IgxGridBaseDirective extends DisplayDensityBase implements
54385454
get filteredSortedData(): any[] {
54395455
return this._filteredSortedData;
54405456
}
5441-
set filteredSortedData(value: any[]) {
5442-
this._filteredSortedData = value;
5443-
this.refreshSearch(true);
5444-
}
54455457

54465458
/**
54475459
* @hidden

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class IgxGridSortingPipe implements PipeTransform {
3838
} else {
3939
result = DataUtil.sort(cloneArray(collection), expressions, sorting);
4040
}
41-
grid.filteredSortedData = result;
41+
grid.setFilteredSortedData(result);
4242

4343
return result;
4444
}

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

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { IForOfState } from '../../directives/for-of/for_of.directive';
99
import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition';
1010
import { DefaultSortingStrategy } from '../../data-operations/sorting-strategy';
1111
import { configureTestSuite } from '../../test-utils/configure-suite';
12-
import { wait } from '../../test-utils/ui-interactions.spec';
12+
import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec';
1313
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
1414
import { DataType } from '../../data-operations/data-util';
1515
import { setupGridScrollDetection } from '../../test-utils/helper-utils.spec';
@@ -686,6 +686,44 @@ describe('IgxGrid - search API #grid - ', () => {
686686
expect(highlights.length).toBe(1);
687687
expect(row.inEditMode).toBe(false);
688688
});
689+
690+
it('Should keep edit mode when tabbing, after search is applied', () => {
691+
grid.primaryKey = 'ID';
692+
grid.getColumnByName('Name').editable = true;
693+
grid.getColumnByName('JobTitle').editable = true;
694+
fix.detectChanges();
695+
const cell = grid.getCellByColumn(1, 'Name');
696+
const caseyCell = grid.getCellByColumn(0, 'Name');
697+
const newVal = 'newCellValue';
698+
699+
grid.findNext('Casey');
700+
fix.detectChanges();
701+
let highlights = caseyCell.nativeElement.querySelectorAll(HIGHLIGHT_CSS_CLASS);
702+
expect(highlights.length).toBe(1);
703+
704+
cell.nativeElement.dispatchEvent(new MouseEvent('dblclick'));
705+
fix.detectChanges();
706+
707+
expect(cell.editMode).toBeTruthy();
708+
highlights = caseyCell.nativeElement.querySelectorAll(HIGHLIGHT_CSS_CLASS);
709+
expect(highlights.length).toBe(1);
710+
711+
let cellInput = null;
712+
cellInput = cell.nativeElement.querySelector('[igxinput]');
713+
UIInteractions.setInputElementValue(cellInput, newVal);
714+
715+
// press tab on edited cell
716+
UIInteractions.triggerKeyDownEvtUponElem('tab', cell.nativeElement, true);
717+
fix.detectChanges();
718+
719+
expect(cell.value).toBe(newVal);
720+
expect(cell.editMode).toBeFalsy();
721+
highlights = caseyCell.nativeElement.querySelectorAll(HIGHLIGHT_CSS_CLASS);
722+
723+
const nextCell = grid.getCellByColumn(1, 'JobTitle');
724+
expect(nextCell.editMode).toBeTruthy();
725+
expect(highlights.length).toBe(1);
726+
});
689727
});
690728

691729
describe('ScrollableGrid - ', () => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ export class IgxTreeGridSortingPipe implements PipeTransform {
213213
}
214214
const filteredSortedData = [];
215215
this.flattenTreeGridRecords(result, filteredSortedData);
216-
grid.filteredSortedData = filteredSortedData;
216+
grid.setFilteredSortedData(filteredSortedData);
217217

218218
return result;
219219
}

0 commit comments

Comments
 (0)