react-modal-construction-kit
Version:
A flexible Modal component kit for React
84 lines (75 loc) • 2.07 kB
JavaScript
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;