Introducing DatePicker date property.

This commit is contained in:
Nedyalko Nikolov
2016-03-01 15:56:28 +02:00
parent d4cf77e5fc
commit 8c6f2c697f
6 changed files with 315 additions and 213 deletions

View File

@@ -9,6 +9,7 @@ export class DatePicker extends view.View implements definition.DatePicker {
public static dayProperty = new dependencyObservable.Property("day", "DatePicker", new proxy.PropertyMetadata(undefined));
public static maxDateProperty = new dependencyObservable.Property("maxDate", "DatePicker", new proxy.PropertyMetadata(undefined));
public static minDateProperty = new dependencyObservable.Property("minDate", "DatePicker", new proxy.PropertyMetadata(undefined));
public static dateProperty = new dependencyObservable.Property("date", "DatePicker", new proxy.PropertyMetadata(undefined));
constructor() {
super();
@@ -48,4 +49,11 @@ export class DatePicker extends view.View implements definition.DatePicker {
set minDate(value: Date) {
this._setValue(DatePicker.minDateProperty, value);
}
get date(): Date {
return this._getValue(DatePicker.dateProperty);
}
set date(value: Date) {
this._setValue(DatePicker.dateProperty, value);
}
}

View File

@@ -39,7 +39,7 @@ function updateNativeDate(picker: DatePicker) {
var month = types.isNumber(picker.month) ? (picker.month - 1) : picker.android.getMonth();
var day = types.isNumber(picker.day) ? picker.day : picker.android.getDayOfMonth();
picker.android.updateDate(year, month, day);
picker.date = new Date(year, month, day);
}
function onMaxDatePropertyChanged(data: dependencyObservable.PropertyChangeData) {
@@ -64,6 +64,19 @@ function onMinDatePropertyChanged(data: dependencyObservable.PropertyChangeData)
(<proxy.PropertyMetadata>common.DatePicker.minDateProperty.metadata).onSetNativeValue = onMinDatePropertyChanged;
function onDatePropertyChanged(data: dependencyObservable.PropertyChangeData) {
var picker = <DatePicker>data.object;
var newValue = <Date>data.newValue;
if (picker.android && (picker.android.getDayOfMonth() !== newValue.getDay()
|| picker.android.getMonth() !== newValue.getMonth()
|| picker.android.getYear() !== newValue.getFullYear())) {
picker.android.updateDate(newValue.getFullYear(), newValue.getMonth(), newValue.getDate());
}
}
(<proxy.PropertyMetadata>common.DatePicker.dateProperty.metadata).onSetNativeValue = onDatePropertyChanged;
global.moduleMerge(common, exports);
export class DatePicker extends common.DatePicker {
@@ -90,14 +103,17 @@ export class DatePicker extends common.DatePicker {
if (year !== this.owner.year) {
this.owner._onPropertyChangedFromNative(common.DatePicker.yearProperty, year);
this.owner._onPropertyChangedFromNative(common.DatePicker.dateProperty, new Date(year, this.owner.month - 1, this.owner.day));
}
if ((month + 1) !== this.owner.month) {
this.owner._onPropertyChangedFromNative(common.DatePicker.monthProperty, month + 1);
this.owner._onPropertyChangedFromNative(common.DatePicker.dateProperty, new Date(this.owner.year, month, this.owner.day));
}
if (day !== this.owner.day) {
this.owner._onPropertyChangedFromNative(common.DatePicker.dayProperty, day);
this.owner._onPropertyChangedFromNative(common.DatePicker.dateProperty, new Date(this.owner.year, this.owner.month - 1, day));
}
}
}

View File

@@ -12,6 +12,7 @@ declare module "ui/date-picker" {
public static yearProperty: dependencyObservable.Property;
public static monthProperty: dependencyObservable.Property;
public static dayProperty: dependencyObservable.Property;
public static dateProperty: dependencyObservable.Property;
constructor();
@@ -39,6 +40,11 @@ declare module "ui/date-picker" {
* Gets or sets the day. The days start from 1.
*/
day: number;
/**
* Gets or sets the entire date.
*/
date: Date;
/**
* Gets or sets the max date.

View File

@@ -10,7 +10,7 @@ function onYearPropertyChanged(data: dependencyObservable.PropertyChangeData) {
if (picker.ios) {
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);
picker.date = new Date(comps.year, comps.month - 1, comps.day);
}
}
@@ -22,7 +22,7 @@ function onMonthPropertyChanged(data: dependencyObservable.PropertyChangeData) {
if (picker.ios) {
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);
picker.date = new Date(comps.year, comps.month - 1, comps.day);
}
}
@@ -34,7 +34,7 @@ function onDayPropertyChanged(data: dependencyObservable.PropertyChangeData) {
if (picker.ios) {
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);
picker.date = new Date(comps.year, comps.month - 1, comps.day);
}
}
@@ -61,6 +61,21 @@ function onMinDatePropertyChanged(data: dependencyObservable.PropertyChangeData)
(<proxy.PropertyMetadata>common.DatePicker.minDateProperty.metadata).onSetNativeValue = onMinDatePropertyChanged;
function onDatePropertyChanged(data: dependencyObservable.PropertyChangeData) {
var picker = <DatePicker>data.object;
if (picker.ios) {
var comps = NSCalendar.currentCalendar().componentsFromDate(NSCalendarUnit.NSCalendarUnitYear | NSCalendarUnit.NSCalendarUnitMonth | NSCalendarUnit.NSCalendarUnitDay, picker.ios.date);
let newDate = data.newValue;
comps.year = newDate.getFullYear();
comps.month = newDate.getMonth() + 1;
comps.day = newDate.getDate();
picker.ios.setDateAnimated(NSCalendar.currentCalendar().dateFromComponents(comps), false);
}
}
(<proxy.PropertyMetadata>common.DatePicker.dateProperty.metadata).onSetNativeValue = onDatePropertyChanged;
global.moduleMerge(common, exports);
export class DatePicker extends common.DatePicker {
@@ -100,16 +115,24 @@ class UIDatePickerChangeHandlerImpl extends NSObject {
return;
}
let dateChanged = false;
if (comps.year !== owner.year) {
owner._onPropertyChangedFromNative(common.DatePicker.yearProperty, comps.year);
dateChanged = true;
}
if (comps.month !== owner.month) {
owner._onPropertyChangedFromNative(common.DatePicker.monthProperty, comps.month);
dateChanged = true;
}
if (comps.day !== owner.day) {
owner._onPropertyChangedFromNative(common.DatePicker.dayProperty, comps.day);
dateChanged = true;
}
if (dateChanged) {
owner._onPropertyChangedFromNative(common.DatePicker.dateProperty, new Date(comps.year, comps.month - 1, comps.day));
}
}