Skip to content

Commit ffa7c7f

Browse files
authored
Merge branch '10.2.x' into iganchev/update-interface-10.x.x
2 parents 558b555 + ac720a1 commit ffa7c7f

File tree

5 files changed

+84
-4
lines changed

5 files changed

+84
-4
lines changed

projects/igniteui-angular/src/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { AbsoluteScrollStrategy, AutoPositionStrategy } from '../../../services/
1919
import { IgxColumnComponent } from '../../columns/column.component';
2020
import { GridType } from '../../common/grid.interface';
2121
import { DataUtil } from './../../../data-operations/data-util';
22+
import { IActiveNode } from '../../grid-navigation.service';
2223

2324
/**
2425
* @hidden
@@ -132,7 +133,7 @@ export class IgxAdvancedFilteringDialogComponent implements AfterViewInit, OnDes
132133
/**
133134
* @hidden @internal
134135
*/
135-
public lastActiveNode;
136+
public lastActiveNode = {} as IActiveNode;
136137

137138
private _positionSettings = {
138139
horizontalStartPoint: HorizontalAlignment.Right,

projects/igniteui-angular/src/lib/grids/grid-navigation.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ export class IgxGridNavigationService {
220220

221221
focusTbody(event) {
222222
const gridRows = this.grid.verticalScrollContainer.totalItemCount ?? this.grid.dataView.length;
223-
if (gridRows < 1) { this.activeNode = null; return; }
223+
if (gridRows < 1) { this.activeNode = {} as IActiveNode; return; }
224224
if (!Object.keys(this.activeNode).length || this.activeNode.row < 0 || this.activeNode.row > gridRows - 1) {
225225
const hasLastActiveNode = Object.keys(this.lastActiveNode).length;
226226
const shouldClearSelection = hasLastActiveNode && (this.lastActiveNode.row < 0 || this.lastActiveNode.row > gridRows - 1);

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

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import {
1818
IgxGridAdvancedFilteringBindingComponent
1919
} from '../../test-utils/grid-samples.spec';
2020
import { ControlsFunction } from '../../test-utils/controls-functions.spec';
21+
import { IgxHierGridExternalAdvancedFilteringComponent } from '../../test-utils/hierarchical-grid-components.spec';
22+
import { IgxHierarchicalGridModule, IgxHierarchicalGridComponent } from '../hierarchical-grid/public_api';
2123

2224
const ADVANCED_FILTERING_OPERATOR_LINE_AND_CSS_CLASS = 'igx-filter-tree__line--and';
2325
const ADVANCED_FILTERING_OPERATOR_LINE_OR_CSS_CLASS = 'igx-filter-tree__line--or';
@@ -35,11 +37,13 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
3537
IgxGridAdvancedFilteringColumnGroupComponent,
3638
IgxGridAdvancedFilteringComponent,
3739
IgxGridExternalAdvancedFilteringComponent,
38-
IgxGridAdvancedFilteringBindingComponent
40+
IgxGridAdvancedFilteringBindingComponent,
41+
IgxHierGridExternalAdvancedFilteringComponent
3942
],
4043
imports: [
4144
NoopAnimationsModule,
42-
IgxGridModule]
45+
IgxGridModule,
46+
IgxHierarchicalGridModule]
4347
}).compileComponents();
4448
}));
4549

@@ -2669,6 +2673,28 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
26692673
expect(grid.rowList.length).toBe(1);
26702674
expect(GridFunctions.getCurrentCellFromGrid(grid, 0, 1).value).toBe('Ignite UI for JavaScript');
26712675
}));
2676+
2677+
it('Should allow hosting Advanced Filtering dialog outside of the hierarchical grid without any console errors.', fakeAsync(() => {
2678+
fix = TestBed.createComponent(IgxHierGridExternalAdvancedFilteringComponent);
2679+
const hgrid: IgxHierarchicalGridComponent = fix.componentInstance.hgrid;
2680+
fix.detectChanges();
2681+
spyOn(console, 'error');
2682+
2683+
const advFilterDialog = fix.nativeElement.querySelector('.igx-advanced-filter');
2684+
const applyFilterButton: any = Array.from(advFilterDialog.querySelectorAll('button'))
2685+
.find((b: any) => b.innerText.toLowerCase() === 'apply');
2686+
2687+
applyFilterButton.click();
2688+
tick(100);
2689+
fix.detectChanges();
2690+
2691+
UIInteractions.simulatePointerEvent('pointerenter',
2692+
hgrid.nativeElement.querySelectorAll('igx-hierarchical-grid-cell')[0], 5, 5);
2693+
fix.detectChanges();
2694+
2695+
expect(console.error).not.toHaveBeenCalled();
2696+
}));
2697+
26722698
});
26732699

