Skip to main content

FileUploader

FileUploader.tsx
import React, { useState } from 'react';
import './FileUploader.css';

type FileUploaderProps = {
onUpload: (files: File[]) => void;
accept?: string;
multiple?: boolean;
}

const FileUploader = (props: FileUploaderProps) => {
const { onUpload, accept, multiple } = props;
const [selectedFiles, setSelectedFiles] = useState<FileList | null>(null);

const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const files = event.target.files;
if (files) {
setSelectedFiles(files);
}
}

const handleUploadClick = () => {
if (selectedFiles) {
const filesArray = Array.from(selectedFiles);
onUpload(filesArray);
setSelectedFiles(null);
}
}

return (
<div className="file-uploader-container">
<input
type="file"
accept={accept}
multiple={multiple}
onChange={handleFileChange}
/>
<button onClick={handleUploadClick}>Upload</button>
</div>
);
};

export default FileUploader;


FileUploader.module.css
.file-uploader-container {
display: flex;
flex-direction: column;
align-items: center;
margin: 20px;
padding: 20px;
border: 1px solid #ccc;
}

.file-uploader-container input[type="file"] {
margin-bottom: 10px;
}

.file-uploader-container button {
padding: 10px;
background-color: #008CBA;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}

.file-uploader-container button:hover {
background-color: #006F8C;
}