@setoelkahfi / svara / commits / 5d8ca4a

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;