mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-25 14:50:29 +00:00
optimize directory tree node sorting (#8041)
Co-authored-by: zhouwenxuan <aries@Mac.local>
This commit is contained in:
@@ -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: '/' });
|
||||||
|
@@ -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,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user