Skip to content

Commit e91afd9

Browse files
authored
Merge branch 'master' into hanastasov/state-fix-master
2 parents bd7ed62 + 40e8333 commit e91afd9

File tree

11 files changed

+469
-197
lines changed

11 files changed

+469
-197
lines changed

README.md

Lines changed: 37 additions & 37 deletions
Large diffs are not rendered by default.

projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,22 @@ describe(`DateTimeUtil Unit tests`, () => {
3636
expect(resDict[DatePart.Date]).toEqual(jasmine.objectContaining({ start: 3, end: 5 }));
3737
expect(resDict[DatePart.Year]).toEqual(jasmine.objectContaining({ start: 6, end: 10 }));
3838

39+
// M/d/yy should be 00/00/00
3940
result = DateTimeUtil.parseDateTimeFormat('M/d/yy');
4041
resDict = reduceToDictionary(result);
4142
expect(result.length).toEqual(5);
4243
expect(resDict[DatePart.Month]).toEqual(jasmine.objectContaining({ start: 0, end: 2 }));
4344
expect(resDict[DatePart.Date]).toEqual(jasmine.objectContaining({ start: 3, end: 5 }));
4445
expect(resDict[DatePart.Year]).toEqual(jasmine.objectContaining({ start: 6, end: 8 }));
4546

47+
// H:m:s should be 00:00:00
48+
result = DateTimeUtil.parseDateTimeFormat('H:m:s');
49+
resDict = reduceToDictionary(result);
50+
expect(result.length).toEqual(5);
51+
expect(resDict[DatePart.Hours]).toEqual(jasmine.objectContaining({start: 0, end: 2 }));
52+
expect(resDict[DatePart.Minutes]).toEqual(jasmine.objectContaining({start: 3, end: 5 }));
53+
expect(resDict[DatePart.Seconds]).toEqual(jasmine.objectContaining({start: 6, end: 8 }));
54+
4655
result = DateTimeUtil.parseDateTimeFormat('dd.MM.yyyy г.');
4756
resDict = reduceToDictionary(result);
4857
expect(result.length).toEqual(6);

projects/igniteui-angular/src/lib/date-common/util/date-time.util.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { DatePart, DatePartInfo } from '../../directives/date-time-editor/date-t
22
import { formatDate, FormatWidth, getLocaleDateFormat } from '@angular/common';
33
import { ValidationErrors } from '@angular/forms';
44
import { isDate } from '../../core/utils';
5-
import { MaskParsingService } from '../../directives/mask/mask-parsing.service';
65

76
/** @hidden */
87
const enum FormatDesc {
@@ -89,10 +88,8 @@ export abstract class DateTimeUtil {
8988
}
9089
}
9190

92-
DateTimeUtil.ensureLeadingZero(currentPart);
93-
currentPart.end = currentPart.start + currentPart.format.length;
91+
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);
9492
position = currentPart.end;
95-
dateTimeParts.push(currentPart);
9693
}
9794

9895
currentPart = {
@@ -103,6 +100,11 @@ export abstract class DateTimeUtil {
103100
};
104101
}
105102

103+
// make sure the last member of a format like H:m:s is not omitted
104+
if (!dateTimeParts.filter(p => p.format.includes(currentPart.format)).length) {
105+
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);
106+
}
107+
106108
return dateTimeParts;
107109
}
108110

@@ -372,15 +374,16 @@ export abstract class DateTimeUtil {
372374
*/
373375
public static validateMinMax(value: Date, minValue: Date | string, maxValue: Date | string,
374376
includeTime = true, includeDate = true): ValidationErrors {
377+
if (!value) {
378+
return null;
379+
}
375380
const errors = {};
376381
const min = DateTimeUtil.isValidDate(minValue) ? minValue : DateTimeUtil.parseIsoDate(minValue);
377382
const max = DateTimeUtil.isValidDate(maxValue) ? maxValue : DateTimeUtil.parseIsoDate(maxValue);
378-
if ((min && value && DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate))
379-
|| (min && value && DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate))) {
383+
if (min && value && DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate)) {
380384
Object.assign(errors, { minValue: true });
381385
}
382-
if ((max && value && DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate))
383-
|| (max && value && DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate))) {
386+
if (max && value && DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate)) {
384387
Object.assign(errors, { maxValue: true });
385388
}
386389

