import { FileVideo, Folder, HardDrive } from 'lucide-react' import type { FileEntry } from '../api/files' type FileEntriesTableProps = { basePath: string entries: FileEntry[] recursive: boolean selectedPath?: string selectedPaths: string[] onSelectAll: (checked: boolean) => void onToggleSelectedPath: (entry: FileEntry, checked: boolean) => void onEnter: (entry: FileEntry) => void onChoose: (entry: FileEntry) => void } export function FileEntriesTable({ basePath, entries, recursive, selectedPath, selectedPaths, onSelectAll, onToggleSelectedPath, onEnter, onChoose, }: FileEntriesTableProps) { return (
{entries.map((entry) => ( ))}
0 && entries.every((entry) => selectedPaths.includes(entry.path))} onChange={(event) => onSelectAll(event.target.checked)} /> 名称 大小 修改时间 选择
onToggleSelectedPath(entry, event.target.checked)} /> {entry.is_dir ? '—' : fmtBytes(entry.size)} {new Date(entry.modified * 1000).toLocaleString()}
) } function entryLabel(entry: FileEntry, basePath: string, recursive: boolean): string { if (!recursive) return entry.name return entry.path.replace((basePath || '') + '\\', '').replace((basePath || '') + '/', '') } function fmtBytes(n: number): string { if (!n) return '0 B' const u = ['B', 'KB', 'MB', 'GB', 'TB'] let v = n let i = 0 while (v >= 1024 && i < u.length - 1) { v /= 1024 i++ } return `${v.toFixed(1)} ${u[i]}` }