diff options
Diffstat (limited to 'app/assets/javascripts/components/features/ui/components/modal_root.jsx')
-rw-r--r-- | app/assets/javascripts/components/features/ui/components/modal_root.jsx | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/app/assets/javascripts/components/features/ui/components/modal_root.jsx b/app/assets/javascripts/components/features/ui/components/modal_root.jsx deleted file mode 100644 index 23057715c..000000000 --- a/app/assets/javascripts/components/features/ui/components/modal_root.jsx +++ /dev/null @@ -1,92 +0,0 @@ -import PropTypes from 'prop-types'; -import MediaModal from './media_modal'; -import OnboardingModal from './onboarding_modal'; -import VideoModal from './video_modal'; -import BoostModal from './boost_modal'; -import ConfirmationModal from './confirmation_modal'; -import { TransitionMotion, spring } from 'react-motion'; - -const MODAL_COMPONENTS = { - 'MEDIA': MediaModal, - 'ONBOARDING': OnboardingModal, - 'VIDEO': VideoModal, - 'BOOST': BoostModal, - 'CONFIRM': ConfirmationModal -}; - -class ModalRoot extends React.PureComponent { - - constructor (props, context) { - super(props, context); - this.handleKeyUp = this.handleKeyUp.bind(this); - } - - handleKeyUp (e) { - if ((e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27) - && !!this.props.type) { - this.props.onClose(); - } - } - - componentDidMount () { - window.addEventListener('keyup', this.handleKeyUp, false); - } - - componentWillUnmount () { - window.removeEventListener('keyup', this.handleKeyUp); - } - - willEnter () { - return { opacity: 0, scale: 0.98 }; - } - - willLeave () { - return { opacity: spring(0), scale: spring(0.98) }; - } - - render () { - const { type, props, onClose } = this.props; - const items = []; - - if (!!type) { - items.push({ - key: type, - data: { type, props }, - style: { opacity: spring(1), scale: spring(1, { stiffness: 120, damping: 14 }) } - }); - } - - return ( - <TransitionMotion - styles={items} - willEnter={this.willEnter} - willLeave={this.willLeave}> - {interpolatedStyles => - <div className='modal-root'> - {interpolatedStyles.map(({ key, data: { type, props }, style }) => { - const SpecificComponent = MODAL_COMPONENTS[type]; - - return ( - <div key={key}> - <div role='presentation' className='modal-root__overlay' style={{ opacity: style.opacity }} onClick={onClose} /> - <div className='modal-root__container' style={{ opacity: style.opacity, transform: `translateZ(0px) scale(${style.scale})` }}> - <SpecificComponent {...props} onClose={onClose} /> - </div> - </div> - ); - })} - </div> - } - </TransitionMotion> - ); - } - -} - -ModalRoot.propTypes = { - type: PropTypes.string, - props: PropTypes.object, - onClose: PropTypes.func.isRequired -}; - -export default ModalRoot; |