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 (
{
(e.target as HTMLImageElement).style.display = "none";
}}
/>
);
}
return {mimeIcon(mime)};
}
if (mime.startsWith("image/")) {
return (
);
}
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)})`}
);
}