Skip to content

Commit 5e1d0ff

Browse files
didimmovasimeonoff
andauthored
fix(date/date-range/timepicker): calendar dropdown positioning (#16775)
* fix(date/timepicker)fix calendar dropdown positioning * test(datepicker): add InputGroup to mock * fix(date-range-picker): fix calendar dropdown positioning * test(date-range-picker): update expected target * fix(date-range-picker): fix target selector * chore(date-range): simplify conditional logic --------- Co-authored-by: Simeon Simeonoff <sim.simeonoff@gmail.com>
1 parent 044ab38 commit 5e1d0ff

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
@@ -969,7 +969,7 @@ describe('IgxDatePicker', () => {
969969
},
970970
element: {
971971
nativeElement: jasmine.createSpyObj('mockElement',
972-
['focus', 'blur', 'click', 'addEventListener', 'removeEventListener'])
972+
['focus', 'blur', 'click', 'addEventListener', 'removeEventListener', 'querySelector'])
973973
}
974974
} as any;
975975
mockInputDirective = {
@@ -1030,6 +1030,7 @@ describe('IgxDatePicker', () => {
10301030

10311031
datePicker = TestBed.inject(IgxDatePickerComponent);
10321032
(datePicker as any).inputGroup = mockInputGroup;
1033+
(mockInputGroup.element.nativeElement.querySelector as jasmine.Spy).and.returnValue(mockInputGroup.element.nativeElement);
10331034
(datePicker as any).inputDirective = mockInputDirective;
10341035
(datePicker as any).dateTimeEditor = mockDateEditor;
10351036
(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
@@ -462,7 +462,7 @@ export class IgxDatePickerComponent extends PickerBaseDirective implements Contr
462462
}
463463

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

468468
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
@@ -1255,10 +1255,15 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
12551255
private configPositionStrategy(): void {
12561256
this._positionSettings = {
12571257
openAnimation: fadeIn,
1258-
closeAnimation: fadeOut
1258+
closeAnimation: fadeOut,
1259+
offset: 1
12591260
};
12601261
this._dropDownOverlaySettings.positionStrategy = new AutoPositionStrategy(this._positionSettings);
1261-
this._dropDownOverlaySettings.target = this.element.nativeElement;
1262+
1263+
const bundle = this.hasProjectedInputs
1264+
? this.projectedInputs.first?.nativeElement.querySelector('.igx-input-group__bundle')
1265+
: this.element.nativeElement.querySelector('.igx-input-group__bundle');
1266+
this._dropDownOverlaySettings.target = bundle || this.element.nativeElement;
12621267
}
12631268

12641269
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
@@ -432,6 +432,10 @@ export class IgxTimePickerComponent extends PickerBaseDirective
432432
return Object.assign({}, this._defaultDropDownOverlaySettings, this.overlaySettings);
433433
}
434434

435+
private get inputGroupElement(): HTMLElement {
436+
return this.inputGroup?.element.nativeElement.querySelector('.igx-input-group__bundle');
437+
}
438+
435439
/** @hidden @internal */
436440
public displayValue: PipeTransform = { transform: (date: Date) => this.formatter(date) };
437441
/** @hidden @internal */
@@ -472,7 +476,6 @@ export class IgxTimePickerComponent extends PickerBaseDirective
472476
outlet: this.outlet
473477
};
474478
private _defaultDropDownOverlaySettings: OverlaySettings = {
475-
target: this.element.nativeElement,
476479
modal: false,
477480
closeOnOutsideClick: true,
478481
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)