import { API_URL } from "../config/api.ts"; import type { Dump } from "../model.ts"; import { formatBytes } from "../utils/format.ts"; import { MediaPlayer } from "./MediaPlayer.tsx"; interface FilePreviewProps { dump: Dump; compact?: boolean; } function mimeIcon(mime: string): string { if (mime.startsWith("video/")) return "🎬"; if (mime.startsWith("audio/")) return "🎵"; if (mime === "application/pdf") return "📄"; if (mime.startsWith("text/")) return "📝"; return "📁"; } export default function FilePreview( { dump, compact = false }: FilePreviewProps, ) { const fileUrl = `${API_URL}/api/files/${dump.id}?v=${dump.fileSize ?? 0}`; const mime = dump.fileMime ?? ""; if (compact) { if (mime.startsWith("image/")) { return ( {dump.fileName} { (e.target as HTMLImageElement).style.display = "none"; }} /> ); } return {mimeIcon(mime)}; } if (mime.startsWith("image/")) { return ( {dump.fileName} ); } if (mime.startsWith("video/")) { return ; } if (mime.startsWith("audio/")) { return ; } if (mime === "application/pdf") { return ( ); } return ( {mimeIcon(mime)} Download {dump.fileName} {dump.fileSize != null && ` (${formatBytes(dump.fileSize)})`} ); }