spee.ch/client/components/PublishPreview/index.jsx

63 lines
1.6 KiB
React
Raw Normal View History

import React from 'react';
2018-01-17 09:24:17 -08:00
import PropTypes from 'prop-types';
class PublishPreview extends React.Component {
constructor (props) {
super(props);
this.state = {
2018-01-17 12:54:26 -08:00
imgSource : '',
defaultThumbnail: '/assets/img/video_thumb_default.png',
};
}
componentDidMount () {
2018-03-01 20:09:22 -08:00
this.setPreviewImageSource(this.props.file);
}
2018-01-10 17:41:17 -08:00
componentWillReceiveProps (newProps) {
2018-01-17 12:54:26 -08:00
if (newProps.file !== this.props.file) {
2018-03-01 20:09:22 -08:00
this.setPreviewImageSource(newProps.file);
2018-01-17 12:54:26 -08:00
}
if (newProps.thumbnail !== this.props.thumbnail) {
2018-03-01 20:19:59 -08:00
if (newProps.thumbnail) {
this.setPreviewImageSourceFromFile(newProps.thumbnail);
} else {
this.setState({imgSource: this.state.defaultThumbnail});
}
2018-01-17 12:54:26 -08:00
}
}
2018-03-01 20:09:22 -08:00
setPreviewImageSourceFromFile (file) {
const previewReader = new FileReader();
previewReader.readAsDataURL(file);
previewReader.onloadend = () => {
this.setState({imgSource: previewReader.result});
};
}
setPreviewImageSource (file) {
if (file.type !== 'video/mp4') {
2018-03-01 20:09:22 -08:00
this.setPreviewImageSourceFromFile(file);
} else {
2018-03-01 20:09:22 -08:00
if (this.props.thumbnail) {
this.setPreviewImageSourceFromFile(this.props.thumbnail);
}
this.setState({imgSource: this.state.defaultThumbnail});
}
}
render () {
return (
<img
2018-02-28 21:25:51 -08:00
id='dropzone-preview'
2018-01-17 12:54:26 -08:00
src={this.state.imgSource}
className={this.props.dimPreview ? 'dim' : ''}
2018-02-28 21:25:51 -08:00
alt='publish preview'
/>
);
}
};
PublishPreview.propTypes = {
2018-01-17 09:24:17 -08:00
dimPreview: PropTypes.bool.isRequired,
file : PropTypes.object.isRequired,
2018-03-01 20:09:22 -08:00
thumbnail : PropTypes.object,
2018-01-17 09:24:17 -08:00
};
export default PublishPreview;