fix(datetime): column validation (#18875)

fixes #18793
This commit is contained in:
Manu MA
2019-07-24 18:04:43 +02:00
committed by GitHub
parent e8ab0fd317
commit 7ba718c0db

View File

@ -271,13 +271,8 @@ export class Datetime implements ComponentInterface {
}; };
this.updateDatetimeValue(changeData); this.updateDatetimeValue(changeData);
const columns = this.generateColumns(); picker.columns = this.generateColumns();
picker.columns = columns;
await this.validate(picker);
}); });
await this.validate(picker);
await picker.present(); await picker.present();
} }
@ -406,14 +401,14 @@ export class Datetime implements ComponentInterface {
max[name] = 0; max[name] = 0;
}); });
return divyColumns(columns); return this.validateColumns(divyColumns(columns));
} }
private async validate(picker: HTMLIonPickerElement) { private validateColumns(columns: PickerColumn[]) {
const today = new Date(); const today = new Date();
const minCompareVal = dateDataSortValue(this.datetimeMin); const minCompareVal = dateDataSortValue(this.datetimeMin);
const maxCompareVal = dateDataSortValue(this.datetimeMax); const maxCompareVal = dateDataSortValue(this.datetimeMax);
const yearCol = await picker.getColumn('year'); const yearCol = columns.find(c => c.name === 'year');
let selectedYear: number = today.getFullYear(); let selectedYear: number = today.getFullYear();
if (yearCol) { if (yearCol) {
@ -432,7 +427,7 @@ export class Datetime implements ComponentInterface {
} }
} }
const selectedMonth = await this.validateColumn(picker, const selectedMonth = this.validateColumn(columns,
'month', 1, 'month', 1,
minCompareVal, maxCompareVal, minCompareVal, maxCompareVal,
[selectedYear, 0, 0, 0, 0], [selectedYear, 0, 0, 0, 0],
@ -440,26 +435,28 @@ export class Datetime implements ComponentInterface {
); );
const numDaysInMonth = daysInMonth(selectedMonth, selectedYear); const numDaysInMonth = daysInMonth(selectedMonth, selectedYear);
const selectedDay = await this.validateColumn(picker, const selectedDay = this.validateColumn(columns,
'day', 2, 'day', 2,
minCompareVal, maxCompareVal, minCompareVal, maxCompareVal,
[selectedYear, selectedMonth, 0, 0, 0], [selectedYear, selectedMonth, 0, 0, 0],
[selectedYear, selectedMonth, numDaysInMonth, 23, 59] [selectedYear, selectedMonth, numDaysInMonth, 23, 59]
); );
const selectedHour = await this.validateColumn(picker, const selectedHour = this.validateColumn(columns,
'hour', 3, 'hour', 3,
minCompareVal, maxCompareVal, minCompareVal, maxCompareVal,
[selectedYear, selectedMonth, selectedDay, 0, 0], [selectedYear, selectedMonth, selectedDay, 0, 0],
[selectedYear, selectedMonth, selectedDay, 23, 59] [selectedYear, selectedMonth, selectedDay, 23, 59]
); );
await this.validateColumn(picker, this.validateColumn(columns,
'minute', 4, 'minute', 4,
minCompareVal, maxCompareVal, minCompareVal, maxCompareVal,
[selectedYear, selectedMonth, selectedDay, selectedHour, 0], [selectedYear, selectedMonth, selectedDay, selectedHour, 0],
[selectedYear, selectedMonth, selectedDay, selectedHour, 59] [selectedYear, selectedMonth, selectedDay, selectedHour, 59]
); );
return columns;
} }
private calcMinMax() { private calcMinMax() {
@ -514,8 +511,8 @@ export class Datetime implements ComponentInterface {
} }
} }
private async validateColumn(picker: HTMLIonPickerElement, name: string, index: number, min: number, max: number, lowerBounds: number[], upperBounds: number[]): Promise<number> { private validateColumn(columns: PickerColumn[], name: string, index: number, min: number, max: number, lowerBounds: number[], upperBounds: number[]): number {
const column = await picker.getColumn(name); const column = columns.find(c => c.name === name);
if (!column) { if (!column) {
return 0; return 0;
} }