import type { Doc, Id } from "@fileone/convex/dataModel" 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" export type FileGridSelection = Set> export function FileGrid({ files, selectedFiles = new Set(), onSelectionChange, onContextMenu, }: { files: Doc<"files">[] selectedFiles?: FileGridSelection onSelectionChange?: (selection: FileGridSelection) => void onContextMenu?: (file: Doc<"files">, event: React.MouseEvent) => void }) { const onItemSelect = useCallback( (file: Doc<"files">) => { onSelectionChange?.(new Set([file._id])) }, [onSelectionChange], ) const onItemContextMenu = useCallback( (file: Doc<"files">, 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: Doc<"files"> onSelect?: (file: Doc<"files">) => void onContextMenu?: (file: Doc<"files">, event: React.MouseEvent) => void }) { return ( ) }) export { FileGridItem }