UNPKG

react-modal-construction-kit

Version:
84 lines (75 loc) 2.07 kB
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; import React from 'react'; import PropTypes from 'prop-types'; import Portal from '../Portal/Portal'; import { Transition } from 'react-transition-group'; var getDefaultStyle = function getDefaultStyle(transitionDuration) { return { position: 'fixed', top: 0, right: 0, bottom: 0, left: 0, willChange: 'opacity', backgroundColor: 'black', transition: 'opacity ' + transitionDuration + 'ms ease-in-out' }; }; export var getTransitionStyles = function getTransitionStyles(opacity) { return { exited: { display: 'none' }, entering: { opacity: 0.01 }, entered: { opacity: opacity }, exiting: { opacity: 0.01 } }; }; var Overlay = function Overlay(_ref) { var isVisible = _ref.isVisible, zIndex = _ref.zIndex, transitionDuration = _ref.transitionDuration, opacity = _ref.opacity, onClick = _ref.onClick, className = _ref.className; var style = _extends({}, getDefaultStyle(transitionDuration), { zIndex: zIndex || 500 }); return React.createElement( Portal, null, React.createElement( Transition, { 'in': isVisible, timeout: transitionDuration }, function (state) { return React.createElement('div', { className: className, onClick: onClick, style: _extends({}, style, getTransitionStyles(opacity)[state]) }); } ) ); }; Overlay.propTypes = { isVisible: PropTypes.bool.isRequired, transitionDuration: PropTypes.number, zIndex: PropTypes.number, opacity: PropTypes.number, onClick: PropTypes.func, className: PropTypes.string }; Overlay.defaultProps = { transitionDuration: 150, zIndex: 500, opacity: 0.7, backgroundColor: 'black' }; export default Overlay;