import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { FiEdit3, FiPlay } from "react-icons/fi"; import { FaSpinner } from "react-icons/fa"; import { FilePicker, useFilePickerStore } from "../modules/ide"; import type { FileNode } from "../modules/ide"; import { scriptsApi } from "../modules/ide/api/scripts.api"; const convertTreeToFileNode = (data: any[]): FileNode => { const convertItem = (item: any): FileNode => { const node: FileNode = { id: item.id, name: item.name, type: item.type === "folder" ? "folder" : "file", content: item.content || "", path: item.name, interpreter_id: item.interpreter_id, }; if (item.type === "folder") { node.children = []; if (item.children && Array.isArray(item.children)) { node.children = item.children.map((child: any) => { const childNode = convertItem(child); childNode.path = `${item.name}/${child.name}`; return childNode; }); } } return node; }; return { name: "templates", type: "folder", children: data.map((item) => convertItem(item)), }; }; export const TemplatesPage = () => { const navigate = useNavigate(); const selectedPaths = useFilePickerStore((s) => s.selectedPaths); const [files, setFiles] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { scriptsApi .getTree() .then((data) => { setFiles(convertTreeToFileNode(data)); }) .catch((e) => { console.error("Failed to load tree:", e); setFiles({ name: "templates", type: "folder", children: [] }); }) .finally(() => setLoading(false)); }, []); return (
{/* Floating header */}
{/* Running scripts counter */}
{selectedPaths.size} script{selectedPaths.size !== 1 ? "s" : ""}{" "} running
{/* Open in Editor button */}
{/* File Picker */}
{loading ? (
) : files ? ( ) : null}
); };