import classNames from 'classnames'; import React, { DragEventHandler, FC, useState } from 'react'; import DragandDropIcon from '../assets/upload-drag-drop-icon.svg'; import { Icon } from '../Icon/Icon'; interface UploadDragNdropProps { /** * Array di file per il caricamento del file */ files: File[]; /** * Funzione per impostare lo stato dei files */ setFiles: React.Dispatch>; } export const UploadDragNdrop: FC = ({ files, setFiles }) => { const [dragOverClass, setDragOverClass] = useState(false), dragOverClasses = classNames('upload-dragdrop', { dragover: dragOverClass, success: files.length > 0 }); const handleDrop: DragEventHandler = (event) => { handleDrag(event); const droppedFiles = event.dataTransfer.files; if (droppedFiles.length > 0) { setFiles(Array.from(droppedFiles)); } setDragOverClass(false); }, handleDrag: DragEventHandler = (event) => { event.preventDefault(); event.stopPropagation(); }, handleDragOver: DragEventHandler = (event) => { handleDrag(event); setDragOverClass(true); }, handleDragLeave: DragEventHandler = (event) => { handleDrag(event); setDragOverClass(false); }; const byteConverter = (bytes: number) => { const K_UNIT = 1024; const SIZES = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB']; if (bytes == 0) return '0 Byte'; const i = Math.floor(Math.log(bytes) / Math.log(K_UNIT)), resp = parseFloat((bytes / Math.pow(K_UNIT, i)).toFixed(2)) + ' ' + SIZES[i]; return resp; }; return (
{files.length > 0 && (
)}
{files.length > 0 && (

{files.map((file) => file.type + ' ' + byteConverter(file.size))}

)} {files.length > 0 ? ( <>
{files.map((file) => file.name)}

Caricamento completato

) : ( <>
Trascina il file per caricarlo

oppure

)}
); };