mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-03-22 22:37:24 +00:00
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import type { ReactNode } from 'react';
|
|
import { Folder, Search } from 'lucide-react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { ScrollArea } from '../../ui/scroll-area';
|
|
import type { FileTreeNode, FileTreeViewMode } from '../types/types';
|
|
import FileTreeEmptyState from './FileTreeEmptyState';
|
|
import FileTreeList from './FileTreeList';
|
|
|
|
type FileTreeBodyProps = {
|
|
files: FileTreeNode[];
|
|
filteredFiles: FileTreeNode[];
|
|
searchQuery: string;
|
|
viewMode: FileTreeViewMode;
|
|
expandedDirs: Set<string>;
|
|
onItemClick: (item: FileTreeNode) => void;
|
|
renderFileIcon: (filename: string) => ReactNode;
|
|
formatFileSize: (bytes?: number) => string;
|
|
formatRelativeTime: (date?: string) => string;
|
|
};
|
|
|
|
export default function FileTreeBody({
|
|
files,
|
|
filteredFiles,
|
|
searchQuery,
|
|
viewMode,
|
|
expandedDirs,
|
|
onItemClick,
|
|
renderFileIcon,
|
|
formatFileSize,
|
|
formatRelativeTime,
|
|
}: FileTreeBodyProps) {
|
|
const { t } = useTranslation();
|
|
|
|
return (
|
|
<ScrollArea className="flex-1 px-2 py-1">
|
|
{files.length === 0 ? (
|
|
<FileTreeEmptyState
|
|
icon={Folder}
|
|
title={t('fileTree.noFilesFound')}
|
|
description={t('fileTree.checkProjectPath')}
|
|
/>
|
|
) : filteredFiles.length === 0 && searchQuery ? (
|
|
<FileTreeEmptyState
|
|
icon={Search}
|
|
title={t('fileTree.noMatchesFound')}
|
|
description={t('fileTree.tryDifferentSearch')}
|
|
/>
|
|
) : (
|
|
<FileTreeList
|
|
items={filteredFiles}
|
|
viewMode={viewMode}
|
|
expandedDirs={expandedDirs}
|
|
onItemClick={onItemClick}
|
|
renderFileIcon={renderFileIcon}
|
|
formatFileSize={formatFileSize}
|
|
formatRelativeTime={formatRelativeTime}
|
|
/>
|
|
)}
|
|
</ScrollArea>
|
|
);
|
|
}
|
|
|