From 14098d40db4bd52f90fb0986fa0f81a4f54f98d0 Mon Sep 17 00:00:00 2001 From: Stanimira Vlaeva Date: Thu, 3 Aug 2017 22:03:05 +0300 Subject: [PATCH] fix: set default values to time widgets (#4383) --- .../date-picker-tests-native.android.ts | 6 +- .../date-picker-tests-native.ios.ts | 6 +- tests/app/ui/date-picker/date-picker-tests.ts | 127 +++++++++--------- .../ui/date-picker/date-picker-common.ts | 46 +++++-- .../ui/date-picker/date-picker.android.ts | 13 +- .../ui/date-picker/date-picker.ios.ts | 42 +++--- .../ui/time-picker/time-picker-common.ts | 25 ++-- 7 files changed, 141 insertions(+), 124 deletions(-) diff --git a/tests/app/ui/date-picker/date-picker-tests-native.android.ts b/tests/app/ui/date-picker/date-picker-tests-native.android.ts index 0b1c4353f..9ce5500c8 100644 --- a/tests/app/ui/date-picker/date-picker-tests-native.android.ts +++ b/tests/app/ui/date-picker/date-picker-tests-native.android.ts @@ -5,7 +5,7 @@ export function getNativeYear(datePicker: datePickerModule.DatePicker): number { } export function getNativeMonth(datePicker: datePickerModule.DatePicker): number { - return datePicker.android.getMonth() + 1; + return datePicker.android.getMonth(); } export function getNativeDay(datePicker: datePickerModule.DatePicker): number { @@ -25,7 +25,7 @@ export function setNativeYear(datePicker: datePickerModule.DatePicker, value: nu } export function setNativeMonth(datePicker: datePickerModule.DatePicker, value: number): void { - datePicker.android.updateDate(datePicker.android.getYear(), value - 1, datePicker.android.getDayOfMonth()); + datePicker.android.updateDate(datePicker.android.getYear(), value, datePicker.android.getDayOfMonth()); } export function setNativeDay(datePicker: datePickerModule.DatePicker, value: number): void { @@ -33,5 +33,5 @@ export function setNativeDay(datePicker: datePickerModule.DatePicker, value: num } export function setNativeDate(datePicker: datePickerModule.DatePicker, year: number, month: number, day: number): void { - datePicker.android.updateDate(year, month - 1, day); + datePicker.android.updateDate(year, month, day); } diff --git a/tests/app/ui/date-picker/date-picker-tests-native.ios.ts b/tests/app/ui/date-picker/date-picker-tests-native.ios.ts index ead0fa337..bc6b8ca1f 100644 --- a/tests/app/ui/date-picker/date-picker-tests-native.ios.ts +++ b/tests/app/ui/date-picker/date-picker-tests-native.ios.ts @@ -7,7 +7,7 @@ export function getNativeYear(datePicker: datePickerModule.DatePicker): number { } export function getNativeMonth(datePicker: datePickerModule.DatePicker): number { - return utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).month; + return utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date).month - 1; } export function getNativeDay(datePicker: datePickerModule.DatePicker): number { @@ -31,7 +31,7 @@ export function setNativeYear(datePicker: datePickerModule.DatePicker, value: nu export function setNativeMonth(datePicker: datePickerModule.DatePicker, value: number): void { var comps = utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); - comps.month = value; + comps.month = value + 1; datePicker.ios.setDateAnimated(utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).dateFromComponents(comps), false); (datePicker)._changeHandler.valueChanged(datePicker.ios); } @@ -46,7 +46,7 @@ export function setNativeDay(datePicker: datePickerModule.DatePicker, value: num export function setNativeDate(datePicker: datePickerModule.DatePicker, year: number, month: number, day: number): void { var comps = utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, datePicker.ios.date); comps.year = year; - comps.month = month; + comps.month = month + 1; comps.day = day; datePicker.ios.setDateAnimated(utils.ios.getter(NSCalendar, NSCalendar.currentCalendar).dateFromComponents(comps), false); (datePicker)._changeHandler.valueChanged(datePicker.ios); diff --git a/tests/app/ui/date-picker/date-picker-tests.ts b/tests/app/ui/date-picker/date-picker-tests.ts index 73c0a98a5..2fe55b493 100644 --- a/tests/app/ui/date-picker/date-picker-tests.ts +++ b/tests/app/ui/date-picker/date-picker-tests.ts @@ -13,6 +13,7 @@ import * as helper from "../helper"; export function test_recycling() { helper.nativeView_recycling_test(() => new datePickerModule.DatePicker()); } +const currentDate = new Date(); function assertDate(datePicker: datePickerModule.DatePicker, expectedYear: number, expectedMonth: number, expectedDay: number) { TKUnit.assertEqual(datePicker.year, expectedYear, "datePicker.year"); @@ -43,7 +44,7 @@ function assertDate(datePicker: datePickerModule.DatePicker, expectedYear: numbe export class DatePickerTest extends testModule.UITest { public create() { - let datePicker = new datePickerModule.DatePicker(); + const datePicker = new datePickerModule.DatePicker(); datePicker.id = "DatePicker"; return datePicker; } @@ -63,7 +64,7 @@ export class DatePickerTest extends testModule.UITest> date-picker-configure datePicker.year = 1980; datePicker.month = 2; @@ -80,72 +81,72 @@ export class DatePickerTest extends testModule.UITest (x <= y && x >= y); + export class DatePickerBase extends View implements DatePickerDefinition { public year: number; public month: number; @@ -14,25 +17,46 @@ export class DatePickerBase extends View implements DatePickerDefinition { DatePickerBase.prototype.recycleNativeView = "auto"; -export const yearProperty = new Property({ name: "year", valueConverter: (v) => parseInt(v) }); +export const yearProperty = new Property({ + name: "year", + defaultValue: defaultDate.getFullYear(), + valueConverter: v => parseInt(v), +}); yearProperty.register(DatePickerBase); -export const monthProperty = new Property({ name: "month", valueConverter: (v) => parseInt(v) }); +export const monthProperty = new Property({ + name: "month", + defaultValue: defaultDate.getMonth(), + valueConverter: v => parseInt(v), +}); monthProperty.register(DatePickerBase); -export const dayProperty = new Property({ name: "day", valueConverter: (v) => parseInt(v) }); +export const dayProperty = new Property({ + name: "day", + defaultValue: defaultDate.getDate(), + valueConverter: v => parseInt(v), +}); dayProperty.register(DatePickerBase); -function dateComparer(x: Date, y: Date): boolean { - return (x <= y && x >= y) ? true : false; -} - // TODO: Make CoercibleProperties -export const maxDateProperty = new Property({ name: "maxDate", equalityComparer: dateComparer, valueConverter: (v) => new Date(v) }); +export const maxDateProperty = new Property({ + name: "maxDate", + equalityComparer: dateComparer, + valueConverter: v => new Date(v), +}); maxDateProperty.register(DatePickerBase); -export const minDateProperty = new Property({ name: "minDate", equalityComparer: dateComparer, valueConverter: (v) => new Date(v) }); +export const minDateProperty = new Property({ + name: "minDate", + equalityComparer: dateComparer, + valueConverter: v => new Date(v), +}); minDateProperty.register(DatePickerBase); -export const dateProperty = new Property({ name: "date", equalityComparer: dateComparer, valueConverter: (v) => new Date(v) }); -dateProperty.register(DatePickerBase); \ No newline at end of file +export const dateProperty = new Property({ + name: "date", + defaultValue: defaultDate, + equalityComparer: dateComparer, + valueConverter: v => new Date(v), +}); +dateProperty.register(DatePickerBase); diff --git a/tns-core-modules/ui/date-picker/date-picker.android.ts b/tns-core-modules/ui/date-picker/date-picker.android.ts index 049420c25..3b15f7aa3 100644 --- a/tns-core-modules/ui/date-picker/date-picker.android.ts +++ b/tns-core-modules/ui/date-picker/date-picker.android.ts @@ -31,8 +31,8 @@ function initializeDateChangedListener(): void { dateChanged = true; } - if ((month + 1) !== owner.month) { - monthProperty.nativeValueChange(owner, month + 1); + if (month !== owner.month) { + monthProperty.nativeValueChange(owner, month); dateChanged = true; } @@ -58,7 +58,8 @@ export class DatePicker extends DatePickerBase { const picker = new android.widget.DatePicker(this._context); picker.setCalendarViewShown(false); const listener = new DateChangedListener(this); - picker.init(0, 0, 0, listener); + + picker.init(this.year, this.month, this.day, listener); (picker).listener = listener; return picker; } @@ -76,7 +77,7 @@ export class DatePicker extends DatePickerBase { private updateNativeDate(): void { const nativeView = this.nativeViewProtected; const year = typeof this.year === "number" ? this.year : nativeView.getYear(); - const month = typeof this.month === "number" ? (this.month - 1) : nativeView.getMonth(); + const month = typeof this.month === "number" ? this.month : nativeView.getMonth(); const day = typeof this.day === "number" ? this.day : nativeView.getDayOfMonth(); this.date = new Date(year, month, day); } @@ -94,7 +95,7 @@ export class DatePicker extends DatePickerBase { return this.nativeViewProtected.getMonth(); } [monthProperty.setNative](value: number) { - if (this.nativeViewProtected.getMonth() !== (value - 1)) { + if (this.nativeViewProtected.getMonth() !== value) { this.updateNativeDate(); } } @@ -136,4 +137,4 @@ export class DatePicker extends DatePickerBase { const newValue = value instanceof Date ? value.getTime() : value; this.nativeViewProtected.setMinDate(newValue); } -} \ No newline at end of file +} diff --git a/tns-core-modules/ui/date-picker/date-picker.ios.ts b/tns-core-modules/ui/date-picker/date-picker.ios.ts index 271a95d7c..410fc423b 100644 --- a/tns-core-modules/ui/date-picker/date-picker.ios.ts +++ b/tns-core-modules/ui/date-picker/date-picker.ios.ts @@ -29,38 +29,29 @@ export class DatePicker extends DatePickerBase { return this.nativeViewProtected.date.getFullYear(); } [yearProperty.setNative](value: number) { - let picker = this.nativeViewProtected; - let comps = ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, picker.date); - comps.year = value; - this.date = new Date(comps.year, comps.month - 1, comps.day); + this.date = new Date(value, this.month, this.day); } [monthProperty.getDefault](): number { return this.nativeViewProtected.date.getMonth(); } [monthProperty.setNative](value: number) { - let picker = this.nativeViewProtected; - let comps = ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, picker.date); - comps.month = value; - this.date = new Date(comps.year, comps.month - 1, comps.day); + this.date = new Date(this.year, value, this.day); } [dayProperty.getDefault](): number { return this.nativeViewProtected.date.getDay(); } [dayProperty.setNative](value: number) { - let picker = this.nativeViewProtected; - let comps = ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, picker.date); - comps.day = value; - this.date = new Date(comps.year, comps.month - 1, comps.day); + this.date = new Date(this.year, this.month, value); } [dateProperty.getDefault](): Date { return this.nativeViewProtected.date; } [dateProperty.setNative](value: Date) { - let picker = this.nativeViewProtected; - let comps = ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, picker.date); + const picker = this.nativeViewProtected; + const comps = ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, picker.date); comps.year = value.getFullYear(); comps.month = value.getMonth() + 1; comps.day = value.getDate(); @@ -71,8 +62,8 @@ export class DatePicker extends DatePickerBase { return this.nativeViewProtected.maximumDate; } [maxDateProperty.setNative](value: Date) { - let picker = this.nativeViewProtected; - let nsDate = NSDate.dateWithTimeIntervalSince1970(value.getTime() / 1000); + const picker = this.nativeViewProtected; + const nsDate = NSDate.dateWithTimeIntervalSince1970(value.getTime() / 1000); picker.maximumDate = nsDate; } @@ -80,8 +71,8 @@ export class DatePicker extends DatePickerBase { return this.nativeViewProtected.minimumDate; } [minDateProperty.setNative](value: Date) { - let picker = this.nativeViewProtected; - let nsDate = NSDate.dateWithTimeIntervalSince1970(value.getTime() / 1000); + const picker = this.nativeViewProtected; + const nsDate = NSDate.dateWithTimeIntervalSince1970(value.getTime() / 1000); picker.minimumDate = nsDate; } @@ -89,7 +80,7 @@ export class DatePicker extends DatePickerBase { return this.nativeViewProtected.valueForKey("textColor"); } [colorProperty.setNative](value: Color | UIColor) { - let picker = this.nativeViewProtected; + const picker = this.nativeViewProtected; picker.setValueForKey(value instanceof Color ? value.ios : value, "textColor"); } } @@ -98,15 +89,15 @@ class UIDatePickerChangeHandlerImpl extends NSObject { private _owner: WeakRef; public static initWithOwner(owner: WeakRef): UIDatePickerChangeHandlerImpl { - let impl = UIDatePickerChangeHandlerImpl.new(); + const impl = UIDatePickerChangeHandlerImpl.new(); impl._owner = owner; return impl; } public valueChanged(sender: UIDatePicker) { - let comps = ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, sender.date); + const comps = ios.getter(NSCalendar, NSCalendar.currentCalendar).componentsFromDate(NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay, sender.date); - let owner = this._owner.get(); + const owner = this._owner.get(); if (!owner) { return; } @@ -117,8 +108,9 @@ class UIDatePickerChangeHandlerImpl extends NSObject { dateChanged = true; } - if (comps.month !== owner.month) { - monthProperty.nativeValueChange(owner, comps.month); + const jsMonth = comps.month - 1; + if (jsMonth !== owner.month) { + monthProperty.nativeValueChange(owner, jsMonth); dateChanged = true; } @@ -128,7 +120,7 @@ class UIDatePickerChangeHandlerImpl extends NSObject { } if (dateChanged) { - dateProperty.nativeValueChange(owner, new Date(comps.year, comps.month - 1, comps.day)); + dateProperty.nativeValueChange(owner, new Date(comps.year, jsMonth, comps.day)); } } diff --git a/tns-core-modules/ui/time-picker/time-picker-common.ts b/tns-core-modules/ui/time-picker/time-picker-common.ts index 29605caee..5c52d52e1 100644 --- a/tns-core-modules/ui/time-picker/time-picker-common.ts +++ b/tns-core-modules/ui/time-picker/time-picker-common.ts @@ -8,6 +8,8 @@ interface Time { minute: number; } +const dateComparer = (x: Date, y: Date): boolean => (x <= y && x >= y); + export function getValidTime(picker: TimePickerDefinition, hour: number, minute: number): Time { if (picker.minuteInterval > 1) { let minuteFloor = minute - (minute % picker.minuteInterval); @@ -97,7 +99,7 @@ export abstract class TimePickerBase extends View implements TimePickerDefinitio TimePickerBase.prototype.recycleNativeView = "auto"; -export var minHourProperty = new Property({ +export const minHourProperty = new Property({ name: "minHour", defaultValue: 0, valueChanged: (picker, oldValue, newValue) => { if (!isHourValid(newValue) || !isValidTime(picker)) { throw new Error(getErrorMessage(picker, "minHour", newValue)); @@ -106,7 +108,7 @@ export var minHourProperty = new Property({ }); minHourProperty.register(TimePickerBase); -export var maxHourProperty = new Property({ +export const maxHourProperty = new Property({ name: "maxHour", defaultValue: 23, valueChanged: (picker, oldValue, newValue) => { if (!isHourValid(newValue) || !isValidTime(picker)) { throw new Error(getErrorMessage(picker, "maxHour", newValue)); @@ -116,7 +118,7 @@ export var maxHourProperty = new Property({ }); maxHourProperty.register(TimePickerBase); -export var minMinuteProperty = new Property({ +export const minMinuteProperty = new Property({ name: "minMinute", defaultValue: 0, valueChanged: (picker, oldValue, newValue) => { if (!isMinuteValid(newValue) || !isValidTime(picker)) { throw new Error(getErrorMessage(picker, "minMinute", newValue)); @@ -125,7 +127,7 @@ export var minMinuteProperty = new Property({ }); minMinuteProperty.register(TimePickerBase); -export var maxMinuteProperty = new Property({ +export const maxMinuteProperty = new Property({ name: "maxMinute", defaultValue: 59, valueChanged: (picker, oldValue, newValue) => { if (!isMinuteValid(newValue) || !isValidTime(picker)) { throw new Error(getErrorMessage(picker, "maxMinute", newValue)); @@ -134,7 +136,7 @@ export var maxMinuteProperty = new Property({ }); maxMinuteProperty.register(TimePickerBase); -export var minuteIntervalProperty = new Property({ +export const minuteIntervalProperty = new Property({ name: "minuteInterval", defaultValue: 1, valueChanged: (picker, oldValue, newValue) => { if (!isMinuteIntervalValid(newValue)) { throw new Error(getErrorMessage(picker, "minuteInterval", newValue)); @@ -143,11 +145,7 @@ export var minuteIntervalProperty = new Property({ }); minuteIntervalProperty.register(TimePickerBase); -function dateComparer(x: Date, y: Date): boolean { - return (x <= y && x >= y) ? true : false; -} - -export var minuteProperty = new Property({ +export const minuteProperty = new Property({ name: "minute", defaultValue: 0, valueChanged: (picker, oldValue, newValue) => { if (!isMinuteValid(newValue) || !isValidTime(picker)) { throw new Error(getErrorMessage(picker, "minute", newValue)); @@ -158,7 +156,7 @@ export var minuteProperty = new Property({ }); minuteProperty.register(TimePickerBase); -export var hourProperty = new Property({ +export const hourProperty = new Property({ name: "hour", defaultValue: 0, valueChanged: (picker, oldValue, newValue) => { if (!isHourValid(newValue) || !isValidTime(picker)) { throw new Error(getErrorMessage(picker, "Hour", newValue)); @@ -170,8 +168,9 @@ export var hourProperty = new Property({ }); hourProperty.register(TimePickerBase); -export var timeProperty = new Property({ - name: "time", equalityComparer: dateComparer, valueChanged: (picker, oldValue, newValue) => { +export const timeProperty = new Property({ + name: "time", defaultValue: new Date(), equalityComparer: dateComparer, + valueChanged: (picker, oldValue, newValue) => { if (!isValidTime(picker)) { throw new Error(getErrorMessage(picker, "time", newValue)); }