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:
@@ -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');
|
||||
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: '',
|
||||
});
|
||||
|
@@ -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;
|
||||
|
||||
let selectedPath = Utils.joinPath(this.props.path, this.props.dirent.name);
|
||||
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;
|
||||
}
|
||||
|
||||
let selectedPath = Utils.joinPath(this.props.path, this.props.dirent.name);
|
||||
this.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
|
||||
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) => {
|
||||
|
@@ -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}
|
||||
/>
|
||||
);
|
||||
})
|
||||
|
Reference in New Issue
Block a user