function for proper sorting of tree data
mellbacon committed
Aug 9, 2022 at 18:12 UTC
5d8ca4a1e01653cdf107b717774ac81f0c5a1052
1 file changed
+36
-10
src/components/FileTree/TreeData.ts
+36
-10
@@ -1,18 +1,44 @@
1
import { dialog, fs } from "@tauri-apps/api";
2
+import { filetree } from "../FileTree/TreeStore";
3
let parentname: string;
4
+let dir;
5
export async function data() {
6
let dirname = await dialog.open({ directory: true }) as string;
5
- let children = await fs.readDir(dirname, { recursive: true });
7
+ dir = dirname;
8
+ return await loadTree();
9
+}
10
+
11
+async function loadTree() {
12
+ let children = await fs.readDir(dir, { recursive: true });
13
id = 0;
14
cache = [];
8
- let nodes = buildTree(children);
9
- parentname = dirname.split("\\").pop();
10
- let tree = [{id: -1, text: dirname.split("\\").pop(), children: nodes}];
15
+ let nodes = buildTree(sort(children));
16
+ parentname = dir.split("\\").pop();
17
+ let tree = [{id: -1, name: dir.split("\\").pop(), children: nodes, path: dir}];
18
return tree;
19
}
20
21
export async function updateTree() {
15
-
22
+ let tree = await loadTree();
23
+ filetree.set(tree);
24
+}
25
+
26
+function sort(children) {
27
+ let files = [];
28
+ let folders = [];
29
+ for (const child of children) {
30
+ if (child.children) {
31
+ folders.push(child)
32
+ sort(child.children);
33
+ }
34
+ else {
35
+ files.push(child);
36
+ }
37
+ }
38
+ files.sort();
39
+ folders.sort();
40
+ folders.push(...files);
41
+ return folders;
42
}
43
44
export function getFileData(id) {
@@ -29,15 +55,15 @@ let cache = [];
55
function buildTree(children: fs.FileEntry[]) {
56
let nodes = [];
57
for (const child of children) {
32
- let node: {id: number, text: string; children?: any[]; path: string; } = {id: 0, text: "", children: null, path: ""};
58
+ let node: {id: number, name: string; children?: any[]; path: string; } = {id: 0, name: "", children: null, path: ""};
59
+ if (child.children) {
60
+ node.children = buildTree(sort(child.children));
61
+ }
62
node.id = id;
63
id++;
35
- node.text = child.name;
64
+ node.name = child.name;
65
node.path = child.path;
66
cache.push(node);
38
- if (child.children) {
39
- node.children = buildTree(child.children);
40
- }
67
nodes.push(node);
68
}
69
return nodes;