1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-13 05:39:59 +00:00

fix bug - drag and drop multi-selected items failed (#6436)

* fix bug - drag and drop multi-selected items failed

* fix bug - files are lost after moving items into selected folder
This commit is contained in:
Aries
2024-07-31 10:09:07 +08:00
committed by GitHub
parent 2838789744
commit 293470e39e
3 changed files with 42 additions and 25 deletions

View File

@@ -100,12 +100,17 @@ class DirPath extends React.Component {
return;
}
let dragStartItemData = e.dataTransfer.getData('application/drag-item-info');
dragStartItemData = JSON.parse(dragStartItemData);
let { nodeDirent, nodeParentPath } = dragStartItemData;
let selectedPath = Utils.getEventData(e, 'path');
this.props.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
let dragStartItemsData = e.dataTransfer.getData('application/drag-item-info');
dragStartItemsData = JSON.parse(dragStartItemsData);
if (Array.isArray(dragStartItemsData)) {
this.props.onItemsMove(this.props.currentRepoInfo, selectedPath);
} else {
let { nodeDirent, nodeParentPath } = dragStartItemsData;
this.props.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
}
this.setState({
dropTargetPath: '',
});

View File

@@ -17,6 +17,8 @@ const propTypes = {
onGridItemMouseDown: PropTypes.func,
currentRepoInfo: PropTypes.object,
onItemMove: PropTypes.func.isRequired,
onItemsMove: PropTypes.func.isRequired,
selectedDirentList: PropTypes.array.isRequired,
};
class DirentGridItem extends React.Component {
@@ -48,10 +50,6 @@ class DirentGridItem extends React.Component {
}
}
onItemMove = (destRepo, dirent, selectedPath, currentPath) => {
this.props.onItemMove(destRepo, dirent, selectedPath, currentPath);
};
onItemClick = (e) => {
e.preventDefault();
e.stopPropagation();
@@ -114,11 +112,16 @@ class DirentGridItem extends React.Component {
return false;
}
let dragStartItemData = { nodeDirent: this.props.dirent, nodeParentPath: this.props.path };
dragStartItemData = JSON.stringify(dragStartItemData);
const { selectedDirentList, path } = this.props;
const dragStartItemsData = selectedDirentList.length > 0 ? selectedDirentList.map(dirent => ({
nodeDirent: dirent,
nodeParentPath: path
})) : { nodeDirent: this.props.dirent, nodeParentPath: this.props.path };
const serializedData = JSON.stringify(dragStartItemsData);
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('application/drag-item-info', dragStartItemData);
e.dataTransfer.setData('application/drag-item-info', serializedData);
};
onGridItemDragEnter = (e) => {
@@ -153,21 +156,28 @@ class DirentGridItem extends React.Component {
if (e.dataTransfer.files.length) { // uploaded files
return;
}
let dragStartItemData = e.dataTransfer.getData('application/drag-item-info');
dragStartItemData = JSON.parse(dragStartItemData);
let { nodeDirent, nodeParentPath } = dragStartItemData;
let dropItemData = this.props.dirent;
if (nodeDirent.name === dropItemData.name) {
return;
}
if (dropItemData.type !== 'dir') {
return;
}
let selectedPath = Utils.joinPath(this.props.path, this.props.dirent.name);
this.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
let dragStartItemsData = e.dataTransfer.getData('application/drag-item-info');
dragStartItemsData = JSON.parse(dragStartItemsData);
if (!Array.isArray(dragStartItemsData)) {
let { nodeDirent, nodeParentPath } = dragStartItemsData;
let dropItemData = this.props.dirent;
if (nodeDirent.name === dropItemData.name) {
return;
}
if (dropItemData.type !== 'dir') {
return;
}
this.props.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
} else {
// if current dirent is a dir and selected list include it, return
if (dragStartItemsData.some(item => item.nodeDirent.name === this.props.dirent.name)) {
return;
}
this.props.onItemsMove(this.props.currentRepoInfo, selectedPath);
}
};
onGridItemMouseDown = (event) => {

View File

@@ -767,9 +767,11 @@ class DirentGridView extends React.Component {
showImagePopup={this.showImagePopup}
onGridItemContextMenu={this.onGridItemContextMenu}
onItemMove={this.props.onItemMove}
onItemsMove={this.props.onItemsMove}
onGridItemMouseDown={this.onGridItemMouseDown}
onGridItemClick={this.onGridItemClick}
activeDirent={this.state.activeDirent}
selectedDirentList={selectedDirentList}
/>
);
})