From d221f91a209cdc2e6fecf1205f4f92585e7c3264 Mon Sep 17 00:00:00 2001 From: Henning Hall Date: Sat, 12 Feb 2022 20:08:21 +0100 Subject: [PATCH] Fix: Modal opens multiple times (#455) --- src/DatePickerAndroid.js | 7 ++++++- src/DatePickerIOS.js | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/DatePickerAndroid.js b/src/DatePickerAndroid.js index 3cc5fbe..26610e5 100644 --- a/src/DatePickerAndroid.js +++ b/src/DatePickerAndroid.js @@ -18,8 +18,11 @@ const defaultWidth = 310 class DatePickerAndroid extends React.PureComponent { render() { const props = this.getProps() + const isClosed = this._isCurrentlyClosed(); + + this.previousProps = props; if (props.modal) { - if (props.open) { + if (props.open && isClosed) { NativeModules.RNDatePicker.openPicker( props, this._onConfirm, @@ -32,6 +35,8 @@ class DatePickerAndroid extends React.PureComponent { return } + _isCurrentlyClosed = () => !this.previousProps || !this.previousProps.open + getProps = () => ({ ...this.props, date: this._date(), diff --git a/src/DatePickerIOS.js b/src/DatePickerIOS.js index 7ffdcd1..f370a35 100644 --- a/src/DatePickerIOS.js +++ b/src/DatePickerIOS.js @@ -45,9 +45,11 @@ export default class DatePickerIOS extends React.Component { render() { const props = this._toIosProps(this.props) + const isClosed = this._isCurrentlyClosed(); + this.previousProps = props; if (props.modal) { - if (props.open) { + if (props.open && isClosed) { NativeModules.RNDatePickerManager.openPicker( props, this._onConfirm, @@ -70,6 +72,8 @@ export default class DatePickerIOS extends React.Component { /> ) } + + _isCurrentlyClosed = () => !this.previousProps || !this.previousProps.open } const styles = StyleSheet.create({