Skip to content

Commit 0ca362a

Browse files
fix(date-range-picker): prevent mutating passed date range values
1 parent 83c6a0f commit 0ca362a

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const CSS_CLASS_CALENDAR_HEADER_TITLE = '.igx-calendar__header-year';
5151
const CSS_CLASS_CALENDAR_SUBHEADER = '.igx-calendar-picker__dates';
5252
const CSS_CLASS_CALENDAR_HEADER = '.igx-calendar__header';
5353
const CSS_CLASS_CALENDAR_WRAPPER_VERTICAL = 'igx-calendar__wrapper--vertical';
54+
5455
describe('IgxDateRangePicker', () => {
5556
describe('Unit tests: ', () => {
5657
let mockElement: any;
@@ -1110,6 +1111,29 @@ describe('IgxDateRangePicker', () => {
11101111
fixture.detectChanges();
11111112
verifyDateRange();
11121113
});
1114+
1115+
it('should not mutate the time of the passed-in value when opening the picker', fakeAsync(() => {
1116+
const start = new Date(2026, 4, 10, 14, 30, 45);
1117+
const end = new Date(2026, 4, 20, 15, 15, 30);
1118+
dateRange.value = { start, end };
1119+
fixture.detectChanges();
1120+
1121+
dateRange.open();
1122+
tick();
1123+
fixture.detectChanges();
1124+
1125+
expect(start.getHours()).toBe(14);
1126+
expect(start.getMinutes()).toBe(30);
1127+
expect(start.getSeconds()).toBe(45);
1128+
expect(end.getHours()).toBe(15);
1129+
expect(end.getMinutes()).toBe(15);
1130+
expect(end.getSeconds()).toBe(30);
1131+
1132+
dateRange.close();
1133+
tick();
1134+
fixture.detectChanges();
1135+
}));
1136+
11131137
it('should support different input and display formats', () => {
11141138
let inputFormat = 'dd/MM/yy';
11151139
let displayFormat = 'longDate';

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
448448
@Input()
449449
public get activeDate(): Date {
450450
const today = new Date(new Date().setHours(0, 0, 0, 0));
451-
const dateValue = DateTimeUtil.isValidDate(this._firstDefinedInRange) ? new Date(this._firstDefinedInRange.setHours(0, 0, 0, 0)) : null;
451+
const dateValue = DateTimeUtil.isValidDate(this._firstDefinedInRange) ? new Date(new Date(this._firstDefinedInRange.getTime()).setHours(0, 0, 0, 0)) : null;
452452
return this._activeDate ?? dateValue ?? this._calendar?.activeDate ?? today;
453453
}
454454

0 commit comments

Comments
 (0)