fix(datetime): update selectedIndex according to ngModel value

This commit is contained in:
Manu Mtz.-Almeida
2017-03-16 16:34:11 +01:00
parent afd99baba0
commit 74191c3e92
5 changed files with 38 additions and 27 deletions

View File

@ -570,18 +570,17 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces
}) })
}; };
if (column.options.length) {
// cool, we've loaded up the columns with options // cool, we've loaded up the columns with options
// preselect the option for this column // preselect the option for this column
var selected = column.options.find(opt => opt.value === getValueFromFormat(this._value, format)); var optValue = getValueFromFormat(this._value, format);
if (selected) { var selectedIndex = column.options.findIndex(opt => opt.value === optValue);
if (selectedIndex >= 0) {
// set the select index for this column's options // set the select index for this column's options
column.selectedIndex = column.options.indexOf(selected); column.selectedIndex = selectedIndex;
} }
// add our newly created column to the picker // add our newly created column to the picker
picker.addColumn(column); picker.addColumn(column);
}
}); });
const min = <any>this._min; const min = <any>this._min;
@ -600,14 +599,6 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces
} }
} }
/**
* @private
*/
getColumn(name: string): PickerColumn {
const columns = this._picker.getColumns();
return columns.find(col => col.name === name);
}
/** /**
* @private * @private
*/ */
@ -615,7 +606,7 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces
assert(lowerBounds.length === 5, 'lowerBounds length must be 5'); assert(lowerBounds.length === 5, 'lowerBounds length must be 5');
assert(upperBounds.length === 5, 'upperBounds length must be 5'); assert(upperBounds.length === 5, 'upperBounds length must be 5');
const column = this.getColumn(name); const column = this._picker.getColumn(name);
if (!column) { if (!column) {
return 0; return 0;
} }
@ -652,7 +643,7 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces
const today = new Date(); const today = new Date();
const minCompareVal = dateDataSortValue(this._min); const minCompareVal = dateDataSortValue(this._min);
const maxCompareVal = dateDataSortValue(this._max); const maxCompareVal = dateDataSortValue(this._max);
const yearCol = this.getColumn('year'); const yearCol = this._picker.getColumn('year');
assert(minCompareVal <= maxCompareVal, 'invalid min/max value'); assert(minCompareVal <= maxCompareVal, 'invalid min/max value');

View File

@ -68,4 +68,19 @@
></ion-datetime> ></ion-datetime>
</ion-item> </ion-item>
<ion-item>
<ion-label>
displayFormat="D MMMM YYYY"
pickerFormat="D MMMM YYYY"
min="2017-03-08"
max="2020-12-31"
</ion-label>
<ion-datetime
displayFormat="D MMMM YYYY"
pickerFormat="D MMMM YYYY"
min="2017-03-08"
max="2020-12-31"
></ion-datetime>
</ion-item>
</ion-content> </ion-content>

View File

@ -422,7 +422,7 @@ export class PickerColumnCmp {
} }
} }
var selectedIndex = clamp(min, this.col.selectedIndex, max); const selectedIndex = clamp(min, this.col.selectedIndex, max);
if (selectedIndex !== this.col.selectedIndex) { if (selectedIndex !== this.col.selectedIndex) {
var y = (selectedIndex * this.optHeight) * -1; var y = (selectedIndex * this.optHeight) * -1;
@ -512,7 +512,7 @@ export class PickerCmp {
if (!isPresent(column.options)) { if (!isPresent(column.options)) {
column.options = []; column.options = [];
} }
column.selectedIndex = 0; column.selectedIndex = column.selectedIndex || 0;
column.options = column.options.map(inputOpt => { column.options = column.options.map(inputOpt => {
let opt: PickerColumnOption = { let opt: PickerColumnOption = {
text: '', text: '',

View File

@ -53,6 +53,10 @@ export class Picker extends ViewController {
return this.data.columns; return this.data.columns;
} }
getColumn(name: string): PickerColumn {
return this.getColumns().find(column => column.name === name);
}
refresh() { refresh() {
this._cmp && this._cmp.instance.refresh && this._cmp.instance.refresh(); this._cmp && this._cmp.instance.refresh && this._cmp.instance.refresh();
} }

View File

@ -229,7 +229,7 @@ export function parseDate(val: any): DateTimeData {
} }
export function updateDate(existingData: DateTimeData, newData: any) { export function updateDate(existingData: DateTimeData, newData: any): boolean {
if (isPresent(newData) && newData !== '') { if (isPresent(newData) && newData !== '') {
if (isString(newData)) { if (isString(newData)) {
@ -239,7 +239,7 @@ export function updateDate(existingData: DateTimeData, newData: any) {
if (newData) { if (newData) {
// successfully parsed the ISO string to our DateTimeData // successfully parsed the ISO string to our DateTimeData
Object.assign(existingData, newData); Object.assign(existingData, newData);
return; return true;
} }
} else if ((isPresent(newData.year) || isPresent(newData.hour) || isPresent(newData.month) || isPresent(newData.day) || isPresent(newData.minute) || isPresent(newData.second))) { } else if ((isPresent(newData.year) || isPresent(newData.hour) || isPresent(newData.month) || isPresent(newData.day) || isPresent(newData.minute) || isPresent(newData.second))) {
@ -262,7 +262,7 @@ export function updateDate(existingData: DateTimeData, newData: any) {
(<any>existingData)[k] = newData[k].value; (<any>existingData)[k] = newData[k].value;
} }
return; return true;
} }
// eww, invalid data // eww, invalid data
@ -274,6 +274,7 @@ export function updateDate(existingData: DateTimeData, newData: any) {
delete (<any>existingData)[k]; delete (<any>existingData)[k];
} }
} }
return false;
} }