PLT-3585 Added a timeout to the file upload overlay (#3656)
Этот коммит содержится в:
коммит произвёл
enahum
родитель
07c3f74862
Коммит
9b3e9243a5
@@ -7,6 +7,7 @@ import ReactDOM from 'react-dom';
|
|||||||
import Client from 'client/web_client.jsx';
|
import Client from 'client/web_client.jsx';
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
import ChannelStore from 'stores/channel_store.jsx';
|
import ChannelStore from 'stores/channel_store.jsx';
|
||||||
|
import DelayedAction from 'utils/delayed_action.jsx';
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {intlShape, injectIntl, defineMessages} from 'react-intl';
|
import {intlShape, injectIntl, defineMessages} from 'react-intl';
|
||||||
@@ -32,6 +33,8 @@ const holders = defineMessages({
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
|
const OverlayTimeout = 500;
|
||||||
|
|
||||||
class FileUpload extends React.Component {
|
class FileUpload extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -39,6 +42,7 @@ class FileUpload extends React.Component {
|
|||||||
this.uploadFiles = this.uploadFiles.bind(this);
|
this.uploadFiles = this.uploadFiles.bind(this);
|
||||||
this.handleChange = this.handleChange.bind(this);
|
this.handleChange = this.handleChange.bind(this);
|
||||||
this.handleDrop = this.handleDrop.bind(this);
|
this.handleDrop = this.handleDrop.bind(this);
|
||||||
|
this.registerDragEvents = this.registerDragEvents.bind(this);
|
||||||
this.cancelUpload = this.cancelUpload.bind(this);
|
this.cancelUpload = this.cancelUpload.bind(this);
|
||||||
this.pasteUpload = this.pasteUpload.bind(this);
|
this.pasteUpload = this.pasteUpload.bind(this);
|
||||||
this.keyUpload = this.keyUpload.bind(this);
|
this.keyUpload = this.keyUpload.bind(this);
|
||||||
@@ -132,55 +136,59 @@ class FileUpload extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
var self = this;
|
|
||||||
if (this.props.postType === 'post') {
|
if (this.props.postType === 'post') {
|
||||||
$('.row.main').dragster({
|
this.registerDragEvents('.row.main', '.center-file-overlay');
|
||||||
enter(dragsterEvent, e) {
|
|
||||||
var files = e.originalEvent.dataTransfer;
|
|
||||||
|
|
||||||
if (Utils.isFileTransfer(files)) {
|
|
||||||
$('.center-file-overlay').removeClass('hidden');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
leave(dragsterEvent, e) {
|
|
||||||
var files = e.originalEvent.dataTransfer;
|
|
||||||
|
|
||||||
if (Utils.isFileTransfer(files)) {
|
|
||||||
$('.center-file-overlay').addClass('hidden');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
drop(dragsterEvent, e) {
|
|
||||||
$('.center-file-overlay').addClass('hidden');
|
|
||||||
self.handleDrop(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if (this.props.postType === 'comment') {
|
} else if (this.props.postType === 'comment') {
|
||||||
$('.post-right__container').dragster({
|
this.registerDragEvents('.post-right__container', '.right-file-overlay');
|
||||||
enter(dragsterEvent, e) {
|
|
||||||
var files = e.originalEvent.dataTransfer;
|
|
||||||
|
|
||||||
if (Utils.isFileTransfer(files)) {
|
|
||||||
$('.right-file-overlay').removeClass('hidden');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
leave(dragsterEvent, e) {
|
|
||||||
var files = e.originalEvent.dataTransfer;
|
|
||||||
|
|
||||||
if (Utils.isFileTransfer(files)) {
|
|
||||||
$('.right-file-overlay').addClass('hidden');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
drop(dragsterEvent, e) {
|
|
||||||
$('.right-file-overlay').addClass('hidden');
|
|
||||||
self.handleDrop(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('paste', this.pasteUpload);
|
document.addEventListener('paste', this.pasteUpload);
|
||||||
document.addEventListener('keydown', this.keyUpload);
|
document.addEventListener('keydown', this.keyUpload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
registerDragEvents(containerSelector, overlaySelector) {
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
const overlay = $(overlaySelector);
|
||||||
|
|
||||||
|
const dragTimeout = new DelayedAction(() => {
|
||||||
|
if (!overlay.hasClass('hidden')) {
|
||||||
|
overlay.addClass('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(containerSelector).dragster({
|
||||||
|
enter(dragsterEvent, e) {
|
||||||
|
var files = e.originalEvent.dataTransfer;
|
||||||
|
|
||||||
|
if (Utils.isFileTransfer(files)) {
|
||||||
|
$(overlaySelector).removeClass('hidden');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
leave(dragsterEvent, e) {
|
||||||
|
var files = e.originalEvent.dataTransfer;
|
||||||
|
|
||||||
|
if (Utils.isFileTransfer(files) && !overlay.hasClass('hidden')) {
|
||||||
|
overlay.addClass('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
dragTimeout.cancel();
|
||||||
|
},
|
||||||
|
over() {
|
||||||
|
dragTimeout.fireAfter(OverlayTimeout);
|
||||||
|
},
|
||||||
|
drop(dragsterEvent, e) {
|
||||||
|
if (!overlay.hasClass('hidden')) {
|
||||||
|
overlay.addClass('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
dragTimeout.cancel();
|
||||||
|
|
||||||
|
self.handleDrop(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
let target;
|
let target;
|
||||||
if (this.props.postType === 'post') {
|
if (this.props.postType === 'post') {
|
||||||
|
|||||||
@@ -187,6 +187,7 @@ body.ios {
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
pointer-events: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user