diff --git a/frontend/src/components/dirent-grid-view/dirent-grid-view.js b/frontend/src/components/dirent-grid-view/dirent-grid-view.js
index 8f5d94f929..877b65b890 100644
--- a/frontend/src/components/dirent-grid-view/dirent-grid-view.js
+++ b/frontend/src/components/dirent-grid-view/dirent-grid-view.js
@@ -532,7 +532,9 @@ class DirentGridView extends React.Component {
if (this.props.selectedDirentList.length > 1) return;
// Display menu items according to the current dirent permission
const menuList = this.getDirentItemMenuList(dirent, true);
- this.handleContextClick(event, GRID_ITEM_CONTEXTMENU_ID, menuList, dirent);
+ const id = 'grid-item-contextmenu';
+ this.handleContextClick(event, id, menuList, dirent);
+ if (this.props.direntList.filter(item => item.isSelected).length > 1) return;
this.props.onGridItemClick && this.props.onGridItemClick(dirent);
};
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 e6869eea0e..e9e2812be0 100644
--- a/frontend/src/components/dirent-list-view/dirent-list-item.js
+++ b/frontend/src/components/dirent-list-view/dirent-list-item.js
@@ -96,15 +96,13 @@ class DirentListItem extends React.Component {
this.tagListTitleID = `tag-list-title-${uuidv4()}`;
}
- UNSAFE_componentWillReceiveProps(nextProps) {
- if (nextProps.isItemFreezed !== this.props.isItemFreezed && !nextProps.isItemFreezed) {
+ componentDidUpdate(prevProps) {
+ const { isItemFreezed, activeDirent, dirent } = this.props;
+
+ if (prevProps.isItemFreezed !== isItemFreezed && !isItemFreezed) {
this.setState({
highlight: false,
- isOperationShow: false,
- }, () => {
- if (nextProps.activeDirent && nextProps.activeDirent.name === nextProps.dirent.name) {
- this.setState({ isOperationShow: true });
- }
+ isOperationShow: activeDirent && activeDirent.name === dirent.name,
});
}
}
@@ -192,7 +190,7 @@ class DirentListItem extends React.Component {
// '
' is clicked
e.stopPropagation();
if (e.target.tagName == 'TD') {
- this.props.onDirentClick(this.props.dirent);
+ this.props.onDirentClick(this.props.dirent, e);
}
};
@@ -682,7 +680,7 @@ class DirentListItem extends React.Component {
};
render() {
- let { path, dirent, activeDirent } = this.props;
+ let { path, dirent } = this.props;
let direntPath = Utils.joinPath(path, dirent.name);
let dirHref = '';
if (this.props.currentRepoInfo) {
@@ -695,11 +693,10 @@ class DirentListItem extends React.Component {
let iconUrl = Utils.getDirentIcon(dirent);
- let isActive = (activeDirent && activeDirent.name === dirent.name) || dirent.isSelected;
+ let isActive = dirent.isSelected;
let trClass = this.state.highlight ? 'tr-highlight ' : '';
trClass += this.state.isDropTipshow ? 'tr-drop-effect' : '';
trClass += isActive ? 'tr-active' : '';
- trClass += isActive ? 'tr-active' : '';
let lockedInfo = dirent.is_freezed ? gettext('Frozen by {name}') : gettext('locked by {name}');
lockedInfo = lockedInfo.replace('{name}', dirent.lock_owner_name);
diff --git a/frontend/src/components/dirent-list-view/dirent-list-view.js b/frontend/src/components/dirent-list-view/dirent-list-view.js
index 71317a753e..ee683a950e 100644
--- a/frontend/src/components/dirent-list-view/dirent-list-view.js
+++ b/frontend/src/components/dirent-list-view/dirent-list-view.js
@@ -129,13 +129,9 @@ class DirentListView extends React.Component {
this.props.onItemSelected(dirent);
};
- onDirentClick = (dirent) => {
+ onDirentClick = (dirent, event) => {
hideMenu();
- if (this.props.selectedDirentList.length > 0 && !this.state.activeDirent) {
- return;
- }
- this.setState({ activeDirent: dirent });
- this.props.onDirentClick(dirent);
+ this.props.onDirentClick(dirent, event);
};
sortByName = (e) => {
@@ -306,7 +302,7 @@ class DirentListView extends React.Component {
// table-container contextmenu handle
onContainerClick = () => {
hideMenu();
- if (this.state.activeDirent) {
+ if (this.props.selectedDirentList.length > 0) {
this.onDirentClick(null);
}
};
diff --git a/frontend/src/pages/lib-content-view/lib-content-view.js b/frontend/src/pages/lib-content-view/lib-content-view.js
index 5f55db4463..4d6353802c 100644
--- a/frontend/src/pages/lib-content-view/lib-content-view.js
+++ b/frontend/src/pages/lib-content-view/lib-content-view.js
@@ -1360,6 +1360,7 @@ class LibContentView extends React.Component {
return dirent;
}),
isDirentSelected: newSelectedDirentList.length > 0,
+ isAllDirentSelected: newSelectedDirentList.length === direntList.length,
selectedDirentList: newSelectedDirentList,
lastSelectedIndex: clickedIndex,
});
@@ -1370,6 +1371,7 @@ class LibContentView extends React.Component {
return dirent;
}),
isDirentSelected: false,
+ isAllDirentSelected: false,
selectedDirentList: [],
lastSelectedIndex: null,
});
@@ -1414,7 +1416,6 @@ class LibContentView extends React.Component {
let selectedDirentList = direntList.filter(item => {
return item.isSelected;
});
-
if (selectedDirentList.length) {
this.setState({ isDirentSelected: true });
if (selectedDirentList.length === direntList.length) {
@@ -1441,29 +1442,20 @@ class LibContentView extends React.Component {
};
onAllDirentSelected = () => {
- if (this.state.isAllDirentSelected) {
- let direntList = this.state.direntList.map(item => {
- item.isSelected = false;
+ this.setState(prevState => {
+ const isAllDirentSelected = !prevState.isAllDirentSelected;
+ const direntList = prevState.direntList.map(item => {
+ item.isSelected = isAllDirentSelected;
return item;
});
- this.setState({
- isDirentSelected: false,
- isAllDirentSelected: false,
+
+ return {
+ isDirentSelected: isAllDirentSelected,
+ isAllDirentSelected: isAllDirentSelected,
direntList: direntList,
- selectedDirentList: [],
- });
- } else {
- let direntList = this.state.direntList.map(item => {
- item.isSelected = true;
- return item;
- });
- this.setState({
- isDirentSelected: true,
- isAllDirentSelected: true,
- direntList: direntList,
- selectedDirentList: direntList,
- });
- }
+ selectedDirentList: isAllDirentSelected ? [...direntList] : []
+ };
+ });
};
onFileTagChanged = (dirent, direntPath) => {
|