import React, { useState } from 'react'; import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, IconButton, Checkbox, Button, Chip, } from '@mui/material'; import { Download as DownloadIcon } from '@mui/icons-material'; import { File, FileStatus } from '../types/file'; import { api } from '../services/api'; interface FileListProps { files: File[]; onFileStatusChange: () => void; } const FileList: React.FC = ({ files, onFileStatusChange }) => { const [selectedFiles, setSelectedFiles] = useState([]); const handleSelectFile = (fileId: string) => { setSelectedFiles((prev) => prev.includes(fileId) ? prev.filter((id) => id !== fileId) : [...prev, fileId] ); }; const handleSelectAll = () => { setSelectedFiles((prev) => prev.length === files.length ? [] : files.map((file) => file.id) ); }; const handleDownload = async (fileId: string) => { try { const blob = await api.downloadFile(fileId); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = files.find((f) => f.id === fileId)?.filename || 'downloaded-file'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } catch (error) { console.error('Error downloading file:', error); } }; const handleDownloadSelected = async () => { for (const fileId of selectedFiles) { await handleDownload(fileId); } }; const getStatusColor = (status: FileStatus) => { switch (status) { case FileStatus.SUCCESS: return 'success'; case FileStatus.FAILED: return 'error'; case FileStatus.PROCESSING: return 'warning'; default: return 'default'; } }; return (
0 && selectedFiles.length < files.length} onChange={handleSelectAll} /> Filename Status Created At Actions {files.map((file) => ( handleSelectFile(file.id)} /> {file.filename} {new Date(file.created_at).toLocaleString()} {file.status === FileStatus.SUCCESS && ( handleDownload(file.id)} size="small" > )} ))}
); }; export default FileList;