diff --git a/frontend/src/components/dirent-list-view/dirent-list-item.js b/frontend/src/components/dirent-list-view/dirent-list-item.js index 0c584bba75..3856509e03 100644 --- a/frontend/src/components/dirent-list-view/dirent-list-item.js +++ b/frontend/src/components/dirent-list-view/dirent-list-item.js @@ -359,12 +359,11 @@ class DirentListItem extends React.Component { let { selectedDirentList } = this.props; let selectedList = []; if (selectedDirentList.length > 0 && selectedDirentList.includes(this.props.dirent)) { // drag items and selectedDirentList include item - selectedDirentList.map(item => { - let nodeRootPath = ''; - nodeRootPath = this.props.path === '/' ? `${this.props.path}${item.name}` : `${this.props.path}/${item.name}`; + selectedList = selectedDirentList.map(item => { + let nodeRootPath = this.getDirentPath(item); let dragStartItemData = {nodeDirent: item, nodeParentPath: this.props.path, nodeRootPath: nodeRootPath}; - return selectedList.push(dragStartItemData) - }) + return dragStartItemData; + }); selectedList = JSON.stringify(selectedList); e.dataTransfer.setData('applicaiton/drag-item-info', selectedList); return ; @@ -414,8 +413,8 @@ class DirentListItem extends React.Component { dragStartItemData = JSON.parse(dragStartItemData); if (Array.isArray(dragStartItemData)) { //move items let direntPaths = []; - dragStartItemData.forEach(dirent => { - let path = Utils.joinPath(this.props.path, dirent.nodeDirent.name); + dragStartItemData.forEach(draggedItem => { + let path = Utils.joinPath(this.props.path, draggedItem.nodeDirent.name); direntPaths.push(path); }); diff --git a/frontend/src/components/tree-view/tree-view.js b/frontend/src/components/tree-view/tree-view.js index 9c6747c662..ad500811fa 100644 --- a/frontend/src/components/tree-view/tree-view.js +++ b/frontend/src/components/tree-view/tree-view.js @@ -134,11 +134,10 @@ class TreeView extends React.Component { // 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) { - let dropNodeDataArr = dropNodeData.path.split('/'); - let nodeRootPathArr = nodeRootPath.split('/'); - let flag = this.compareArray(nodeRootPathArr, dropNodeDataArr); - if (flag) { - return ; + let paths = Utils.getPaths(dropNodeData.path); + let isChildPath = paths.includes(nodeRootPath); + if (isChildPath) { + return; } } } @@ -148,7 +147,7 @@ class TreeView extends React.Component { onMoveItems = (dragStartNodeData, dropNodeData, destRepo, destDirentPath) => { let direntPaths = []; - let destDirentPathDetail = destDirentPath.split('/'); + let paths = Utils.getPaths(destDirentPath); dragStartNodeData.forEach(dirent => { let path = dirent.nodeRootPath; direntPaths.push(path); @@ -163,16 +162,14 @@ class TreeView extends React.Component { return; } - // move dirents to current path - if (dragStartNodeData[0].nodeParentPath && dragStartNodeData[0].nodeParentPath === dropNodeData.path ) { + // move dirents to current path + if (dragStartNodeData[0].nodeParentPath && dragStartNodeData[0].nodeParentPath === dropNodeData.path ) { return; } - // move dirents to one of their child. eg: A/B, A/D -> A/B/C let isChildPath = direntPaths.some(direntPath => { - let direntPathdetail = direntPath.split('/'); - let flag = this.compareArray(direntPathdetail, destDirentPathDetail); + let flag = paths.includes(direntPath); return flag; }); if (isChildPath) { @@ -182,19 +179,6 @@ class TreeView extends React.Component { this.props.onItemsMove(destRepo, destDirentPath); } - compareArray = (direntPathdetail, destDirentPathDetail) => { - if (destDirentPathDetail.length < direntPathdetail.length) { - return false; - } else { - for (let i = 0; i < direntPathdetail.length; i++) { - if (direntPathdetail[i] !== destDirentPathDetail[i]) { - return false; - } - } - } - return true; - } - freezeItem = () => { this.setState({isItemFreezed: true}); }