Skip to content

Commit 68d2262

Browse files
feat(date-range): min/max inputs; validation and disabled dates #5732
1 parent 3d809a1 commit 68d2262

File tree

4 files changed

+257
-50
lines changed

4 files changed

+257
-50
lines changed

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

+8-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { IgxInputGroupBase } from '../input-group/input-group.common';
44
import { NgControl } from '@angular/forms';
55
import { IgxDateTimeEditorDirective } from '../directives/date-time-editor';
66
import { formatDate } from '@angular/common';
7+
import { IgxInputDirective } from '../input-group';
78

89
/**
910
* Represents a range between two dates.
@@ -41,15 +42,18 @@ export class DateRangePickerFormatPipe implements PipeTransform {
4142
@Component({
4243
template: ``,
4344
selector: `igx-date-range-base`,
44-
providers: [{ provide: IgxInputGroupBase, useExisting: IgxDateRangeBaseComponent }]
45+
providers: [{ provide: IgxInputGroupBase, useExisting: IgxDateRangeInputsBaseComponent }]
4546
})
46-
class IgxDateRangeBaseComponent extends IgxInputGroupComponent {
47+
export class IgxDateRangeInputsBaseComponent extends IgxInputGroupComponent {
4748
@ContentChild(NgControl)
4849
protected ngControl: NgControl;
4950

5051
@ContentChild(IgxDateTimeEditorDirective)
5152
public dateTimeEditor: IgxDateTimeEditorDirective;
5253

54+
@ContentChild(IgxInputDirective)
55+
public inputDirective: IgxInputDirective;
56+
5357
/** @hidden @internal */
5458
public get nativeElement() {
5559
return this.element.nativeElement;
@@ -131,7 +135,7 @@ export class IgxPickerToggleComponent {
131135
templateUrl: '../input-group/input-group.component.html',
132136
providers: [{ provide: IgxInputGroupBase, useExisting: IgxDateRangeStartComponent }]
133137
})
134-
export class IgxDateRangeStartComponent extends IgxDateRangeBaseComponent { }
138+
export class IgxDateRangeStartComponent extends IgxDateRangeInputsBaseComponent { }
135139

136140
/**
137141
* Defines the end input for a date range picker
@@ -162,7 +166,7 @@ export class IgxDateRangeStartComponent extends IgxDateRangeBaseComponent { }
162166
templateUrl: '../input-group/input-group.component.html',
163167
providers: [{ provide: IgxInputGroupBase, useExisting: IgxDateRangeEndComponent }]
164168
})
165-
export class IgxDateRangeEndComponent extends IgxDateRangeBaseComponent { }
169+
export class IgxDateRangeEndComponent extends IgxDateRangeInputsBaseComponent { }
166170

167171
@Directive({
168172
selector: '[igxDateRangeSeparator]'

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ describe('IgxDateRangePicker', () => {
3636
const elementRef = { nativeElement: null };
3737
const calendar = new IgxCalendarComponent();
3838
it('should set range dates correctly through selectRange method', () => {
39-
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null);
39+
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null, null);
4040
dateRange.calendar = calendar;
4141
let startDate = new Date(2020, 3, 7);
4242
const endDate = new Date(2020, 6, 27);
@@ -54,7 +54,7 @@ describe('IgxDateRangePicker', () => {
5454
});
5555

5656
it('should set range dates correctly through selectToday method', () => {
57-
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null);
57+
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null, null);
5858
dateRange.calendar = calendar;
5959
const today = new Date();
6060

@@ -64,7 +64,7 @@ describe('IgxDateRangePicker', () => {
6464
});
6565

6666
it('should emit rangeSelected on selection', () => {
67-
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null);
67+
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null, null);
6868
dateRange.calendar = calendar;
6969
spyOn(dateRange.rangeSelected, 'emit');
7070
let startDate = new Date(2017, 4, 5);
@@ -87,7 +87,7 @@ describe('IgxDateRangePicker', () => {
8787
});
8888

8989
it('should emit rangeSelected on selectToday()', () => {
90-
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null);
90+
const dateRange = new IgxDateRangePickerComponent(elementRef, null, null, null);
9191
dateRange.calendar = calendar;
9292
spyOn(dateRange.rangeSelected, 'emit');
9393
const today = new Date();
@@ -662,7 +662,7 @@ describe('IgxDateRangePicker', () => {
662662
const rangeUpdate = { start: new Date(2020, 2, 22), end: new Date(2020, 2, 25)};
663663

664664
// init
665-
dateRangePicker = new IgxDateRangePickerComponent(null, 'en', null);
665+
dateRangePicker = new IgxDateRangePickerComponent(null, null, 'en', null);
666666
dateRangePicker.registerOnChange(mockNgControl.registerOnChangeCb);
667667
dateRangePicker.registerOnTouched(mockNgControl.registerOnTouchedCb);
668668
spyOn(dateRangePicker, 'handleSelection');
@@ -685,14 +685,14 @@ describe('IgxDateRangePicker', () => {
685685
// awaiting implementation - OnTouched callback
686686
// Docs: changes the value, turning the control dirty; or blurs the form control element, setting the control to touched.
687687
// when handleSelection fires should be touched&dirty // when input is blurred(two inputs), should be touched.
688-
// dateRangePicker.handleSelection([range.start]);
689-
// expect(mockNgControl.registerOnTouchedCb).toHaveBeenCalledTimes(1);
688+
dateRangePicker.handleSelection([range.start]);
689+
expect(mockNgControl.registerOnTouchedCb).toHaveBeenCalledTimes(1);
690690

691691
// awaiting implementation - setDisabledState
692-
// dateRangePicker.setDisabledState(true);
693-
// expect(dateRangePicker.disabled).toBe(true);
694-
// dateRangePicker.setDisabledState(false);
695-
// expect(dateRangePicker.disabled).toBe(false);
692+
dateRangePicker.setDisabledState(true);
693+
expect(dateRangePicker.disabled).toBe(true);
694+
dateRangePicker.setDisabledState(false);
695+
expect(dateRangePicker.disabled).toBe(false);
696696
});
697697
});
698698

0 commit comments

Comments
 (0)