import { ActionIcon, Table } from "@mantine/core"; import { TbTrash } from "react-icons/tb"; import { GrUndo } from "react-icons/gr"; import { FileListItem } from "../../types/File.type"; import { byteToHumanSizeString } from "../../utils/fileSize.util"; import UploadProgressIndicator from "./UploadProgressIndicator"; import { FormattedMessage } from "react-intl"; const FileListRow = ({ file, onRemove, onRestore, }: { file: FileListItem; onRemove?: () => void; onRestore?: () => void; }) => { { const uploadable = "uploadingProgress" in file; const uploading = uploadable && file.uploadingProgress !== 0; const removable = uploadable ? file.uploadingProgress === 0 : onRemove && !file.deleted; const restorable = onRestore && !uploadable && !!file.deleted; // maybe undefined, force boolean const deleted = !uploadable && !!file.deleted; return ( {file.name} {byteToHumanSizeString(+file.size)} {removable && ( )} {uploading && ( )} {restorable && ( )} ); } }; const FileList = ({ files, setFiles, }: { files: T[]; setFiles: (files: T[]) => void; }) => { const remove = (index: number) => { const file = files[index]; if ("uploadingProgress" in file) { files.splice(index, 1); } else { files[index] = { ...file, deleted: true }; } setFiles([...files]); }; const restore = (index: number) => { const file = files[index]; if ("uploadingProgress" in file) { return; } else { files[index] = { ...file, deleted: false }; } setFiles([...files]); }; const rows = files.map((file, i) => ( remove(i)} onRestore={() => restore(i)} /> )); return ( {rows}
); }; export default FileList;