import { useState } from "react"; import { Card, Stack, Text, Group, Badge, Button, Box, ActionIcon, Tooltip, } from "@mantine/core"; import { useTranslation } from "react-i18next"; import StorageIcon from "@mui/icons-material/Storage"; import VisibilityIcon from "@mui/icons-material/Visibility"; import EditIcon from "@mui/icons-material/Edit"; import { StirlingFileStub } from "@app/types/fileContext"; import { getFileSize, getFileDate } from "@app/utils/fileUtils"; import { useFileThumbnail } from "@app/hooks/useFileThumbnail"; import DocumentThumbnail from "@app/components/shared/filePreview/DocumentThumbnail"; interface FileCardProps { file: File; fileStub?: StirlingFileStub; onRemove: () => void; onDoubleClick?: () => void; onView?: () => void; onEdit?: () => void; isSelected?: boolean; onSelect?: () => void; isSupported?: boolean; // Whether the file format is supported by the current tool } const FileCard = ({ file, fileStub, onRemove, onDoubleClick, onView, onEdit, isSelected, onSelect, isSupported = true, }: FileCardProps) => { const { t } = useTranslation(); const { isEncrypted, thumbnail: thumb, isGenerating, } = useFileThumbnail(fileStub); const [isHovered, setIsHovered] = useState(false); const isPdf = file.type === "application/pdf"; const isHydrating = isPdf && !isEncrypted && !thumb && !isGenerating; return ( setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} onClick={onSelect} data-testid="file-card" data-tour="file-card-checkbox" > {/* Hover action buttons */} {isHovered && (onView || onEdit) && (
e.stopPropagation()} > {onView && ( { e.stopPropagation(); onView(); }} > )} {onEdit && ( { e.stopPropagation(); onEdit(); }} > )}
)}
{file.name} {getFileSize(file)} {getFileDate(file)} {fileStub?.id && ( } > DB )} {!isSupported && ( {t("fileManager.unsupported", "Unsupported")} )}
); }; export default FileCard;