26742700
describe('Expression tree bindings - ', () => {

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2421,6 +2421,32 @@ describe('IgxGrid - Filtering Row UI actions #grid', () => {
24212421
expect(colOperands[0].nativeElement.innerText).toEqual('AND');
24222422
expect(colIndicator.length).toEqual(0);
24232423
}));
2424+
2425+
it('UI focusing grid\'s body content does not throw a console error after filtering. (issue 8930)', fakeAsync(() => {
2426+
spyOn(console, 'error');
2427+
GridFunctions.clickFilterCellChipUI(fix, 'ProductName');
2428+
fix.detectChanges();
2429+
2430+
GridFunctions.applyFilter('Jav', fix);
2431+
tick(DEBOUNCETIME);
2432+
fix.detectChanges();
2433+
2434+
GridFunctions.applyFilter('xy', fix);
2435+
tick(DEBOUNCETIME);
2436+
fix.detectChanges();
2437+
2438+
const tBodyContent = GridFunctions.getGridContent(fix);
2439+
tBodyContent.triggerEventHandler('focus', null);
2440+
2441+
const filterUIRow = fix.debugElement.query(By.css(FILTER_UI_ROW));
2442+
GridFunctions.removeFilterChipByIndex(1, filterUIRow);
2443+
tick();
2444+
fix.detectChanges();
2445+
2446+
tBodyContent.triggerEventHandler('focus', null);
2447+
tick();
2448+
expect(console.error).not.toHaveBeenCalled();
2449+
}));
24242450
});
24252451

24262452
describe(null, () => {

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,30 @@ export class IgxHierarchicalGridActionStripComponent extends IgxHierarchicalGrid
235235
@ViewChild('actionStrip2', { read: IgxActionStripComponent, static: true })
236236
public actionStripChild: IgxActionStripComponent;
237237
}
238+
239+
@Component({
240+
template: `
241+
<igx-hierarchical-grid #grid1 [data]="data" [height]="'300px'" [width]="'700px'" #hierarchicalGrid [primaryKey]="'ID'">
242+
<igx-column field="ID" ></igx-column>
243+
<igx-column field="ChildLevels"></igx-column>
244+
<igx-column field="ProductName"></igx-column>
245+
<igx-row-island [key]="'childData'" #rowIsland [primaryKey]="'ID'" [rowSelection]="'single'">
246+
<igx-column field="ID"> </igx-column>
247+
<igx-column field="ChildLevels"></igx-column>
248+
<igx-column field="ProductName"></igx-column>
249+
<igx-row-island [key]="'childData'" #rowIsland2 [primaryKey]="'ID'" [rowSelection]="'none'">
250+
<igx-column field="ID"></igx-column>
251+
<igx-column field="ChildLevels"></igx-column>
252+
<igx-column field="ProductName"></igx-column>
253+
</igx-row-island>
254+
</igx-row-island>
255+
</igx-hierarchical-grid>
256+
<igx-advanced-filtering-dialog [grid]="grid1">
257+
</igx-advanced-filtering-dialog>`
258+
})
259+
export class IgxHierGridExternalAdvancedFilteringComponent extends IgxHierarchicalGridTestBaseComponent {
260+
// @ViewChild('hierarchicalGrid', { read: IgxHierarchicalGridComponent, static: true })
261+
// public hgrid: IgxHierarchicalGridComponent;
262+
263+
public data = SampleTestData.generateHGridData(5, 3);
264+
}

0 commit comments

Comments
 (0)