1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-04 08:28:11 +00:00

Move file by drag and drop (#3168)

This commit is contained in:
zxj96
2019-03-27 11:25:27 +08:00
committed by Daniel Pan
parent d6470889c9
commit 4a9cfe8a46
19 changed files with 5503 additions and 2272 deletions

View File

@@ -13,6 +13,8 @@ const propTypes = {
onNodeClick: PropTypes.func.isRequired,
onNodeExpanded: PropTypes.func.isRequired,
onNodeCollapse: PropTypes.func.isRequired,
onItemMove: PropTypes.func,
currentRepoInfo: PropTypes.object,
};
const PADDING_LEFT = 20;
@@ -38,8 +40,62 @@ class TreeView extends React.Component {
this.unregisterHandlers();
}
onItemMove = (repo, dirent, selectedPath, currentPath) => {
this.props.onItemMove(repo, dirent, selectedPath, currentPath);
}
onNodeDragStart = (e, node) => {
// todo
let dragStartNodeData = {nodeDirent: node.object, nodeParentPath: node.parentNode.path, nodeRootPath: node.path};
dragStartNodeData = JSON.stringify(dragStartNodeData);
e.dataTransfer.effectAllowed = "move";
e.dataTransfer.setData('applicaiton/drag-item-info', dragStartNodeData);
}
onNodeDragEnter = (e, node) => {
//todo
}
onNodeDragMove = (e) => {
e.preventDefault();
e.dataTransfer.dropEffect = 'move';
}
onNodeDragLeave = (e, node) => {
//todo
}
onNodeDrop = (e, node) => {
if (e.dataTransfer.files.length) { // uploaded files
return;
}
let dragStartNodeData = e.dataTransfer.getData('applicaiton/drag-item-info');
dragStartNodeData = JSON.parse(dragStartNodeData);
let {nodeDirent, nodeParentPath, nodeRootPath} = dragStartNodeData;
let dropNodeData = node;
if (dropNodeData.object.type !== 'dir') {
return;
}
// copy the dirent to itself. eg: A/B -> A/B
if (nodeParentPath === dropNodeData.parentNode.path) {
if (dropNodeData.object.name === nodeDirent.name) {
return;
}
}
// copy the dirent to it's child. eg: A/B -> A/B/C
if (dropNodeData.object.type === 'dir' && nodeDirent.type === 'dir') {
if (dropNodeData.parentNode.path !== nodeParentPath) {
if (dropNodeData.path.indexOf(nodeRootPath) !== -1) {
return;
}
}
}
this.onItemMove(this.props.currentRepoInfo, nodeDirent, dropNodeData.path, nodeParentPath);
}
onFreezedItem = () => {
@@ -110,6 +166,10 @@ class TreeView extends React.Component {
onNodeChanged={this.onNodeChanged}
registerHandlers={this.registerHandlers}
unregisterHandlers={this.unregisterHandlers}
onNodeDragMove={this.onNodeDragMove}
onNodeDrop={this.onNodeDrop}
onNodeDragEnter={this.onNodeDragEnter}
onNodeDragLeave={this.onNodeDragLeave}
/>
{this.state.isRightMenuShow && (
<TreeViewContextMenu