From 2adac392aff8ca769e4dedb1e04f65ca69fa06dc Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Wed, 18 Mar 2015 13:00:20 +0200 Subject: [PATCH] Added DatePicker.minDate and DatePicker.maxDate. --- .../date-picker-tests-native.android.ts | 8 ++++ .../date-picker/date-picker-tests-native.d.ts | 2 + .../date-picker-tests-native.ios.ts | 8 ++++ .../tests/ui/date-picker/date-picker-tests.ts | 41 ++++++++++++++++++- ui/date-picker/date-picker-common.ts | 16 ++++++++ ui/date-picker/date-picker.android.ts | 22 ++++++++++ ui/date-picker/date-picker.d.ts | 10 +++++ ui/date-picker/date-picker.ios.ts | 21 ++++++++++ 8 files changed, 127 insertions(+), 1 deletion(-) diff --git a/apps/tests/ui/date-picker/date-picker-tests-native.android.ts b/apps/tests/ui/date-picker/date-picker-tests-native.android.ts index 6ec9f870a..f44f9481b 100644 --- a/apps/tests/ui/date-picker/date-picker-tests-native.android.ts +++ b/apps/tests/ui/date-picker/date-picker-tests-native.android.ts @@ -12,6 +12,14 @@ export function getNativeDay(datePicker: datePickerModule.DatePicker): number { return datePicker.android.getDayOfMonth(); } +export function getNativeMaxDate(datePicker: datePickerModule.DatePicker): Date { + return new Date(datePicker.android.getMaxDate()); +} + +export function getNativeMinDate(datePicker: datePickerModule.DatePicker): Date { + return new Date(datePicker.android.getMinDate()); +} + export function setNativeYear(datePicker: datePickerModule.DatePicker, value: number): void { datePicker.android.updateDate(value, datePicker.android.getMonth(), datePicker.android.getDayOfMonth()); } diff --git a/apps/tests/ui/date-picker/date-picker-tests-native.d.ts b/apps/tests/ui/date-picker/date-picker-tests-native.d.ts index 567f2f9bd..6cc8e0556 100644 --- a/apps/tests/ui/date-picker/date-picker-tests-native.d.ts +++ b/apps/tests/ui/date-picker/date-picker-tests-native.d.ts @@ -4,6 +4,8 @@ import datePickerModule = require("ui/date-picker"); export declare function getNativeYear(datePicker: datePickerModule.DatePicker): number; export declare function getNativeMonth(datePicker: datePickerModule.DatePicker): number; export declare function getNativeDay(datePicker: datePickerModule.DatePicker): number; +export declare function getNativeMaxDate(datePicker: datePickerModule.DatePicker): Date; +export declare function getNativeMinDate(datePicker: datePickerModule.DatePicker): Date; export declare function setNativeYear(datePicker: datePickerModule.DatePicker, value: number): void; export declare function setNativeMonth(datePicker: datePickerModule.DatePicker, value: number): void; diff --git a/apps/tests/ui/date-picker/date-picker-tests-native.ios.ts b/apps/tests/ui/date-picker/date-picker-tests-native.ios.ts index 34f444e08..6cc54d7b6 100644 --- a/apps/tests/ui/date-picker/date-picker-tests-native.ios.ts +++ b/apps/tests/ui/date-picker/date-picker-tests-native.ios.ts @@ -12,6 +12,14 @@ export function getNativeDay(datePicker: datePickerModule.DatePicker): number { return NSCalendar.currentCalendar().componentsFromDate(NSCalendarUnit.NSCalendarUnitYear | NSCalendarUnit.NSCalendarUnitMonth | NSCalendarUnit.NSCalendarUnitDay, datePicker.ios.date).day; } +export function getNativeMaxDate(datePicker: datePickerModule.DatePicker): Date { + return new Date(1000* NSDate.dateWithTimeIntervalSinceDate(0, datePicker.ios.maximumDate).timeIntervalSince1970); +} + +export function getNativeMinDate(datePicker: datePickerModule.DatePicker): Date { + return new Date(1000* NSDate.dateWithTimeIntervalSinceDate(0, datePicker.ios.minimumDate).timeIntervalSince1970); +} + export function setNativeYear(datePicker: datePickerModule.DatePicker, value: number): void { var comps = NSCalendar.currentCalendar().componentsFromDate(NSCalendarUnit.NSCalendarUnitYear | NSCalendarUnit.NSCalendarUnitMonth | NSCalendarUnit.NSCalendarUnitDay, datePicker.ios.date); comps.year = value; diff --git a/apps/tests/ui/date-picker/date-picker-tests.ts b/apps/tests/ui/date-picker/date-picker-tests.ts index 543854536..e596c7b2d 100644 --- a/apps/tests/ui/date-picker/date-picker-tests.ts +++ b/apps/tests/ui/date-picker/date-picker-tests.ts @@ -31,6 +31,8 @@ export var test_DummyForCodeSnippet = function () { datePicker.year = 1980; datePicker.month = 2; datePicker.day = 9; + datePicker.minDate = new Date(1975, 0, 29); + datePicker.maxDate = new Date(2045, 4, 12); // ``` // }); @@ -93,6 +95,26 @@ export var testDayFromLocalToNative = function () { }); } +export var testMaxDateFromLocalToNative = function () { + helper.buildUIAndRunTest(_createDatePicker(), function (views: Array) { + var datePicker = views[0]; + var expectedValue = new Date(1980, 1, 9); + datePicker.maxDate = expectedValue; + var actualValue = datePickerTestsNative.getNativeMaxDate(datePicker); + TKUnit.assert(actualValue.getTime() === expectedValue.getTime(), "Actual: " + actualValue + "; Expected: " + expectedValue); + }); +} + +export var testMinDateFromLocalToNative = function () { + helper.buildUIAndRunTest(_createDatePicker(), function (views: Array) { + var datePicker = views[0]; + var expectedValue = new Date(1980, 1, 9); + datePicker.minDate = expectedValue; + var actualValue = datePickerTestsNative.getNativeMinDate(datePicker); + TKUnit.assert(actualValue.getTime() === expectedValue.getTime(), "Actual: " + actualValue + "; Expected: " + expectedValue); + }); +} + export var testYearFromNativeToLocal = function () { helper.buildUIAndRunTest(_createDatePicker(), function (views: Array) { var datePicker = views[0]; @@ -121,4 +143,21 @@ export var testDayFromNativeToLocal = function () { var actualValue = datePicker.day; TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); }); -} \ No newline at end of file +} + +//export var testWTF = function () { +// var picker = new UIDatePicker(); +// picker.datePickerMode = UIDatePickerMode.UIDatePickerModeDate; +// var jsDate = new Date(1980, 1, 9); +// var nsDate = NSDate.dateWithTimeIntervalSince1970(jsDate.getTime() / 1000); +// console.log("nsDate: " + nsDate); +// console.log("nsDate.timeIntervalSince1970: " + nsDate.timeIntervalSince1970); +// console.log("------------------"); +// picker.maximumDate = nsDate; +// console.log("------------------"); +// console.log("(picker.ios.maximumDate === nsDate): " + (picker.maximumDate === nsDate)); +// console.log("nsDate: " + nsDate); +// console.log("nsDate.timeIntervalSince1970: " + nsDate.timeIntervalSince1970); +// console.log("picker.ios.maximumDate: " + picker.maximumDate); +// console.log("picker.ios.maximumDate.timeIntervalSince1970: " + picker.maximumDate.timeIntervalSince1970); +//} \ No newline at end of file diff --git a/ui/date-picker/date-picker-common.ts b/ui/date-picker/date-picker-common.ts index fa11c0727..08791a96e 100644 --- a/ui/date-picker/date-picker-common.ts +++ b/ui/date-picker/date-picker-common.ts @@ -7,6 +7,8 @@ export class DatePicker extends view.View implements definition.DatePicker { 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)); + public static maxDateProperty = new dependencyObservable.Property("maxDate", "DatePicker", new proxy.PropertyMetadata(undefined)); + public static minDateProperty = new dependencyObservable.Property("minDate", "DatePicker", new proxy.PropertyMetadata(undefined)); constructor() { super(); @@ -32,4 +34,18 @@ export class DatePicker extends view.View implements definition.DatePicker { set day(value: number) { this._setValue(DatePicker.dayProperty, value); } + + get maxDate(): Date { + return this._getValue(DatePicker.maxDateProperty); + } + set maxDate(value: Date) { + this._setValue(DatePicker.maxDateProperty, value); + } + + get minDate(): Date { + return this._getValue(DatePicker.minDateProperty); + } + set minDate(value: Date) { + this._setValue(DatePicker.minDateProperty, value); + } } \ No newline at end of file diff --git a/ui/date-picker/date-picker.android.ts b/ui/date-picker/date-picker.android.ts index 3c941e87a..717837639 100644 --- a/ui/date-picker/date-picker.android.ts +++ b/ui/date-picker/date-picker.android.ts @@ -32,6 +32,28 @@ function onDayPropertyChanged(data: dependencyObservable.PropertyChangeData) { (common.DatePicker.dayProperty.metadata).onSetNativeValue = onDayPropertyChanged; +function onMaxDatePropertyChanged(data: dependencyObservable.PropertyChangeData) { + var picker = data.object; + + var newValue = (data.newValue).getTime(); + if (picker.android && picker.android.getMaxDate() !== newValue) { + picker.android.setMaxDate(newValue); + } +} + +(common.DatePicker.maxDateProperty.metadata).onSetNativeValue = onMaxDatePropertyChanged; + +function onMinDatePropertyChanged(data: dependencyObservable.PropertyChangeData) { + var picker = data.object; + + var newValue = (data.newValue).getTime(); + if (picker.android && picker.android.getMinDate() !== newValue) { + picker.android.setMinDate(newValue); + } +} + +(common.DatePicker.minDateProperty.metadata).onSetNativeValue = onMinDatePropertyChanged; + // merge the exports of the common file with the exports of this file declare var exports; require("utils/module-merge").merge(common, exports); diff --git a/ui/date-picker/date-picker.d.ts b/ui/date-picker/date-picker.d.ts index aa8c3baa9..9e3978489 100644 --- a/ui/date-picker/date-picker.d.ts +++ b/ui/date-picker/date-picker.d.ts @@ -39,5 +39,15 @@ declare module "ui/date-picker" { * Gets or sets the day. The days start from 1. */ day: number; + + /** + * Gets or sets the max date. + */ + maxDate: Date; + + /** + * Gets or sets the min date. + */ + minDate: Date; } } \ No newline at end of file diff --git a/ui/date-picker/date-picker.ios.ts b/ui/date-picker/date-picker.ios.ts index 170ab0d85..5305f2c00 100644 --- a/ui/date-picker/date-picker.ios.ts +++ b/ui/date-picker/date-picker.ios.ts @@ -38,6 +38,27 @@ function onDayPropertyChanged(data: dependencyObservable.PropertyChangeData) { (common.DatePicker.dayProperty.metadata).onSetNativeValue = onDayPropertyChanged; +function onMaxDatePropertyChanged(data: dependencyObservable.PropertyChangeData) { + var picker = data.object; + + if (picker.ios) { + var nsDate = NSDate.dateWithTimeIntervalSince1970((data.newValue).getTime() / 1000); + picker.ios.maximumDate = nsDate; + } +} + +(common.DatePicker.maxDateProperty.metadata).onSetNativeValue = onMaxDatePropertyChanged; + +function onMinDatePropertyChanged(data: dependencyObservable.PropertyChangeData) { + var picker = data.object; + + if (picker.ios) { + picker.ios.minimumDate = NSDate.dateWithTimeIntervalSince1970((data.newValue).getTime() / 1000); + } +} + +(common.DatePicker.minDateProperty.metadata).onSetNativeValue = onMinDatePropertyChanged; + // merge the exports of the common file with the exports of this file declare var exports; require("utils/module-merge").merge(common, exports);