2019-07-26 06:55:09 +00:00
|
|
|
import React from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { siteRoot } from '../../utils/constants';
|
|
|
|
import { Utils } from '../../utils/utils';
|
|
|
|
|
|
|
|
const propTypes = {
|
|
|
|
selectedDirentList: PropTypes.array,
|
|
|
|
onHideDirentsDraggablePreview: PropTypes.func
|
|
|
|
};
|
|
|
|
|
|
|
|
class DirentsDraggedPreview extends React.Component {
|
|
|
|
|
|
|
|
componentDidMount() {
|
|
|
|
document.addEventListener('dragover', this.handleDragOver);
|
|
|
|
document.addEventListener('drop', this.handleDrop);
|
|
|
|
document.addEventListener('dragend', this.handleDragEnd);
|
|
|
|
}
|
|
|
|
|
|
|
|
componentWillUnmount() {
|
|
|
|
document.removeEventListener('dragover', this.handleDragOver);
|
|
|
|
document.removeEventListener('drop', this.handleDrop);
|
|
|
|
document.removeEventListener('dragend', this.handleDragEnd);
|
|
|
|
}
|
|
|
|
|
|
|
|
handleDragEnd = () => {
|
|
|
|
this.element.style.opacity = 0;
|
|
|
|
this.props.onHideDirentsDraggablePreview();
|
2023-09-13 00:40:50 +00:00
|
|
|
};
|
2019-07-26 06:55:09 +00:00
|
|
|
|
|
|
|
handleDragOver = (event) => {
|
|
|
|
if (Utils.isIEBrower()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
event.preventDefault();
|
|
|
|
event.dataTransfer.dropEffect = 'move';
|
|
|
|
|
|
|
|
this.element.style.top = event.clientY + 'px';
|
|
|
|
this.element.style.left = event.clientX + 'px';
|
2023-09-13 00:40:50 +00:00
|
|
|
};
|
2019-07-26 06:55:09 +00:00
|
|
|
|
|
|
|
handleDrop = (event) => {
|
|
|
|
this.element.style.opacity = 0;
|
|
|
|
this.props.onHideDirentsDraggablePreview();
|
2023-09-13 00:40:50 +00:00
|
|
|
};
|
2019-07-26 06:55:09 +00:00
|
|
|
|
|
|
|
render() {
|
|
|
|
let{ selectedDirentList } = this.props;
|
2020-11-02 05:56:35 +00:00
|
|
|
const inlineStyle = {
|
|
|
|
position: 'absolute',
|
|
|
|
opacity: 1,
|
|
|
|
pointerEvents: 'none',
|
|
|
|
display: 'block',
|
2019-07-26 06:55:09 +00:00
|
|
|
left: '-9999px',
|
|
|
|
top: '-9999px',
|
|
|
|
zIndex: 101,
|
|
|
|
maxHeight: document.documentElement.clientHeight,
|
|
|
|
overflow: 'hidden'
|
|
|
|
};
|
|
|
|
return (
|
|
|
|
<div style={inlineStyle} ref={element => this.element = element}>
|
|
|
|
{selectedDirentList.map((dirent, index) => {
|
|
|
|
let iconUrl = Utils.getDirentIcon(dirent);
|
|
|
|
return (
|
|
|
|
<div key={index}>
|
|
|
|
{dirent.encoded_thumbnail_src ?
|
|
|
|
<img src={`${siteRoot}${dirent.encoded_thumbnail_src}`} className="thumbnail cursor-pointer" alt="" /> :
|
|
|
|
<img src={iconUrl} width="24" alt='' />
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
})}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
DirentsDraggedPreview.propTypes = propTypes;
|
|
|
|
|
|
|
|
export default DirentsDraggedPreview;
|