import LoadingIndicator from '../../../components/loading_indicator'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import ExtendedVideoPlayer from '../../../components/extended_video_player'; import ImageLoader from 'react-imageloader'; import { defineMessages, injectIntl } from 'react-intl'; import IconButton from '../../../components/icon_button'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' } }); const leftNavStyle = { position: 'absolute', background: 'rgba(0, 0, 0, 0.5)', padding: '30px 15px', cursor: 'pointer', fontSize: '24px', top: '0', left: '-61px', boxSizing: 'border-box', height: '100%', display: 'flex', alignItems: 'center' }; const rightNavStyle = { position: 'absolute', background: 'rgba(0, 0, 0, 0.5)', padding: '30px 15px', cursor: 'pointer', fontSize: '24px', top: '0', right: '-61px', boxSizing: 'border-box', height: '100%', display: 'flex', alignItems: 'center' }; const closeStyle = { position: 'absolute', top: '4px', right: '4px' }; class MediaModal extends React.PureComponent { constructor (props, context) { super(props, context); this.state = { index: null }; this.handleNextClick = this.handleNextClick.bind(this); this.handlePrevClick = this.handlePrevClick.bind(this); this.handleKeyUp = this.handleKeyUp.bind(this); } handleNextClick () { this.setState({ index: (this.getIndex() + 1) % this.props.media.size}); } handlePrevClick () { this.setState({ index: (this.getIndex() - 1) % this.props.media.size}); } handleKeyUp (e) { switch(e.key) { case 'ArrowLeft': this.handlePrevClick(); break; case 'ArrowRight': this.handleNextClick(); break; } } componentDidMount () { window.addEventListener('keyup', this.handleKeyUp, false); } componentWillUnmount () { window.removeEventListener('keyup', this.handleKeyUp); } getIndex () { return this.state.index !== null ? this.state.index : this.props.index; } render () { const { media, intl, onClose } = this.props; const index = this.getIndex(); const attachment = media.get(index); const url = attachment.get('url'); let leftNav, rightNav, content; leftNav = rightNav = content = ''; if (media.size > 1) { leftNav =
; rightNav =
; } if (attachment.get('type') === 'image') { content = ; } else if (attachment.get('type') === 'gifv') { content = ; } return (
{leftNav}
{content}
{rightNav}
); } } MediaModal.propTypes = { media: ImmutablePropTypes.list.isRequired, index: PropTypes.number.isRequired, onClose: PropTypes.func.isRequired, intl: PropTypes.object.isRequired }; export default injectIntl(MediaModal);