// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import { Grid, StyleRulesCallback, Table, TableBody, TableCell, TableHead, TableRow, Typography, WithStyles } from '@material-ui/core'; import { withStyles } from '@material-ui/core'; import Dropzone from 'react-dropzone'; import { CloudUploadIcon } from "../icon/icon"; import { formatFileSize, formatProgress, formatUploadSpeed } from "~/common/formatters"; import { UploadFile } from "~/store/collections/uploader/collection-uploader-actions"; type CssRules = "root" | "dropzone" | "container" | "uploadIcon"; const styles: StyleRulesCallback = theme => ({ root: { }, dropzone: { width: "100%", height: "200px", overflow: "auto", border: "1px dashed black", borderRadius: "5px" }, container: { height: "100%" }, uploadIcon: { verticalAlign: "middle" } }); interface FileUploadProps { files: UploadFile[]; disabled: boolean; onDrop: (files: File[]) => void; } export const FileUpload = withStyles(styles)( ({ classes, files, disabled, onDrop }: FileUploadProps & WithStyles) => Upload data onDrop(files)} disabled={disabled}> {files.length === 0 && Drag and drop data or click to browse } {files.length > 0 && File name File size Upload speed Upload progress {files.map(f => {f.file.name} {formatFileSize(f.file.size)} {formatUploadSpeed(f.prevLoaded, f.loaded, f.prevTime, f.currentTime)} {formatProgress(f.loaded, f.total)} )}
}
);