mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-13 13:50:07 +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;
|
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 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.props.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
|
||||||
|
}
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
dropTargetPath: '',
|
dropTargetPath: '',
|
||||||
});
|
});
|
||||||
|
@@ -17,6 +17,8 @@ const propTypes = {
|
|||||||
onGridItemMouseDown: PropTypes.func,
|
onGridItemMouseDown: PropTypes.func,
|
||||||
currentRepoInfo: PropTypes.object,
|
currentRepoInfo: PropTypes.object,
|
||||||
onItemMove: PropTypes.func.isRequired,
|
onItemMove: PropTypes.func.isRequired,
|
||||||
|
onItemsMove: PropTypes.func.isRequired,
|
||||||
|
selectedDirentList: PropTypes.array.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
class DirentGridItem extends React.Component {
|
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) => {
|
onItemClick = (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@@ -114,11 +112,16 @@ class DirentGridItem extends React.Component {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let dragStartItemData = { nodeDirent: this.props.dirent, nodeParentPath: this.props.path };
|
const { selectedDirentList, path } = this.props;
|
||||||
dragStartItemData = JSON.stringify(dragStartItemData);
|
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.effectAllowed = 'move';
|
||||||
e.dataTransfer.setData('application/drag-item-info', dragStartItemData);
|
e.dataTransfer.setData('application/drag-item-info', serializedData);
|
||||||
};
|
};
|
||||||
|
|
||||||
onGridItemDragEnter = (e) => {
|
onGridItemDragEnter = (e) => {
|
||||||
@@ -153,21 +156,28 @@ class DirentGridItem extends React.Component {
|
|||||||
if (e.dataTransfer.files.length) { // uploaded files
|
if (e.dataTransfer.files.length) { // uploaded files
|
||||||
return;
|
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) {
|
if (nodeDirent.name === dropItemData.name) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dropItemData.type !== 'dir') {
|
if (dropItemData.type !== 'dir') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.props.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
|
||||||
let selectedPath = Utils.joinPath(this.props.path, this.props.dirent.name);
|
} else {
|
||||||
this.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);
|
// 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) => {
|
onGridItemMouseDown = (event) => {
|
||||||
|
@@ -767,9 +767,11 @@ class DirentGridView extends React.Component {
|
|||||||
showImagePopup={this.showImagePopup}
|
showImagePopup={this.showImagePopup}
|
||||||
onGridItemContextMenu={this.onGridItemContextMenu}
|
onGridItemContextMenu={this.onGridItemContextMenu}
|
||||||
onItemMove={this.props.onItemMove}
|
onItemMove={this.props.onItemMove}
|
||||||
|
onItemsMove={this.props.onItemsMove}
|
||||||
onGridItemMouseDown={this.onGridItemMouseDown}
|
onGridItemMouseDown={this.onGridItemMouseDown}
|
||||||
onGridItemClick={this.onGridItemClick}
|
onGridItemClick={this.onGridItemClick}
|
||||||
activeDirent={this.state.activeDirent}
|
activeDirent={this.state.activeDirent}
|
||||||
|
selectedDirentList={selectedDirentList}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user