/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule Modal * @flow */ 'use strict'; var Platform = require('Platform'); var PropTypes = require('ReactPropTypes'); var React = require('React'); var StyleSheet = require('StyleSheet'); var View = require('View'); var requireNativeComponent = require('requireNativeComponent'); var RCTModalHostView = requireNativeComponent('RCTModalHostView', null); /** * A Modal component covers the native view (e.g. UIViewController, Activity) * that contains the React Native root. * * Use Modal in hybrid apps that embed React Native; Modal allows the portion of * your app written in React Native to present content above the enclosing * native view hierarchy. * * In apps written with React Native from the root view down, you should use * Navigator instead of Modal. With a top-level Navigator, you have more control * over how to present the modal scene over the rest of your app by using the * configureScene property. */ class Modal extends React.Component { render(): ?ReactElement { if (this.props.visible === false) { return null; } if (this.props.transparent) { var containerBackgroundColor = {backgroundColor: 'transparent'}; } return ( {this.props.children} ); } // We don't want any responder events bubbling out of the modal. _shouldSetResponder(): boolean { return true; } } Modal.propTypes = { animated: PropTypes.bool, transparent: PropTypes.bool, visible: PropTypes.bool, onRequestClose: Platform.OS === 'android' ? PropTypes.func.isRequired : PropTypes.func, onShow: PropTypes.func, }; Modal.defaultProps = { visible: true, }; var styles = StyleSheet.create({ modal: { position: 'absolute', }, container: { position: 'absolute', left: 0, top: 0, } }); module.exports = Modal;