@@ -420,6 +423,12 @@ export abstract class DateTimeUtil {
420423
return false;
421424
}
422425

426+
private static addCurrentPart(currentPart: DatePartInfo, dateTimeParts: DatePartInfo[]): void {
427+
DateTimeUtil.ensureLeadingZero(currentPart);
428+
currentPart.end = currentPart.start + currentPart.format.length;
429+
dateTimeParts.push(currentPart);
430+
}
431+
423432
private static daysInMonth(fullYear: number, month: number): number {
424433
return new Date(fullYear, month + 1, 0).getDate();
425434
}

projects/igniteui-angular/src/lib/date-picker/date-picker.component.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<igx-input-group [displayDensity]="this.displayDensity" [type]="this.type" [suppressInputAutofocus]="true">
22
<igx-prefix *ngIf="!this.toggleComponents.length" (click)="this.toggle()">
3-
<igx-icon [title]="this.value ? resourceStrings.igx_date_picker_change_date : resourceStrings.igx_date_picker_choose_date">today</igx-icon>
3+
<igx-icon [title]="this.value
4+
? pickerResourceStrings.igx_date_picker_change_date
5+
: pickerResourceStrings.igx_date_picker_choose_date">today</igx-icon>
46
</igx-prefix>
57

68
<input class="igx-date-picker__input-date" [displayValuePipe]="this.formatter ? displayValue : null" igxInput

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

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ describe('IgxDatePicker', () => {
500500
UIInteractions.clearOverlay();
501501
});
502502
describe('API tests', () => {
503-
it('Should initialize and update all inputs propery', () => {
503+
it('Should initialize and update all inputs properly', () => {
504504
// no ngControl initialized
505505
expect(datePicker.required).toEqual(false);
506506
datePicker.ngOnInit();
@@ -510,18 +510,9 @@ describe('IgxDatePicker', () => {
510510
expect(datePicker.disabledDates).toEqual(null);
511511
expect(datePicker.displayDensity).toEqual(DisplayDensity.comfortable);
512512
expect(datePicker.displayFormat).toEqual(undefined);
513+
expect(datePicker.calendarFormat).toEqual(undefined);
513514
expect(datePicker.displayMonthsCount).toEqual(1);
514-
expect(datePicker.calendarFormat).toEqual({
515-
day: 'numeric',
516-
month: 'short',
517-
weekday: 'short',
518-
year: 'numeric'
519-
});
520-
expect(datePicker.formatViews).toEqual({
521-
day: false,
522-
month: true,
523-
year: false
524-
});
515+
expect(datePicker.formatViews).toEqual(undefined);
525516
expect(datePicker.headerOrientation).toEqual(PickerHeaderOrientation.Horizontal);
526517
expect(datePicker.hideOutsideDays).toEqual(undefined);
527518
expect(datePicker.inputFormat).toEqual(undefined);
@@ -576,34 +567,34 @@ describe('IgxDatePicker', () => {
576567
let newFormat: any = { day: 'short' };
577568
datePicker.calendarFormat = newFormat;
578569
// this SHOULD NOT mutate the underlying base settings
579-
expect(datePicker.calendarFormat).toEqual({
570+
expect((datePicker as any).pickerCalendarFormat).toEqual({
580571
day: 'short',
581572
month: 'short',
582573
weekday: 'short',
583574
year: 'numeric'
584575
});
585576
newFormat = { month: 'numeric' };
586577
datePicker.calendarFormat = newFormat;
587-
expect(datePicker.calendarFormat).toEqual({
588-
day: 'short',
578+
expect((datePicker as any).pickerCalendarFormat).toEqual({
579+
day: 'numeric',
589580
month: 'numeric',
590581
weekday: 'short',
591582
year: 'numeric'
592583
});
593584
datePicker.formatViews = null;
594-
expect(datePicker.formatViews).toEqual({ day: false, month: true, year: false });
585+
expect((datePicker as any).pickerFormatViews).toEqual({ day: false, month: true, year: false });
595586
const formatViewVal: IFormattingViews = {};
596587
datePicker.formatViews = formatViewVal;
597-
expect(datePicker.formatViews).toEqual({ day: false, month: true, year: false });
588+
expect((datePicker as any).pickerFormatViews).toEqual({ day: false, month: true, year: false });
598589
formatViewVal.day = true;
599590
datePicker.formatViews = formatViewVal;
600-
expect(datePicker.formatViews).toEqual({ day: true, month: true, year: false });
591+
expect((datePicker as any).pickerFormatViews).toEqual({ day: true, month: true, year: false });
601592
formatViewVal.year = true;
602593
datePicker.formatViews = formatViewVal;
603-
expect(datePicker.formatViews).toEqual({ day: true, month: true, year: true });
594+
expect((datePicker as any).pickerFormatViews).toEqual({ day: true, month: true, year: true });
604595
formatViewVal.month = false;
605596
datePicker.formatViews = formatViewVal;
606-
expect(datePicker.formatViews).toEqual({ day: true, month: false, year: true });
597+
expect((datePicker as any).pickerFormatViews).toEqual({ day: true, month: false, year: true });
607598
datePicker.headerOrientation = PickerHeaderOrientation.Vertical;
608599
expect(datePicker.headerOrientation).toEqual(PickerHeaderOrientation.Vertical);
609600
datePicker.hideOutsideDays = false;
@@ -675,10 +666,10 @@ describe('IgxDatePicker', () => {
675666
expect(mockDateEditor.value).toEqual(newDate);
676667
expect(datePicker.valueChange.emit).toHaveBeenCalledWith(newDate);
677668
expect(boundObject.date).toEqual(newDate);
678-
datePicker.value = '03/03/2003';
679-
expect(datePicker.value).toEqual('03/03/2003');
680-
expect(mockDateEditor.value).toEqual('03/03/2003');
681-
expect(datePicker.valueChange.emit).not.toHaveBeenCalledWith('03/03/2003' as any);
669+
datePicker.value = '2003-03-03';
670+
expect(datePicker.value).toEqual('2003-03-03');
671+
// expect(mockDateEditor.value).toEqual('03/03/2003');
672+
expect(datePicker.valueChange.emit).not.toHaveBeenCalledWith('2003-03-03' as any);
682673
const customFormatter: (val: Date) => string = (val: Date) => val.getFullYear().toString();
683674
datePicker.formatter = customFormatter;
684675
expect(datePicker.formatter).toEqual(customFormatter);
@@ -974,8 +965,6 @@ describe('IgxDatePicker', () => {
974965
mockDateEditor.valueChange.emit(validDate);
975966
expect(datePicker.valueChange.emit).toHaveBeenCalledTimes(1);
976967
expect(datePicker.valueChange.emit).toHaveBeenCalledWith(validDate);
977-
mockDateEditor.valueChange.emit(validDate);
978-
expect(datePicker.valueChange.emit).toHaveBeenCalledTimes(1);
979968

980969
const secondDate = new Date();
981970
mockDateEditor.valueChange.emit(secondDate);
@@ -994,8 +983,8 @@ describe('IgxDatePicker', () => {
994983
expect(datePicker.close).not.toHaveBeenCalled();
995984
// calendar instance is initialized properly
996985
expect(mockCalendar.hasHeader).toEqual(!datePicker.isDropdown);
997-
expect(mockCalendar.formatOptions).toEqual(datePicker.calendarFormat);
998-
expect(mockCalendar.formatViews).toEqual(datePicker.formatViews);
986+
expect(mockCalendar.formatOptions).toEqual((datePicker as any).pickerCalendarFormat);
987+
expect(mockCalendar.formatViews).toEqual((datePicker as any).pickerFormatViews);
999988
expect(mockCalendar.locale).toEqual(datePicker.locale);
1000989
expect(mockCalendar.vertical).toEqual(datePicker.headerOrientation === PickerHeaderOrientation.Vertical);
1001990
expect(mockCalendar.weekStart).toEqual(datePicker.weekStart);

0 commit comments

Comments
 (0)