Skip to content

Commit ef08ed0

Browse files
authored
fix(date/date-range/timepicker): fix calendar dropdown positioning (#16800)
1 parent f2bf194 commit ef08ed0

5 files changed

Lines changed: 20 additions & 6 deletions

File tree

projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -967,7 +967,7 @@ describe('IgxDatePicker', () => {
967967
},
968968
element: {
969969
nativeElement: jasmine.createSpyObj('mockElement',
970-
['focus', 'blur', 'click', 'addEventListener', 'removeEventListener'])
970+
['focus', 'blur', 'click', 'addEventListener', 'removeEventListener', 'querySelector'])
971971
}
972972
} as any;
973973
mockInputDirective = {
@@ -1029,6 +1029,7 @@ describe('IgxDatePicker', () => {
10291029

10301030
datePicker = TestBed.inject(IgxDatePickerComponent);
10311031
(datePicker as any).inputGroup = mockInputGroup;
1032+
(mockInputGroup.element.nativeElement.querySelector as jasmine.Spy).and.returnValue(mockInputGroup.element.nativeElement);
10321033
(datePicker as any).inputDirective = mockInputDirective;
10331034
(datePicker as any).dateTimeEditor = mockDateEditor;
10341035
(datePicker as any).viewContainerRef = viewsContainerRef;

projects/igniteui-angular/date-picker/src/date-picker/date-picker.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ export class IgxDatePickerComponent extends PickerBaseDirective implements Contr
460460
}
461461

462462
private get inputGroupElement(): HTMLElement {
463-
return this.inputGroup?.element.nativeElement;
463+
return this.inputGroup?.element.nativeElement.querySelector('.igx-input-group__bundle');
464464
}
465465

466466
private get dateValue(): Date {

projects/igniteui-angular/date-picker/src/date-range-picker/date-range-picker.component.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1922,10 +1922,11 @@ describe('IgxDateRangePicker', () => {
19221922
fixture.detectChanges();
19231923

19241924
const overlayContent = document.getElementsByClassName(CSS_CLASS_OVERLAY_CONTENT)[0] as HTMLElement;
1925+
const expectedTarget = dateRange.element.nativeElement.querySelector('.igx-input-group__bundle');
19251926
expect(AutoPositionStrategy.prototype.position).toHaveBeenCalledTimes(1);
19261927
expect(AutoPositionStrategy.prototype.position)
19271928
.toHaveBeenCalledWith(overlayContent, jasmine.anything(), document,
1928-
jasmine.anything(), dateRange.element.nativeElement);
1929+
jasmine.anything(), expectedTarget);
19291930
}));
19301931
it('Should the weekStart property takes precedence over locale.', fakeAsync(() => {
19311932
fixture = TestBed.createComponent(DateRangeCustomComponent);

projects/igniteui-angular/date-picker/src/date-range-picker/date-range-picker.component.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,10 +1239,15 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
12391239
private configPositionStrategy(): void {
12401240
this._positionSettings = {
12411241
openAnimation: fadeIn,
1242-
closeAnimation: fadeOut
1242+
closeAnimation: fadeOut,
1243+
offset: 1
12431244
};
12441245
this._dropDownOverlaySettings.positionStrategy = new AutoPositionStrategy(this._positionSettings);
1245-
this._dropDownOverlaySettings.target = this.element.nativeElement;
1246+
1247+
const bundle = this.hasProjectedInputs
1248+
? this.projectedInputs.first?.nativeElement.querySelector('.igx-input-group__bundle')
1249+
: this.element.nativeElement.querySelector('.igx-input-group__bundle');
1250+
this._dropDownOverlaySettings.target = bundle || this.element.nativeElement;
12461251
}
12471252

12481253
private configOverlaySettings(): void {

projects/igniteui-angular/time-picker/src/time-picker/time-picker.component.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,10 @@ export class IgxTimePickerComponent extends PickerBaseDirective
420420
return Object.assign({}, this._defaultDropDownOverlaySettings, this.overlaySettings);
421421
}
422422

423+
private get inputGroupElement(): HTMLElement {
424+
return this.inputGroup?.element.nativeElement.querySelector('.igx-input-group__bundle');
425+
}
426+
423427
/** @hidden @internal */
424428
public displayValue: PipeTransform = { transform: (date: Date) => this.formatter(date) };
425429
/** @hidden @internal */
@@ -459,7 +463,6 @@ export class IgxTimePickerComponent extends PickerBaseDirective
459463
outlet: this.outlet
460464
};
461465
private _defaultDropDownOverlaySettings: OverlaySettings = {
462-
target: this.element.nativeElement,
463466
modal: false,
464467
closeOnOutsideClick: true,
465468
scrollStrategy: new AbsoluteScrollStrategy(),
@@ -758,6 +761,10 @@ export class IgxTimePickerComponent extends PickerBaseDirective
758761
: this.dialogOverlaySettings
759762
, settings);
760763

764+
if (this.isDropdown && this.inputGroupElement) {
765+
overlaySettings.target = this.inputGroupElement;
766+
}
767+
761768
this.toggleRef.open(overlaySettings);
762769
}
763770

0 commit comments

Comments
 (0)