File size: 1,051 Bytes
9b906ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import { useMemo } from "react";
import { useTranslation } from "react-i18next";
import { I18nKey } from "#/i18n/declaration";
import { buildFileTree } from "#/utils/file-tree";
import { TreeNode } from "./tree-node";
interface FileTreeViewProps {
paths: string[];
selectedPath: string | null;
onSelectFile: (path: string) => void;
}
export function FileTreeView({
paths,
selectedPath,
onSelectFile,
}: FileTreeViewProps) {
const { t } = useTranslation("openhands");
const root = useMemo(() => buildFileTree(paths), [paths]);
if (root.children.length === 0) {
return (
<div className="px-3 py-4 text-sm text-[var(--oh-muted)]">
{t(I18nKey.FILES$NO_FILES)}
</div>
);
}
return (
<ul className="py-1 custom-scrollbar-always" data-testid="file-tree-view">
{root.children.map((child) => (
<TreeNode
key={child.path}
node={child}
depth={0}
selectedPath={selectedPath}
onSelectFile={onSelectFile}
/>
))}
</ul>
);
}
|