1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-04-27 11:01:14 +00:00

fix dirent state in grid view

This commit is contained in:
zhouwenxuan 2025-04-18 17:06:15 +08:00 committed by Michael An
parent e11dd9e34c
commit 920b7fe430
3 changed files with 48 additions and 19 deletions

View File

@ -72,6 +72,23 @@ class DirentGridItem extends React.Component {
} }
} }
componentDidUpdate(prevProps) {
if (prevProps.dirent !== this.props.dirent) {
this.setState({ dirent: this.props.dirent });
}
const { repoID, path } = this.props;
const { dirent } = this.state;
if (this.checkGenerateThumbnail(dirent) && !this.isGeneratingThumbnail) {
this.isGeneratingThumbnail = true;
this.thumbnailCenter.createThumbnail({
repoID,
path: [path, dirent.name].join('/'),
callback: this.updateDirentThumbnail,
});
}
}
componentWillUnmount() { componentWillUnmount() {
if (this.clickTimeout) { if (this.clickTimeout) {
clearTimeout(this.clickTimeout); clearTimeout(this.clickTimeout);

View File

@ -17,7 +17,7 @@ class Dirent {
this.mtime_relative = dayjs.unix(json.mtime).fromNow(); this.mtime_relative = dayjs.unix(json.mtime).fromNow();
} }
this.permission = json.permission || 'rw'; this.permission = json.permission || 'rw';
this.isSelected = false; // is check or not this.isSelected = json.isSelected || false; // is check or not
this.starred = json.starred || false; this.starred = json.starred || false;
if (json.type === 'dir') { if (json.type === 'dir') {
this.has_been_shared_out = false; this.has_been_shared_out = false;

View File

@ -1543,36 +1543,48 @@ class LibContentView extends React.Component {
newSelectedDirentList = [clickedDirent]; newSelectedDirentList = [clickedDirent];
} }
this.setState({ this.setState(prevState => {
direntList: direntList.map(dirent => { const newDirentList = prevState.direntList.map(dirent => {
dirent.isSelected = newSelectedDirentList.some(selectedDirent => selectedDirent.name === dirent.name); const isSelected = newSelectedDirentList.some(selected => selected.name === dirent.name);
return dirent; return new Dirent({
}), ...dirent,
isDirentSelected: newSelectedDirentList.length > 0, isSelected: isSelected,
isAllDirentSelected: newSelectedDirentList.length === direntList.length, });
selectedDirentList: newSelectedDirentList, });
lastSelectedIndex: clickedIndex,
const updatedSelectedDirents = newSelectedDirentList.map(selected =>
newDirentList.find(dirent => dirent.name === selected.name)
);
return {
direntList: newDirentList,
isDirentSelected: updatedSelectedDirents.length > 0,
isAllDirentSelected: updatedSelectedDirents.length === newDirentList.length,
selectedDirentList: updatedSelectedDirents,
lastSelectedIndex: clickedIndex,
};
}); });
} else { } else {
this.setState({ this.setState(prevState => ({
direntList: direntList.map(dirent => { direntList: prevState.direntList.map(dirent => new Dirent({...dirent, isSelected: false})),
dirent.isSelected = false;
return dirent;
}),
isDirentSelected: false, isDirentSelected: false,
isAllDirentSelected: false, isAllDirentSelected: false,
selectedDirentList: [], selectedDirentList: [],
lastSelectedIndex: null, lastSelectedIndex: null,
}); }));
} }
}; };
onSelectedDirentListUpdate = (newSelectedDirentList, lastSelectedIndex = null) => { onSelectedDirentListUpdate = (newSelectedDirentList, lastSelectedIndex = null) => {
this.setState({ this.setState({
direntList: this.state.direntList.map(dirent => { direntList: this.state.direntList.map(dirent => {
dirent.isSelected = newSelectedDirentList.some(selectedDirent => selectedDirent.name === dirent.name); return new Dirent({
return dirent; ...dirent,
}), isSelected: newSelectedDirentList.some(
selected => selected.name === dirent.name
)
});
}),
isDirentSelected: newSelectedDirentList.length > 0, isDirentSelected: newSelectedDirentList.length > 0,
selectedDirentList: newSelectedDirentList, selectedDirentList: newSelectedDirentList,
lastSelectedIndex: lastSelectedIndex, lastSelectedIndex: lastSelectedIndex,