import React, { useState } from 'react'; import { FaSort, FaSortUp, FaSortDown } from "react-icons/fa"; import { motion, AnimatePresence } from "framer-motion"; import DateienItem from './DateienItem'; import { UserFile } from '../../hooks/useFiles'; import styles from './DateienLists.module.css'; // Sort types type SortField = 'file_name' | 'action' | 'size' | 'created_at' | 'source'; type SortDirection = 'asc' | 'desc'; interface DateienAllProps { files: UserFile[]; onFileDeleted: () => void; onOptimisticDelete?: (fileId: number) => void; } const DateienAll: React.FC = ({ files, onFileDeleted, onOptimisticDelete }) => { const [sortField, setSortField] = useState('created_at'); const [sortDirection, setSortDirection] = useState('desc'); // Handle sorting const handleSort = (field: SortField) => { if (field === sortField) { setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'); } else { setSortField(field); setSortDirection(field === 'created_at' ? 'desc' : 'asc'); } }; // Sort all files const sortedFiles = [...files].sort((a, b) => { let result = 0; switch (sortField) { case 'file_name': result = a.file_name.localeCompare(b.file_name); break; case 'action': result = a.action.localeCompare(b.action); break; case 'size': const sizeA = a.size ?? 0; const sizeB = b.size ?? 0; result = sizeA - sizeB; break; case 'created_at': result = new Date(a.created_at).getTime() - new Date(b.created_at).getTime(); break; case 'source': result = a.source?.localeCompare(b.source ?? '') ?? 0; break; } return sortDirection === 'asc' ? result : -result; }); // Helper to render sort icon const renderSortIcon = (field: SortField) => { if (sortField !== field) return ; return sortDirection === 'asc' ? : ; }; if (sortedFiles.length === 0) { return (

Keine Dateien gefunden.

); } return ( {/* Table Headers */}
handleSort('file_name')}> Name {renderSortIcon('file_name')}
handleSort('action')}> Typ {renderSortIcon('action')}
handleSort('size')}> Größe {renderSortIcon('size')}
handleSort('created_at')}> Datum {renderSortIcon('created_at')}
{/* Files List */} {sortedFiles.map((file: UserFile) => ( onOptimisticDelete(file.id) : undefined} /> ))}
); }; export default DateienAll;