"use client"; import { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { X, Download, ChevronLeft, ChevronRight, Maximize2, Minimize2 } from "lucide-react"; import { isPreviewable, getLanguageFromMime, formatFileSize, formatDate } from "@/lib/utils"; import dynamic from "next/dynamic"; const SyntaxHighlighter = dynamic( () => import("react-syntax-highlighter").then((mod) => mod.Light), { ssr: false } ); interface FileData { id: string; name: string; size: number; mimeType: string; createdAt: string; } interface FilePreviewProps { file: FileData | null; files?: FileData[]; onClose: () => void; onNavigate?: (file: FileData) => void; } export default function FilePreview({ file, files = [], onClose, onNavigate }: FilePreviewProps) { const [textContent, setTextContent] = useState(""); const [fullscreen, setFullscreen] = useState(false); const [loading, setLoading] = useState(false); const currentIndex = files.findIndex((f) => f.id === file?.id); useEffect(() => { if (!file) return; const isText = file.mimeType.startsWith("text/") || file.mimeType.includes("json") || file.mimeType.includes("xml") || file.mimeType.includes("javascript") || file.mimeType.includes("typescript") || file.mimeType.includes("markdown"); if (isText) { setLoading(true); fetch(`/api/files/${file.id}/preview`) .then((res) => res.text()) .then((text) => { setTextContent(text); setLoading(false); }) .catch(() => setLoading(false)); } if (file.mimeType === "text/csv") { setLoading(true); fetch(`/api/files/${file.id}/preview`) .then((res) => res.text()) .then((text) => { setTextContent(text); setLoading(false); }) .catch(() => setLoading(false)); } }, [file]); if (!file) return null; const handlePrev = () => { if (currentIndex > 0 && onNavigate) onNavigate(files[currentIndex - 1]); }; const handleNext = () => { if (currentIndex < files.length - 1 && onNavigate) onNavigate(files[currentIndex + 1]); }; const renderPreview = () => { if (!isPreviewable(file.mimeType)) { return (

Aperçu non disponible

{file.mimeType}

); } if (file.mimeType.startsWith("image/")) { return (
{file.name}
); } if (file.mimeType.startsWith("video/")) { return (
); } if (file.mimeType.startsWith("audio/")) { return (
); } if (file.mimeType === "application/pdf") { return (