From 8c25181c441e117b33ee696d3f32e5c579b73947 Mon Sep 17 00:00:00 2001 From: Eric Lo Date: Thu, 3 Mar 2016 12:42:41 -0800 Subject: [PATCH] Add onShow callback for RCTModalHostView Summary: Added ability to include a callback to the modal. The callback is invoked when the modal is shown. Reviewed By: javache Differential Revision: D3005212 fb-gh-sync-id: 12648e17bd1cf831daf65529b87ae8cfdb901c65 shipit-source-id: 12648e17bd1cf831daf65529b87ae8cfdb901c65 --- Libraries/Modal/Modal.js | 2 ++ React/Views/RCTModalHostView.h | 3 +++ React/Views/RCTModalHostView.m | 6 +++++- React/Views/RCTModalHostViewManager.m | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Libraries/Modal/Modal.js b/Libraries/Modal/Modal.js index 9df6208d7..318171e3d 100644 --- a/Libraries/Modal/Modal.js +++ b/Libraries/Modal/Modal.js @@ -49,6 +49,7 @@ class Modal extends React.Component { animated={this.props.animated} transparent={this.props.transparent} onDismiss={this.props.onDismiss} + onShow={this.props.onShow} style={styles.modal}> {this.props.children} @@ -63,6 +64,7 @@ Modal.propTypes = { transparent: PropTypes.bool, visible: PropTypes.bool, onDismiss: PropTypes.func, + onShow: PropTypes.func, }; Modal.defaultProps = { diff --git a/React/Views/RCTModalHostView.h b/React/Views/RCTModalHostView.h index cafe771c8..c67579da0 100644 --- a/React/Views/RCTModalHostView.h +++ b/React/Views/RCTModalHostView.h @@ -10,6 +10,7 @@ #import #import "RCTInvalidating.h" +#import "RCTView.h" @class RCTBridge; @@ -18,6 +19,8 @@ @property (nonatomic, assign, getter=isAnimated) BOOL animated; @property (nonatomic, assign, getter=isTransparent) BOOL transparent; +@property (nonatomic, copy) RCTDirectEventBlock onShow; + - (instancetype)initWithBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER; @end diff --git a/React/Views/RCTModalHostView.m b/React/Views/RCTModalHostView.m index 63121a37f..75e50105c 100644 --- a/React/Views/RCTModalHostView.m +++ b/React/Views/RCTModalHostView.m @@ -86,7 +86,11 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:coder) if (!_isPresented && self.window) { RCTAssert(self.reactViewController, @"Can't present modal view controller without a presenting view controller"); - [self.reactViewController presentViewController:_modalViewController animated:self.animated completion:nil]; + [self.reactViewController presentViewController:_modalViewController animated:self.animated completion:^{ + if (_onShow) { + _onShow(nil); + } + }]; _isPresented = YES; } } diff --git a/React/Views/RCTModalHostViewManager.m b/React/Views/RCTModalHostViewManager.m index ae3b21f2c..be4e6b79e 100644 --- a/React/Views/RCTModalHostViewManager.m +++ b/React/Views/RCTModalHostViewManager.m @@ -40,5 +40,6 @@ RCT_EXPORT_MODULE() RCT_EXPORT_VIEW_PROPERTY(animated, BOOL) RCT_EXPORT_VIEW_PROPERTY(transparent, BOOL) +RCT_EXPORT_VIEW_PROPERTY(onShow, RCTDirectEventBlock) @end