From 942bf4054df77fb1ff67a078dcf53df4b6fa59b9 Mon Sep 17 00:00:00 2001 From: zhongwuzw Date: Fri, 15 Mar 2019 11:18:36 -0700 Subject: [PATCH] Fixed minuteInterval invalid in time mode (#23923) Summary: From https://github.com/facebook/react-native/pull/23861#issue-260337314 > changing "interval" example from "time-only" to "datetime" because there's a known bug that prevented the previous example from working We need to ensure set minuteInterval after set datePickerMode, otherwise minuteInterval invalid in time mode. cc. grabbou cpojer . [iOS] [Fixed] - Fixed minuteInterval invalid in time mode Pull Request resolved: https://github.com/facebook/react-native/pull/23923 Differential Revision: D14477549 Pulled By: cpojer fbshipit-source-id: 2c612d488b6d592b1907e150df5e07fe83132829 --- RNTester/js/DatePickerIOSExample.js | 6 +++--- React/Views/RCTDatePicker.m | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/RNTester/js/DatePickerIOSExample.js b/RNTester/js/DatePickerIOSExample.js index e58423cc0..7b006ae0f 100644 --- a/RNTester/js/DatePickerIOSExample.js +++ b/RNTester/js/DatePickerIOSExample.js @@ -131,16 +131,16 @@ exports.examples = [ }, }, { - title: 'Picker with 20-minute interval', + title: 'Time only picker, 20-minute interval', render: function(): React.Element { return ( {(state, onDateChange) => ( )} diff --git a/React/Views/RCTDatePicker.m b/React/Views/RCTDatePicker.m index 0bc1676d8..d86ef4996 100644 --- a/React/Views/RCTDatePicker.m +++ b/React/Views/RCTDatePicker.m @@ -13,6 +13,7 @@ @interface RCTDatePicker () @property (nonatomic, copy) RCTBubblingEventBlock onChange; +@property (nonatomic, assign) NSInteger reactMinuteInterval; @end @@ -23,6 +24,7 @@ if ((self = [super initWithFrame:frame])) { [self addTarget:self action:@selector(didChange) forControlEvents:UIControlEventValueChanged]; + _reactMinuteInterval = 1; } return self; } @@ -36,4 +38,17 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:(NSCoder *)aDecoder) } } +- (void)setDatePickerMode:(UIDatePickerMode)datePickerMode +{ + [super setDatePickerMode:datePickerMode]; + // We need to set minuteInterval after setting datePickerMode, otherwise minuteInterval is invalid in time mode. + self.minuteInterval = _reactMinuteInterval; +} + +- (void)setMinuteInterval:(NSInteger)minuteInterval +{ + [super setMinuteInterval:minuteInterval]; + _reactMinuteInterval = minuteInterval; +} + @end