1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-25 06:33:48 +00:00

optimize directory tree node sorting (#8041)

Co-authored-by: zhouwenxuan <aries@Mac.local>
This commit is contained in:
Aries
2025-07-18 10:12:41 +08:00
committed by GitHub
parent 27215aa9d0
commit 8eefa68aa5
2 changed files with 19 additions and 2 deletions

View File

@@ -137,6 +137,19 @@ class TreeHelper {
return treeCopy; return treeCopy;
} }
sortTreeNodes(tree, sortBy, sortOrder) {
const treeCopy = tree.clone();
const sortChildren = (node) => {
if (!node.children.length) return;
const dirents = node.children.map(child => child.object);
const sortedDirents = Utils.sortDirents(dirents, sortBy, sortOrder);
node.children = sortedDirents.map(dirent => node.children.find(c => c.object.name === dirent.name));
node.children.forEach(child => sortChildren(child));
};
sortChildren(treeCopy.root);
return treeCopy;
}
buildTree() { buildTree() {
let tree = new Tree(); let tree = new Tree();
let object = new Dirent({ name: '/' }); let object = new Dirent({ name: '/' });

View File

@@ -2095,7 +2095,7 @@ class LibContentView extends React.Component {
let direntList = list.map(item => { let direntList = list.map(item => {
return new Dirent(item); return new Dirent(item);
}); });
direntList = Utils.sortDirents(direntList, 'name', 'asc'); direntList = Utils.sortDirents(direntList, this.state.sortBy, this.state.sortOrder);
let nodeList = direntList.map(object => { let nodeList = direntList.map(object => {
return new TreeNode({ object }); return new TreeNode({ object });
@@ -2184,10 +2184,14 @@ class LibContentView extends React.Component {
sortItems = (sortBy, sortOrder) => { sortItems = (sortBy, sortOrder) => {
cookie.save('seafile-repo-dir-sort-by', sortBy); cookie.save('seafile-repo-dir-sort-by', sortBy);
cookie.save('seafile-repo-dir-sort-order', sortOrder); cookie.save('seafile-repo-dir-sort-order', sortOrder);
const sortedDirentList = Utils.sortDirents(this.state.direntList, sortBy, sortOrder);
const sortedTreeData = treeHelper.sortTreeNodes(this.state.treeData, sortBy, sortOrder);
this.setState({ this.setState({
sortBy: sortBy, sortBy: sortBy,
sortOrder: sortOrder, sortOrder: sortOrder,
items: Utils.sortDirents(this.state.direntList, sortBy, sortOrder) direntList: sortedDirentList,
treeData: sortedTreeData,
}); });
}; };