"use client"; import React, { useEffect } from "react"; import TreeNode from "../TreeNode"; import { invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; interface TreeNodeData { name: string; path: string; type: "folder" | "file"; // Specific values for 'type' totalSize: number; subfolderCount: number; fileCount: number; children?: TreeNodeData[]; } interface TreeProps { data: TreeNodeData[]; } const Tree: React.FC = () => { const [rootNode, setRootNode] = React.useState(null); // Helper function to recursively render TreeNodeData const renderTreeNode = (node: TreeNodeData, rootSize: number) => { return ( {node.children && node.children.map((child) => renderTreeNode(child, rootSize))} ); }; const countTotalSizeFolderChildren = (root: TreeNodeData): number => { let size = 0; if (root.children && root.children.length > 0) { for (const child of root.children) { if (child.type === "folder") { size += child.totalSize; } } } return size; }; useEffect(() => { listen("folders-loaded", (event) => { setRootNode(event.payload); }); setInterval(async () => { invoke("load_folders") .then(() => console.log("Folders loaded")) .catch(console.error); }, 5000); }, []); if (!rootNode) { return
Loading...
; } const rootSize = countTotalSizeFolderChildren(rootNode); return (
{renderTreeNode(rootNode, rootSize)}
); }; export default Tree;