Skip to content

Commit 783b7a0

Browse files
authored
Merge branch 'master' into fix-#4752-master
2 parents 7482cc4 + c864f73 commit 783b7a0

File tree

2 files changed

+32
-19
lines changed

2 files changed

+32
-19
lines changed

projects/igniteui-angular/src/lib/grids/grid-header.component.ts

+5-19
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import { IgxGridBaseComponent, IGridDataBindable } from './grid-base.component';
2222
import { IgxColumnResizingService } from './grid-column-resizing.service';
2323
import { IgxOverlayService } from '../services/overlay/overlay';
2424
import { IgxGridExcelStyleFilteringComponent } from './filtering/excel-style/grid.excel-style-filtering.component';
25-
import { OverlaySettings, PositionSettings, VerticalAlignment, HorizontalAlignment } from '../services/overlay/utilities';
26-
import { ConnectedPositioningStrategy } from '../services/overlay/position/connected-positioning-strategy';
25+
import { OverlaySettings, PositionSettings, VerticalAlignment } from '../services/overlay/utilities';
26+
import { AutoPositionStrategy } from '../services/overlay/position/auto-position-strategy';
2727
import { useAnimation } from '@angular/animations';
2828
import { filter, takeUntil } from 'rxjs/operators';
2929
import { Subject } from 'rxjs';
@@ -203,23 +203,9 @@ export class IgxGridHeaderComponent implements DoCheck, OnInit, OnDestroy {
203203
private toggleFilterDropdown() {
204204
if (!this._componentOverlayId) {
205205
const headerTarget = this.elementRef.nativeElement;
206+
const filterIconTarget = headerTarget.querySelector('.' + this.filterIconClassName);
206207

207-
const gridRect = this.grid.nativeElement.getBoundingClientRect();
208-
const headerRect = headerTarget.getBoundingClientRect();
209-
210-
let x = headerRect.left;
211-
let x1 = gridRect.left + gridRect.width;
212-
x += window.pageXOffset;
213-
x1 += window.pageXOffset;
214-
if (Math.abs(x - x1) < 300) {
215-
this._filterMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Left;
216-
this._filterMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Right;
217-
} else {
218-
this._filterMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Right;
219-
this._filterMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Left;
220-
}
221-
222-
this._filterMenuOverlaySettings.positionStrategy.settings.target = headerTarget;
208+
this._filterMenuOverlaySettings.positionStrategy.settings.target = filterIconTarget;
223209
this._filterMenuOverlaySettings.outlet = this.grid.outlet;
224210

225211
this._componentOverlayId =
@@ -246,7 +232,7 @@ export class IgxGridHeaderComponent implements DoCheck, OnInit, OnDestroy {
246232
this._filterMenuOverlaySettings = {
247233
closeOnOutsideClick: true,
248234
modal: false,
249-
positionStrategy: new ConnectedPositioningStrategy(this._filterMenuPositionSettings),
235+
positionStrategy: new AutoPositionStrategy(this._filterMenuPositionSettings),
250236
scrollStrategy: new AbsoluteScrollStrategy()
251237
};
252238

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

+27
Original file line numberDiff line numberDiff line change
@@ -3929,6 +3929,33 @@ describe('IgxGrid - Filtering actions - Excel style filtering', () => {
39293929
[ 'Select All', '20', '254' ],
39303930
[ true, true, true ]);
39313931
}));
3932+
3933+
it('Should display the ESF based on the filterIcon within the grid', async() => {
3934+
// Test prerequisites
3935+
grid.width = '800px';
3936+
fix.detectChanges();
3937+
for (const column of grid.columns) {
3938+
column.width = '300px';
3939+
}
3940+
grid.cdr.detectChanges();
3941+
await wait(16);
3942+
3943+
// Scroll a bit to the right, so the ProductName column is not fully visible.
3944+
grid.parentVirtDir.getHorizontalScroll().scrollLeft = 500;
3945+
await wait(100);
3946+
fix.detectChanges();
3947+
GridFunctions.clickExcelFilterIcon(fix, 'ProductName');
3948+
fix.detectChanges();
3949+
3950+
// Verify that the left, top and right borders of the ESF are within the grid.
3951+
const gridNativeElement = fix.debugElement.query(By.css('igx-grid')).nativeElement;
3952+
const gridRect = gridNativeElement.getBoundingClientRect();
3953+
const excelMenu = gridNativeElement.querySelector('.igx-excel-filter__menu');
3954+
const excelMenuRect = excelMenu.getBoundingClientRect();
3955+
expect(excelMenuRect.left >= gridRect.left).toBe(true, 'ESF spans outside the grid on the left');
3956+
expect(excelMenuRect.top >= gridRect.top).toBe(true, 'ESF spans outside the grid on the top');
3957+
expect(excelMenuRect.right <= gridRect.right).toBe(true, 'ESF spans outside the grid on the right');
3958+
});
39323959
});
39333960

39343961
const expectedResults = [];

0 commit comments

Comments
 (0)