Skip to content

Commit 4762699

Browse files
authored
fix(time-picker): properly handle 0 on hour and minutes with valueChanged (#10460)
closes #10457
1 parent 82e9c67 commit 4762699

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

apps/automated/src/ui/time-picker/time-picker-tests.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,27 @@ export class TimePickerTest extends testModule.UITest<timePickerModule.TimePicke
197197
TKUnit.assertEqual(actualValue, expectedValue);
198198
}
199199

200+
public testHourZeroFromLocalToNative() {
201+
let expectedValue = 0;
202+
this.testView.hour = expectedValue;
203+
let actualValue = timePickerTestsNative.getNativeHour(this.testView);
204+
TKUnit.assertEqual(actualValue, expectedValue);
205+
}
206+
200207
public testMinuteFromLocalToNative() {
201208
let expectedValue = 59;
202209
this.testView.minute = expectedValue;
203210
let actualValue = timePickerTestsNative.getNativeMinute(this.testView);
204211
TKUnit.assertEqual(actualValue, expectedValue);
205212
}
206213

214+
public testMinuteZeroFromLocalToNative() {
215+
let expectedValue = 0;
216+
this.testView.minute = expectedValue;
217+
let actualValue = timePickerTestsNative.getNativeMinute(this.testView);
218+
TKUnit.assertEqual(actualValue, expectedValue);
219+
}
220+
207221
public testHourFromNativeToLocal() {
208222
let expectedValue = 14;
209223
timePickerTestsNative.setNativeHour(this.testView, expectedValue);

apps/toolbox/src/pages/datepicker.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export function navigatingTo(args: EventData) {
1010
export class SampleData extends Observable {
1111
minDate = new Date();
1212
maxDate = new Date(2030, 7, 1);
13+
hour = 8;
14+
minute = 0;
1315
displayDate = {
1416
day: new Date().getDate(),
1517
month: new Date().getMonth(),

apps/toolbox/src/pages/datepicker.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,9 @@ year="{{displayDate?.year}}"
1616
<Switch checked="true" col="0" checkedChange="{{checkedChange}}" />
1717
<Label text="Show Time" col="1" class="m-l-10" />
1818
</GridLayout>
19+
<GridLayout rows="auto,auto" columns="">
20+
<Label text="Time Picker standalone:" row="0" col="0" class="m-t-10" />
21+
<TimePicker row="1" hour="{{hour}}" minute="{{minute}}"></TimePicker>
22+
</GridLayout>
1923
</StackLayout>
2024
</Page>

packages/core/ui/time-picker/time-picker-common.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,11 @@ minuteIntervalProperty.register(TimePickerBase);
165165

166166
export const minuteProperty = new Property<TimePickerBase, number>({
167167
name: 'minute',
168-
defaultValue: 0,
168+
// avoid defaultValue of 0 because it will prevent valueChanged from firing to initialize value due to it already matching defaultValue to start
169+
// sometimes user needs to set 0: https://github.com/NativeScript/NativeScript/issues/10457
170+
defaultValue: null,
169171
valueChanged: (picker, oldValue, newValue) => {
172+
newValue = newValue || 0;
170173
if (!isMinuteValid(newValue) || !isValidTime(picker)) {
171174
throw new Error(getErrorMessage(picker, 'minute', newValue));
172175
}
@@ -179,8 +182,11 @@ minuteProperty.register(TimePickerBase);
179182

180183
export const hourProperty = new Property<TimePickerBase, number>({
181184
name: 'hour',
182-
defaultValue: 0,
185+
// avoid defaultValue of 0 because it will prevent valueChanged from firing to initialize value due to it already matching defaultValue to start
186+
// sometimes user needs to set 0: https://github.com/NativeScript/NativeScript/issues/10457
187+
defaultValue: null,
183188
valueChanged: (picker, oldValue, newValue) => {
189+
newValue = newValue || 0;
184190
if (!isHourValid(newValue) || !isValidTime(picker)) {
185191
throw new Error(getErrorMessage(picker, 'Hour', newValue));
186192
}

0 commit comments

Comments
 (0)