import { memo, useCallback } from "react" import { TextFileIcon } from "@/components/icons/text-file-icon" import { MiddleTruncatedText } from "@/components/ui/middle-truncated-text" import { cn } from "@/lib/utils" import type { FileInfo } from "./file" export type FileGridSelection = Set export function FileGrid({ files, selectedFiles = new Set(), onSelectionChange, onContextMenu, }: { files: FileInfo[] selectedFiles?: FileGridSelection onSelectionChange?: (selection: FileGridSelection) => void onContextMenu?: (file: FileInfo, event: React.MouseEvent) => void }) { const onItemSelect = useCallback( (file: FileInfo) => { onSelectionChange?.(new Set([file.id])) }, [onSelectionChange], ) const onItemContextMenu = useCallback( (file: FileInfo, event: React.MouseEvent) => { onContextMenu?.(file, event) onSelectionChange?.(new Set([file.id])) }, [onContextMenu, onSelectionChange], ) return (
{files.map((file) => ( ))}
) } const FileGridItem = memo(function FileGridItem({ selected, file, onSelect, onContextMenu, }: { selected: boolean file: FileInfo onSelect?: (file: FileInfo) => void onContextMenu?: (file: FileInfo, event: React.MouseEvent) => void }) { return ( ) }) export { FileGridItem }