From 2e75e28a77a706a7df9aa30927c02f374a728122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cl=C3=A9ment=20cyril?= Date: Fri, 8 Jun 2018 13:36:13 +0200 Subject: [PATCH 01/10] Add onInsetsChange prop to SafeAreaView --- .../Components/SafeAreaView/SafeAreaView.ios.js | 15 ++++++++++++++- RNTester/js/SafeAreaViewExample.js | 13 ++++++++++++- React/Views/SafeAreaView/RCTSafeAreaView.m | 14 ++++++++++++++ React/Views/SafeAreaView/RCTSafeAreaViewManager.m | 2 ++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/Libraries/Components/SafeAreaView/SafeAreaView.ios.js b/Libraries/Components/SafeAreaView/SafeAreaView.ios.js index 5fb0406b8d5125..31f1ae7b6ae288 100644 --- a/Libraries/Components/SafeAreaView/SafeAreaView.ios.js +++ b/Libraries/Components/SafeAreaView/SafeAreaView.ios.js @@ -4,6 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * + * @providesModule SafeAreaView * @flow * @format */ @@ -12,12 +13,18 @@ const React = require('React'); const ViewPropTypes = require('ViewPropTypes'); const requireNativeComponent = require('requireNativeComponent'); +import PropTypes from 'prop-types'; import type {ViewProps} from 'ViewPropTypes'; -const RCTSafeAreaView = requireNativeComponent('RCTSafeAreaView'); +const RCTSafeAreaView = requireNativeComponent('RCTSafeAreaView', { + nativeOnly: { + onInsetsChange: PropTypes.func, + }, +}); type Props = ViewProps & { children: any, + onInsetsChange?: ?Function, }; /** @@ -29,6 +36,12 @@ type Props = ViewProps & { class SafeAreaView extends React.Component { static propTypes = { ...ViewPropTypes, + /** + * Callback that is called when the safe area view insets changed. + * This will be called with + * `{ nativeEvent: { insets: { left, top, right, bottom } } }`. + */ + onInsetsChange: PropTypes.func, }; render() { diff --git a/RNTester/js/SafeAreaViewExample.js b/RNTester/js/SafeAreaViewExample.js index 927a26651a4f8f..1c50b358c4664d 100644 --- a/RNTester/js/SafeAreaViewExample.js +++ b/RNTester/js/SafeAreaViewExample.js @@ -30,12 +30,17 @@ class SafeAreaViewExample extends React.Component< > { state = { modalVisible: false, + safeAreaViewInsets: undefined, }; _setModalVisible = visible => { this.setState({modalVisible: visible}); }; + _onSafeAreaViewInsetsChange = event => { + this.setState({insets: event.nativeEvent.insets}); + }; + render() { return ( @@ -45,8 +50,14 @@ class SafeAreaViewExample extends React.Component< animationType="slide" supportedOrientations={['portrait', 'landscape']}> - + + + {this.state.insets && + `safeAreaViewInsets:\n${JSON.stringify(this.state.insets)}`} +