summaryrefslogtreecommitdiffstats
path: root/web/react/components/file_upload.jsx
diff options
context:
space:
mode:
authorhmhealey <harrisonmhealey@gmail.com>2015-08-10 12:05:45 -0400
committerhmhealey <harrisonmhealey@gmail.com>2015-08-10 14:04:23 -0400
commitc9a1bf2d336cc5718cdf327f37cfdf87dc0e2705 (patch)
treed90cdfebf96ac6a4557a8caaefe06888b7d9d6ba /web/react/components/file_upload.jsx
parent4b74c873cc95973c5434988a41f5e06446a4e586 (diff)
downloadchat-c9a1bf2d336cc5718cdf327f37cfdf87dc0e2705.tar.gz
chat-c9a1bf2d336cc5718cdf327f37cfdf87dc0e2705.tar.bz2
chat-c9a1bf2d336cc5718cdf327f37cfdf87dc0e2705.zip
Changed post drafts to maintain a store a unique id for each file upload to fix issues with duplicate file names
Diffstat (limited to 'web/react/components/file_upload.jsx')
-rw-r--r--web/react/components/file_upload.jsx36
1 files changed, 22 insertions, 14 deletions
diff --git a/web/react/components/file_upload.jsx b/web/react/components/file_upload.jsx
index 11b3b3cee..4b8965dcb 100644
--- a/web/react/components/file_upload.jsx
+++ b/web/react/components/file_upload.jsx
@@ -39,19 +39,23 @@ module.exports = React.createClass({
continue;
}
+ // generate a unique id that can be used by other components to refer back to this file upload
+ var clientId = utils.generateId();
+
// Prepare data to be uploaded.
formData = new FormData();
formData.append('channel_id', channel_id);
formData.append('files', files[i], files[i].name);
+ formData.append('client_ids', clientId);
var request = client.uploadFile(formData,
function(data) {
parsedData = $.parseJSON(data);
- this.props.onFileUpload(parsedData['filenames'], channel_id);
+ this.props.onFileUpload(parsedData['filenames'], parsedData['client_ids'], channel_id);
var requests = this.state.requests;
- for (var i = 0; i < parsedData['filenames'].length; i++) {
- delete requests[utils.getFileName(parsedData['filenames'][i])];
+ for (var i = 0; i < parsedData['client_ids'].length; i++) {
+ delete requests[parsedData['client_ids'][i]];
}
this.setState({requests: requests});
}.bind(this),
@@ -61,10 +65,10 @@ module.exports = React.createClass({
);
var requests = this.state.requests;
- requests[files[i].name] = request;
+ requests[clientId] = request;
this.setState({requests: requests});
- this.props.onUploadStart([files[i].name], channel_id);
+ this.props.onUploadStart([clientId], channel_id);
}
// clear file input for all modern browsers
@@ -123,6 +127,9 @@ module.exports = React.createClass({
var channel_id = ChannelStore.getCurrentId();
+ // generate a unique id that can be used by other components to refer back to this file upload
+ var clientId = utils.generateId();
+
formData = new FormData();
formData.append('channel_id', channel_id);
var d = new Date();
@@ -130,15 +137,16 @@ module.exports = React.createClass({
var min = d.getMinutes() < 10 ? "0" + d.getMinutes() : String(d.getMinutes());
var name = "Image Pasted at "+d.getFullYear()+"-"+d.getMonth()+"-"+d.getDate()+" "+hour+"-"+min+"." + ext;
formData.append('files', file, name);
+ formData.append('client_ids', clientId);
- client.uploadFile(formData,
+ var request = client.uploadFile(formData,
function(data) {
parsedData = $.parseJSON(data);
- self.props.onFileUpload(parsedData['filenames'], channel_id);
+ self.props.onFileUpload(parsedData['filenames'], parsedData['client_ids'], channel_id);
var requests = self.state.requests;
- for (var i = 0; i < parsedData['filenames'].length; i++) {
- delete requests[utils.getFileName(parsedData['filenames'][i])];
+ for (var i = 0; i < parsedData['client_ids'].length; i++) {
+ delete requests[parsedData['client_ids'][i]];
}
self.setState({requests: requests});
},
@@ -148,23 +156,23 @@ module.exports = React.createClass({
);
var requests = self.state.requests;
- requests[files[i].name] = request;
+ requests[clientId] = request;
self.setState({requests: requests});
- self.props.onUploadStart([name], channel_id);
+ self.props.onUploadStart([clientId], channel_id);
}
}
}
});
},
- cancelUpload: function(filename) {
+ cancelUpload: function(clientId) {
var requests = this.state.requests;
- var request = requests[filename];
+ var request = requests[clientId];
if (request) {
request.abort();
- delete requests[filename];
+ delete requests[clientId];
this.setState({requests: requests});
}
},