1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-03 16:10:26 +00:00

12.0 list view support multiple selection (#6421)

* Feature - multiple selection with ctrl/shift

* update grid view context menu list in multiple selection mode

* list view support multiple selection

* improve list view selection experience

* before remove activeDirent state

* improve list view selection experience

* fix warnings
This commit is contained in:
Aries
2024-07-26 17:07:26 +08:00
committed by GitHub
parent 9aeaeed894
commit fa46b89b0d
4 changed files with 27 additions and 40 deletions

View File

@@ -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 {
// '<td>' 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);

View File

@@ -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);
}
};