summaryrefslogtreecommitdiffstats
path: root/webapp/components/file_preview.jsx
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2016-03-14 08:50:46 -0400
committerChristopher Speller <crspeller@gmail.com>2016-03-16 18:02:55 -0400
commit12896bd23eeba79884245c1c29fdc568cf21a7fa (patch)
tree4e7f83d3e2564b9b89d669e9f7905ff11768b11a /webapp/components/file_preview.jsx
parent29fe6a3d13c9c7aa490fffebbe5d1b5fdf1e3090 (diff)
downloadchat-12896bd23eeba79884245c1c29fdc568cf21a7fa.tar.gz
chat-12896bd23eeba79884245c1c29fdc568cf21a7fa.tar.bz2
chat-12896bd23eeba79884245c1c29fdc568cf21a7fa.zip
Converting to Webpack. Stage 1.
Diffstat (limited to 'webapp/components/file_preview.jsx')
-rw-r--r--webapp/components/file_preview.jsx121
1 files changed, 121 insertions, 0 deletions
diff --git a/webapp/components/file_preview.jsx b/webapp/components/file_preview.jsx
new file mode 100644
index 000000000..40c8b81d6
--- /dev/null
+++ b/webapp/components/file_preview.jsx
@@ -0,0 +1,121 @@
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import ReactDOM from 'react-dom';
+import * as Utils from 'utils/utils.jsx';
+
+import React from 'react';
+
+import loadingGif from 'images/load.gif';
+
+export default class FilePreview extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.handleRemove = this.handleRemove.bind(this);
+ }
+
+ componentDidUpdate() {
+ if (this.props.uploadsInProgress.length > 0) {
+ ReactDOM.findDOMNode(this.refs[this.props.uploadsInProgress[0]]).scrollIntoView();
+ }
+ }
+
+ handleRemove(e) {
+ var previewDiv = e.target.parentNode.parentNode;
+
+ if (previewDiv.hasAttribute('data-filename')) {
+ this.props.onRemove(previewDiv.getAttribute('data-filename'));
+ } else if (previewDiv.hasAttribute('data-client-id')) {
+ this.props.onRemove(previewDiv.getAttribute('data-client-id'));
+ }
+ }
+
+ render() {
+ var previews = [];
+ this.props.files.forEach((fullFilename) => {
+ var filename = fullFilename;
+ var originalFilename = filename;
+ var filenameSplit = filename.split('.');
+ var ext = filenameSplit[filenameSplit.length - 1];
+ var type = Utils.getFileType(ext);
+
+ filename = Utils.getFileUrl(filename);
+
+ if (type === 'image') {
+ previews.push(
+ <div
+ key={filename}
+ className='file-preview'
+ data-filename={originalFilename}
+ >
+ <img
+ className='file-preview__image'
+ src={filename}
+ />
+ <a
+ className='file-preview__remove'
+ onClick={this.handleRemove}
+ >
+ <i className='glyphicon glyphicon-remove'/>
+ </a>
+ </div>
+ );
+ } else {
+ previews.push(
+ <div
+ key={filename}
+ className='file-preview custom-file'
+ data-filename={originalFilename}
+ >
+ <div className={'file-icon ' + Utils.getIconClassName(type)}/>
+ <a
+ className='file-preview__remove'
+ onClick={this.handleRemove}
+ >
+ <i className='glyphicon glyphicon-remove'/>
+ </a>
+ </div>
+ );
+ }
+ });
+
+ this.props.uploadsInProgress.forEach((clientId) => {
+ previews.push(
+ <div
+ ref={clientId}
+ key={clientId}
+ className='file-preview'
+ data-client-id={clientId}
+ >
+ <img
+ className='spinner'
+ src={loadingGif}
+ />
+ <a
+ className='file-preview__remove'
+ onClick={this.handleRemove}
+ >
+ <i className='glyphicon glyphicon-remove'/>
+ </a>
+ </div>
+ );
+ });
+
+ return (
+ <div className='file-preview__container'>
+ {previews}
+ </div>
+ );
+ }
+}
+
+FilePreview.defaultProps = {
+ files: [],
+ uploadsInProgress: []
+};
+FilePreview.propTypes = {
+ onRemove: React.PropTypes.func.isRequired,
+ files: React.PropTypes.array,
+ uploadsInProgress: React.PropTypes.array
+};