UNPKG

mk-react-images

Version:

A simple, responsive lightbox component for displaying an array of images with React.js

56 lines (51 loc) 1.34 kB
import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { CSSTransitionGroup } from 'react-transition-group'; import { render } from 'react-dom'; import PassContext from './PassContext'; export default class Portal extends Component { constructor () { super(); this.portalElement = null; } componentDidMount () { const p = document.createElement('div'); document.body.appendChild(p); this.portalElement = p; this.componentDidUpdate(); } componentDidUpdate () { // Animate fade on mount/unmount const duration = 200; const styles = ` .fade-enter { opacity: 0.01; } .fade-enter.fade-enter-active { opacity: 1; transition: opacity ${duration}ms; } .fade-leave { opacity: 1; } .fade-leave.fade-leave-active { opacity: 0.01; transition: opacity ${duration}ms; } `; render( <PassContext context={this.context}> <div> <style>{styles}</style> <CSSTransitionGroup component="div" transitionName="fade" transitionEnterTimeout={duration} transitionLeaveTimeout={duration} {...this.props} /> </div> </PassContext>, this.portalElement ); } componentWillUnmount () { document.body.removeChild(this.portalElement); } render () { return null; } } Portal.contextTypes = { theme: PropTypes.object.isRequired, };