From 0ca362aceedcc69f59c70e8a30f1f9b2bbdcd96f Mon Sep 17 00:00:00 2001 From: georgianastasov Date: Thu, 23 Apr 2026 15:22:49 +0300 Subject: [PATCH] fix(date-range-picker): prevent mutating passed date range values --- .../date-range-picker.component.spec.ts | 24 +++++++++++++++++++ .../date-range-picker.component.ts | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts index 420cbbfee24..f614cac2f84 100644 --- a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts +++ b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts @@ -51,6 +51,7 @@ const CSS_CLASS_CALENDAR_HEADER_TITLE = '.igx-calendar__header-year'; const CSS_CLASS_CALENDAR_SUBHEADER = '.igx-calendar-picker__dates'; const CSS_CLASS_CALENDAR_HEADER = '.igx-calendar__header'; const CSS_CLASS_CALENDAR_WRAPPER_VERTICAL = 'igx-calendar__wrapper--vertical'; + describe('IgxDateRangePicker', () => { describe('Unit tests: ', () => { let mockElement: any; @@ -1110,6 +1111,29 @@ describe('IgxDateRangePicker', () => { fixture.detectChanges(); verifyDateRange(); }); + + it('should not mutate the time of the passed-in value when opening the picker', fakeAsync(() => { + const start = new Date(2026, 4, 10, 14, 30, 45); + const end = new Date(2026, 4, 20, 15, 15, 30); + dateRange.value = { start, end }; + fixture.detectChanges(); + + dateRange.open(); + tick(); + fixture.detectChanges(); + + expect(start.getHours()).toBe(14); + expect(start.getMinutes()).toBe(30); + expect(start.getSeconds()).toBe(45); + expect(end.getHours()).toBe(15); + expect(end.getMinutes()).toBe(15); + expect(end.getSeconds()).toBe(30); + + dateRange.close(); + tick(); + fixture.detectChanges(); + })); + it('should support different input and display formats', () => { let inputFormat = 'dd/MM/yy'; let displayFormat = 'longDate'; diff --git a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.ts b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.ts index a9758b92c52..a36c6ac010c 100644 --- a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.ts +++ b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.ts @@ -448,7 +448,7 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective @Input() public get activeDate(): Date { const today = new Date(new Date().setHours(0, 0, 0, 0)); - const dateValue = DateTimeUtil.isValidDate(this._firstDefinedInRange) ? new Date(this._firstDefinedInRange.setHours(0, 0, 0, 0)) : null; + const dateValue = DateTimeUtil.isValidDate(this._firstDefinedInRange) ? new Date(new Date(this._firstDefinedInRange.getTime()).setHours(0, 0, 0, 0)) : null; return this._activeDate ?? dateValue ?? this._calendar?.activeDate ?? today; }