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