Skip to content

Commit 062203d

Browse files
committed
feat(drp): add specialDates prop + test
1 parent b94049e commit 062203d

File tree

2 files changed

+48
-8
lines changed

2 files changed

+48
-8
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,6 +1663,27 @@ describe('IgxDateRangePicker', () => {
16631663
expect(dateRange.displayMonthsCount).toBe(1);
16641664
}));
16651665

1666+
it('should set the specialDates of the calendar', fakeAsync(() => {
1667+
fixture = TestBed.createComponent(DateRangeDefaultComponent);
1668+
fixture.detectChanges();
1669+
dateRange = fixture.componentInstance.dateRange;
1670+
1671+
const specialDates = [{
1672+
type: DateRangeType.Between, dateRange: [
1673+
new Date(new Date().getFullYear(), new Date().getMonth(), 3),
1674+
new Date(new Date().getFullYear(), new Date().getMonth(), 8)
1675+
]
1676+
}];
1677+
dateRange.specialDates = specialDates;
1678+
fixture.detectChanges();
1679+
1680+
dateRange.open();
1681+
tick();
1682+
fixture.detectChanges();
1683+
1684+
expect(dateRange['_calendar'].specialDates).toEqual(specialDates);
1685+
}));
1686+
16661687
describe('Templated Calendar Header', () => {
16671688
let dateRangeDebugEl: DebugElement;
16681689
beforeEach(fakeAsync(() => {

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

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { fromEvent, merge, MonoTypeOperatorFunction, noop, Subscription } from '
1414
import { filter, takeUntil } from 'rxjs/operators';
1515

1616
import { CalendarSelection, IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, IgxCalendarSubheaderTemplateDirective } from '../calendar/public_api';
17-
import { DateRangeType } from '../core/dates';
17+
import { DateRangeDescriptor, DateRangeType } from '../core/dates';
1818
import { DateRangePickerResourceStringsEN, IDateRangePickerResourceStrings } from '../core/i18n/date-range-picker-resources';
1919
import { clamp, IBaseCancelableBrowserEventArgs, isDate, parseDate, PlatformUtil } from '../core/utils';
2020
import { IgxCalendarContainerComponent } from '../date-common/calendar-container/calendar-container.component';
@@ -234,6 +234,23 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
234234
return this._maxValue;
235235
}
236236

237+
/**
238+
* Gets/Sets the special dates descriptors.
239+
*
240+
* @example
241+
* ```typescript
242+
* let specialDates = this.dateRangePicker.specialDates;
243+
* this.dateRangePicker.specialDates = [ {type: DateRangeType.Weekends}, ... ];
244+
* ```
245+
*/
246+
@Input()
247+
public get specialDates(): DateRangeDescriptor[] {
248+
return this._specialDates;
249+
}
250+
public set specialDates(value: DateRangeDescriptor[]) {
251+
this._specialDates = value;
252+
}
253+
237254
/**
238255
* An accessor that sets the resource strings.
239256
* By default it uses EN resources.
@@ -475,6 +492,7 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
475492
private _positionSettings: PositionSettings;
476493
private _focusedInput: IgxDateRangeInputsBaseComponent;
477494
private _displayMonthsCount = 2;
495+
private _specialDates: DateRangeDescriptor[] = null;
478496
private _overlaySubFilter:
479497
[MonoTypeOperatorFunction<OverlayEventArgs>, MonoTypeOperatorFunction<OverlayEventArgs | OverlayCancelableEventArgs>] = [
480498
filter(x => x.id === this._overlayId),
@@ -1108,18 +1126,19 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
11081126
private _initializeCalendarContainer(componentInstance: IgxCalendarContainerComponent) {
11091127
this._calendar = componentInstance.calendar;
11101128
this._calendar.hasHeader = !this.isDropdown && !this.hideHeader;
1111-
this.calendar.locale = this.locale;
1112-
this.calendar.selection = CalendarSelection.RANGE;
1113-
this.calendar.weekStart = this.weekStart;
1114-
this.calendar.hideOutsideDays = this.hideOutsideDays;
1115-
this.calendar.monthsViewNumber = this._displayMonthsCount;
1116-
this.calendar.showWeekNumbers = this.showWeekNumbers;
1129+
this._calendar.locale = this.locale;
1130+
this._calendar.selection = CalendarSelection.RANGE;
1131+
this._calendar.weekStart = this.weekStart;
1132+
this._calendar.hideOutsideDays = this.hideOutsideDays;
1133+
this._calendar.monthsViewNumber = this._displayMonthsCount;
1134+
this._calendar.showWeekNumbers = this.showWeekNumbers;
11171135
this._calendar.headerTitleTemplate = this.headerTitleTemplate;
11181136
this._calendar.headerTemplate = this.headerTemplate;
11191137
this._calendar.subheaderTemplate = this.subheaderTemplate;
11201138
this._calendar.headerOrientation = this.headerOrientation;
11211139
this._calendar.orientation = this.orientation;
1122-
this.calendar.selected.pipe(takeUntil(this._destroy$)).subscribe((ev: Date[]) => this.handleSelection(ev));
1140+
this._calendar.specialDates = this.specialDates;
1141+
this._calendar.selected.pipe(takeUntil(this._destroy$)).subscribe((ev: Date[]) => this.handleSelection(ev));
11231142

11241143
componentInstance.mode = this.mode;
11251144
componentInstance.closeButtonLabel = !this.isDropdown ? this.doneButtonText : null;

0 commit comments

Comments
 (0)