spee.ch/react/components/Preview/index.jsx

53 lines
1.3 KiB
React
Raw Normal View History

import React from 'react';
2018-01-17 18:24:17 +01:00
import PropTypes from 'prop-types';
class Preview extends React.Component {
constructor (props) {
super(props);
this.state = {
2018-01-17 21:54:26 +01:00
imgSource : '',
defaultThumbnail: '/assets/img/video_thumb_default.png',
};
}
componentDidMount () {
this.previewFile(this.props.file);
}
2018-01-11 02:41:17 +01:00
componentWillReceiveProps (newProps) {
2018-01-17 21:54:26 +01:00
if (newProps.file !== this.props.file) {
this.previewFile(newProps.file);
}
if (newProps.thumbnail !== this.props.thumbnail) {
this.setState({imgSource: (newProps.thumbnail || this.state.defaultThumbnail)});
}
}
previewFile (file) {
if (file.type !== 'video/mp4') {
const previewReader = new FileReader();
previewReader.readAsDataURL(file);
2018-02-07 00:05:31 +01:00
previewReader.onloadend = () => {
this.setState({imgSource: previewReader.result});
};
} else {
2018-02-07 00:05:31 +01:00
this.setState({imgSource: (this.props.thumbnail || this.state.defaultThumbnail)});
}
}
render () {
return (
<img
2018-02-07 07:28:17 +01:00
id="dropzone-preview"
2018-01-17 21:54:26 +01:00
src={this.state.imgSource}
className={this.props.dimPreview ? 'dim' : ''}
alt="publish preview"
/>
);
}
};
2018-01-17 18:24:17 +01:00
Preview.propTypes = {
dimPreview: PropTypes.bool.isRequired,
file : PropTypes.object.isRequired,
thumbnail : PropTypes.string,
};
export default Preview;