import React, { useState } from 'react' import { useDrop } from 'react-dnd' import { useTranslation } from 'react-i18next' import { NativeTypes } from 'react-dnd-html5-backend' import { useFileUpload } from 'use-file-upload' import { Button, Overlay, Text, Table } from 'aws-northstar/components' import { Box, Grid } from 'aws-northstar/layouts' import { CloudUpload } from '@material-ui/icons' type FileUploadProps = { description: string acceptMimeTypes: string[] setFile: (file: File) => void error?: string } const FileUpload: React.FC = ({ description, acceptMimeTypes, setFile, error = '' }: FileUploadProps) => { const { t: transCommon } = useTranslation('common') const [uploadFile, setUploadFile] = useState() const [, selectFile] = useFileUpload() const [{ canDrop }, drop] = useDrop({ accept: [NativeTypes.FILE], drop(item, monitor) { const droppedFile = monitor.getItem().files[0] if (acceptMimeTypes.includes(droppedFile.type)) { setUploadFile(droppedFile) setFile(droppedFile) } }, collect: (monitor) => { return { isOver: monitor.isOver(), canDrop: monitor.canDrop() } } }) const handleClickUploadButton = () => { selectFile( { accept: acceptMimeTypes.join(), multiple: false }, ({ file }: any) => { setUploadFile(file) setFile(file) } ) } const columnDefinitions = [ { id: 'fileName', Header: transCommon('fileName'), accessor: 'fileName', minWidth: 400 }, { id: 'fileSize', Header: transCommon('fileSize'), accessor: 'fileSize', minWidth: 200 } ] let items: any[] = [] if (uploadFile) { items = [ { fileName: uploadFile.name, fileSize: uploadFile.size } ] } return (
{description} {canDrop && }
{uploadFile && ( )} {error !== '' && ( {error} )} ) } export default FileUpload