mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Fixed all DatePicker issues in both platforms and covered with tests.
This commit is contained in:
@@ -4,9 +4,9 @@ import proxy = require("ui/core/proxy");
|
||||
import view = require("ui/core/view");
|
||||
|
||||
export class DatePicker extends view.View implements definition.DatePicker {
|
||||
public static yearProperty = new dependencyObservable.Property("year", "DatePicker", new proxy.PropertyMetadata(0));
|
||||
public static monthProperty = new dependencyObservable.Property("month", "DatePicker", new proxy.PropertyMetadata(0));
|
||||
public static dayProperty = new dependencyObservable.Property("day", "DatePicker", new proxy.PropertyMetadata(0));
|
||||
public static yearProperty = new dependencyObservable.Property("year", "DatePicker", new proxy.PropertyMetadata(undefined));
|
||||
public static monthProperty = new dependencyObservable.Property("month", "DatePicker", new proxy.PropertyMetadata(undefined));
|
||||
public static dayProperty = new dependencyObservable.Property("day", "DatePicker", new proxy.PropertyMetadata(undefined));
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -5,8 +5,8 @@ import proxy = require("ui/core/proxy");
|
||||
function onYearPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
var picker = <DatePicker>data.object;
|
||||
|
||||
if (picker.android) {
|
||||
picker.android.init(data.newValue, picker.month, picker.day, picker._listener);
|
||||
if (picker.android && picker.android.getYear() !== data.newValue) {
|
||||
picker.android.updateDate(data.newValue, picker.android.getMonth(), picker.android.getDayOfMonth());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@ function onYearPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
function onMonthPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
var picker = <DatePicker>data.object;
|
||||
|
||||
if (picker.android) {
|
||||
picker.android.init(picker.year, data.newValue, picker.day, picker._listener);
|
||||
if (picker.android && picker.android.getMonth() !== (data.newValue - 1)) {
|
||||
picker.android.updateDate(picker.android.getYear(), data.newValue - 1, picker.android.getDayOfMonth());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ function onMonthPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
function onDayPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
var picker = <DatePicker>data.object;
|
||||
|
||||
if (picker.android) {
|
||||
picker.android.init(picker.year, picker.month, data.newValue, picker._listener);
|
||||
if (picker.android && picker.android.getDayOfMonth !== data.newValue) {
|
||||
picker.android.updateDate(picker.android.getYear(), picker.android.getMonth(), data.newValue);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,11 +54,20 @@ export class DatePicker extends common.DatePicker {
|
||||
return that.get();
|
||||
},
|
||||
|
||||
onDateChanged: function (picker: android.widget.DatePicker, monthOfYear: number, dayOfMonth: number) {
|
||||
onDateChanged: function (picker: android.widget.DatePicker, year: number, month: number, day: number) {
|
||||
if (this.owner) {
|
||||
this.owner._onPropertyChangedFromNative(common.DatePicker.yearProperty, picker.getYear());
|
||||
this.owner._onPropertyChangedFromNative(common.DatePicker.monthProperty, monthOfYear);
|
||||
this.owner._onPropertyChangedFromNative(common.DatePicker.dayProperty, dayOfMonth);
|
||||
|
||||
if (year !== this.owner.year) {
|
||||
this.owner._onPropertyChangedFromNative(common.DatePicker.yearProperty, year);
|
||||
}
|
||||
|
||||
if ((month + 1) !== this.owner.month) {
|
||||
this.owner._onPropertyChangedFromNative(common.DatePicker.monthProperty, month + 1);
|
||||
}
|
||||
|
||||
if (day !== this.owner.day) {
|
||||
this.owner._onPropertyChangedFromNative(common.DatePicker.dayProperty, day);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -67,5 +76,6 @@ export class DatePicker extends common.DatePicker {
|
||||
public _createUI() {
|
||||
this._android = new android.widget.DatePicker(this._context);
|
||||
this._android.setCalendarViewShown(false);
|
||||
this._android.init(0, 0, 0, this._listener);
|
||||
}
|
||||
}
|
||||
4
ui/date-picker/date-picker.d.ts
vendored
4
ui/date-picker/date-picker.d.ts
vendored
@@ -31,12 +31,12 @@ declare module "ui/date-picker" {
|
||||
year: number;
|
||||
|
||||
/**
|
||||
* Gets or sets the month.
|
||||
* Gets or sets the month. The months start from 1.
|
||||
*/
|
||||
month: number;
|
||||
|
||||
/**
|
||||
* Gets or sets the day.
|
||||
* Gets or sets the day. The days start from 1.
|
||||
*/
|
||||
day: number;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@ function onYearPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
var picker = <DatePicker>data.object;
|
||||
|
||||
if (picker.ios) {
|
||||
setYearMonthDay(picker.ios, data.newValue, picker.month, picker.day);
|
||||
var comps = NSCalendar.currentCalendar().componentsFromDate(NSCalendarUnit.NSCalendarUnitYear | NSCalendarUnit.NSCalendarUnitMonth | NSCalendarUnit.NSCalendarUnitDay, picker.ios.date);
|
||||
comps.year = data.newValue;
|
||||
picker.ios.setDateAnimated(NSCalendar.currentCalendar().dateFromComponents(comps), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +18,9 @@ function onMonthPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
var picker = <DatePicker>data.object;
|
||||
|
||||
if (picker.ios) {
|
||||
setYearMonthDay(picker.ios, picker.year, data.newValue, picker.day);
|
||||
var comps = NSCalendar.currentCalendar().componentsFromDate(NSCalendarUnit.NSCalendarUnitYear | NSCalendarUnit.NSCalendarUnitMonth | NSCalendarUnit.NSCalendarUnitDay, picker.ios.date);
|
||||
comps.month = data.newValue;
|
||||
picker.ios.setDateAnimated(NSCalendar.currentCalendar().dateFromComponents(comps), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +30,9 @@ function onDayPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
var picker = <DatePicker>data.object;
|
||||
|
||||
if (picker.ios) {
|
||||
setYearMonthDay(picker.ios, picker.year, picker.month, data.newValue);
|
||||
var comps = NSCalendar.currentCalendar().componentsFromDate(NSCalendarUnit.NSCalendarUnitYear | NSCalendarUnit.NSCalendarUnitMonth | NSCalendarUnit.NSCalendarUnitDay, picker.ios.date);
|
||||
comps.day = data.newValue;
|
||||
picker.ios.setDateAnimated(NSCalendar.currentCalendar().dateFromComponents(comps), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,26 +74,22 @@ class UIDatePickerChangeHandlerImpl extends NSObject {
|
||||
}
|
||||
|
||||
public valueChanged(sender: UIDatePicker) {
|
||||
var calendar = NSCalendar.currentCalendar();
|
||||
var comp = calendar.componentsFromDate(NSCalendarUnit.NSHourCalendarUnit | NSCalendarUnit.NSMinuteCalendarUnit, sender.date);
|
||||
var comps = NSCalendar.currentCalendar().componentsFromDate(NSCalendarUnit.NSCalendarUnitYear | NSCalendarUnit.NSCalendarUnitMonth | NSCalendarUnit.NSCalendarUnitDay, sender.date);
|
||||
|
||||
if (comps.year !== this._owner.year) {
|
||||
this._owner._onPropertyChangedFromNative(common.DatePicker.yearProperty, comps.year);
|
||||
}
|
||||
|
||||
this._owner._onPropertyChangedFromNative(common.DatePicker.yearProperty, comp.year);
|
||||
this._owner._onPropertyChangedFromNative(common.DatePicker.monthProperty, comp.month);
|
||||
this._owner._onPropertyChangedFromNative(common.DatePicker.dayProperty, comp.day);
|
||||
if (comps.month !== this._owner.month) {
|
||||
this._owner._onPropertyChangedFromNative(common.DatePicker.monthProperty, comps.month);
|
||||
}
|
||||
|
||||
if (comps.day !== this._owner.day) {
|
||||
this._owner._onPropertyChangedFromNative(common.DatePicker.dayProperty, comps.day);
|
||||
}
|
||||
}
|
||||
|
||||
public static ObjCExposedMethods = {
|
||||
'valueChanged': { returns: interop.types.void, params: [UIDatePicker] }
|
||||
};
|
||||
}
|
||||
|
||||
function setYearMonthDay(picker: UIDatePicker, year: number, month: number, day: number) {
|
||||
var calendar = NSCalendar.currentCalendar();
|
||||
var comps = new NSDateComponents();
|
||||
|
||||
comps.year = year;
|
||||
comps.month = month;
|
||||
comps.day = day;
|
||||
|
||||
picker.setDateAnimated(calendar.dateFromComponents(comps), false);
|
||||
}
|
||||
@@ -53,7 +53,7 @@ export class ListPicker extends view.View implements definition.ListPicker {
|
||||
if (types.isDefined(this.items)) {
|
||||
if (index < 0 || index >= this.items.length) {
|
||||
this.selectedIndex = undefined;
|
||||
throw new Error("SelectedIndex should be between [0, items.length)");
|
||||
throw new Error("selectedIndex should be between [0, items.length - 1]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user