'use client'; import { useState, useEffect } from 'react'; import { FileIcon, Image, FileText, Download, Trash2, Eye, AlertCircle } from 'lucide-react'; import { apiUrl } from '@/lib/constants'; import FilePreview from './FilePreview'; import { isPreviewable, formatFileSize } from '@/lib/utils/fileUtils'; import { appendTokenToUrl } from '@/lib/adminAuth'; interface FileEntry { id: string; filename: string; mimetype: string; size: number; createdAt: string; createdBy: string; } interface FileListProps { files: FileEntry[]; onDeleteFile: (fileId: string) => void; roomCode: string; } export default function FileList({ files, onDeleteFile, roomCode }: FileListProps) { const [deletingFile, setDeletingFile] = useState(null); const [previewFile, setPreviewFile] = useState(null); // Clear preview if the previewed file is deleted useEffect(() => { if (previewFile && !files.some(file => file.id === previewFile.id)) { setPreviewFile(null); } }, [files, previewFile]); if (files.length === 0) { return null; } const getFileIcon = (mimetype: string) => { if (mimetype.startsWith('image/')) { return ; } else if (mimetype.includes('pdf')) { return ; } else { return ; } }; // Check if a file is previewable const canPreview = (file: FileEntry) => { return isPreviewable(file.mimetype); }; return (
{previewFile && ( setPreviewFile(null)} /> )}
{files.length === 0 ? (

No files yet

Upload your first file using the form above

) : ( files.map((file) => (
canPreview(file) ? setPreviewFile(file) : null} >
{getFileIcon(file.mimetype)}

{file.filename}

{formatFileSize(file.size)} • {new Date(file.createdAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}

e.stopPropagation()}> {canPreview(file) ? ( ) : ( )} e.stopPropagation()} href={appendTokenToUrl(`${apiUrl}/clipboard/${roomCode}/files/${file.id}?filename=${encodeURIComponent(file.filename)}`)} download={file.filename} className="p-1.5 text-text-secondary hover:text-primary rounded-md hover:bg-primary/10 transition-colors" title="Download" >
{/* Delete confirmation */} {deletingFile === file.id && (

Delete file?

This action cannot be undone.

)}
)) )}
); }