Skip to content

Commit 5ba16c2

Browse files
Merge pull request #16125 from IgniteUI/bpachilova/drp-close-behavior-16090
Close behavior on interacting with the editable input in IgxDateRangePicker (alignment with WC)
2 parents 11ead5a + 2d97e38 commit 5ba16c2

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,26 @@ describe('IgxDateRangePicker', () => {
12761276
expect(dateRange.opening.emit).toHaveBeenCalledTimes(0);
12771277
expect(dateRange.opened.emit).toHaveBeenCalledTimes(0);
12781278
}));
1279+
1280+
it('should keep the calendar open when input is focused by click and while typing', fakeAsync(() => {
1281+
fixture.componentInstance.dateRange.open();
1282+
fixture.detectChanges();
1283+
tick(DEBOUNCE_TIME);
1284+
1285+
startInput.triggerEventHandler('focus', {});
1286+
fixture.detectChanges();
1287+
UIInteractions.simulateClickAndSelectEvent(startInput.nativeElement);
1288+
fixture.detectChanges();
1289+
tick(DEBOUNCE_TIME);
1290+
1291+
expect(dateRange.collapsed).toBeFalsy();
1292+
1293+
UIInteractions.simulateTyping('01/10/202', startInput);
1294+
fixture.detectChanges();
1295+
tick(DEBOUNCE_TIME);
1296+
1297+
expect(dateRange.collapsed).toBeFalsy();
1298+
}));
12791299
});
12801300

12811301
it('should focus the last focused input after the calendar closes - dropdown', fakeAsync(() => {

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -789,7 +789,11 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
789789
this.opened.emit({ owner: this });
790790
});
791791

792-
this._overlayService.closing.pipe(...this._overlaySubFilter).subscribe((e) => {
792+
this._overlayService.closing.pipe(...this._overlaySubFilter).subscribe((e: OverlayCancelableEventArgs) => {
793+
const isEscape = e.event && (e.event as KeyboardEvent).key === this.platform.KEYMAP.ESCAPE;
794+
if (this.isProjectedInputTarget(e.event) && !isEscape) {
795+
e.cancel = true;
796+
}
793797
this.handleClosing(e as OverlayCancelableEventArgs);
794798
});
795799

@@ -803,6 +807,16 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
803807
});
804808
}
805809

810+
private isProjectedInputTarget(event: Event): boolean {
811+
if (!this.hasProjectedInputs || !event) {
812+
return false;
813+
}
814+
const path = event.composed ? event.composedPath() : [event.target];
815+
return this.projectedInputs.some(i =>
816+
path.includes(i.dateTimeEditor.nativeElement)
817+
);
818+
}
819+
806820
private updateValue(value: DateRange) {
807821
this._value = value ? value : null;
808822
this.updateInputs();

0 commit comments

Comments
 (0)