Skip to content

Commit 7446cf9

Browse files
authored
fix(date/date-range/timepicker): fix calendar dropdown positioning (#16805)
1 parent 93d144f commit 7446cf9

5 files changed

Lines changed: 20 additions & 6 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -966,7 +966,7 @@ describe('IgxDatePicker', () => {
966966
},
967967
element: {
968968
nativeElement: jasmine.createSpyObj('mockElement',
969-
['focus', 'blur', 'click', 'addEventListener', 'removeEventListener'])
969+
['focus', 'blur', 'click', 'addEventListener', 'removeEventListener', 'querySelector'])
970970
}
971971
} as any;
972972
mockInputDirective = {
@@ -1016,6 +1016,7 @@ describe('IgxDatePicker', () => {
10161016
};
10171017
datePicker = new IgxDatePickerComponent(elementRef, 'en-US', overlay, mockInjector, renderer2, null, mockCdr);
10181018
(datePicker as any).inputGroup = mockInputGroup;
1019+
(mockInputGroup.element.nativeElement.querySelector as jasmine.Spy).and.returnValue(mockInputGroup.element.nativeElement);
10191020
(datePicker as any).inputDirective = mockInputDirective;
10201021
(datePicker as any).dateTimeEditor = mockDateEditor;
10211022
(datePicker as any).viewContainerRef = viewsContainerRef;

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

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

453453
private get inputGroupElement(): HTMLElement {
454-
return this.inputGroup?.element.nativeElement;
454+
return this.inputGroup?.element.nativeElement.querySelector('.igx-input-group__bundle');
455455
}
456456

457457
private get dateValue(): Date {

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

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

19671967
const overlayContent = document.getElementsByClassName(CSS_CLASS_OVERLAY_CONTENT)[0] as HTMLElement;
1968+
const expectedTarget = dateRange.element.nativeElement.querySelector('.igx-input-group__bundle');
19681969
expect(AutoPositionStrategy.prototype.position).toHaveBeenCalledTimes(1);
19691970
expect(AutoPositionStrategy.prototype.position)
19701971
.toHaveBeenCalledWith(overlayContent, jasmine.anything(), document,
1971-
jasmine.anything(), dateRange.element.nativeElement);
1972+
jasmine.anything(), expectedTarget);
19721973
}));
19731974
it('Should the weekStart property takes precedence over locale.', fakeAsync(() => {
19741975
fixture = TestBed.createComponent(DateRangeCustomComponent);

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1223,10 +1223,15 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
12231223
private configPositionStrategy(): void {
12241224
this._positionSettings = {
12251225
openAnimation: fadeIn,
1226-
closeAnimation: fadeOut
1226+
closeAnimation: fadeOut,
1227+
offset: 1
12271228
};
12281229
this._dropDownOverlaySettings.positionStrategy = new AutoPositionStrategy(this._positionSettings);
1229-
this._dropDownOverlaySettings.target = this.element.nativeElement;
1230+
1231+
const bundle = this.hasProjectedInputs
1232+
? this.projectedInputs.first?.nativeElement.querySelector('.igx-input-group__bundle')
1233+
: this.element.nativeElement.querySelector('.igx-input-group__bundle');
1234+
this._dropDownOverlaySettings.target = bundle || this.element.nativeElement;
12301235
}
12311236

12321237
private configOverlaySettings(): void {

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

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

429+
private get inputGroupElement(): HTMLElement {
430+
return this.inputGroup?.element.nativeElement.querySelector('.igx-input-group__bundle');
431+
}
432+
429433
/** @hidden @internal */
430434
public displayValue: PipeTransform = { transform: (date: Date) => this.formatter(date) };
431435
/** @hidden @internal */
@@ -465,7 +469,6 @@ export class IgxTimePickerComponent extends PickerBaseDirective
465469
outlet: this.outlet
466470
};
467471
private _defaultDropDownOverlaySettings: OverlaySettings = {
468-
target: this.element.nativeElement,
469472
modal: false,
470473
closeOnOutsideClick: true,
471474
scrollStrategy: new AbsoluteScrollStrategy(),
@@ -771,6 +774,10 @@ export class IgxTimePickerComponent extends PickerBaseDirective
771774
: this.dialogOverlaySettings
772775
, settings);
773776

777+
if (this.isDropdown && this.inputGroupElement) {
778+
overlaySettings.target = this.inputGroupElement;
779+
}
780+
774781
this.toggleRef.open(overlaySettings);
775782
}
776783

0 commit comments

Comments
 (0)