1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
9 Table, TableBody, TableCell, TableHead, TableRow,
12 } from '@material-ui/core';
13 import { withStyles } from '@material-ui/core';
14 import Dropzone from 'react-dropzone';
15 import { CloudUploadIcon } from "../icon/icon";
16 import { formatFileSize, formatProgress, formatUploadSpeed } from "../../common/formatters";
17 import { UploadFile } from "../../store/collections/uploader/collection-uploader-actions";
19 type CssRules = "root" | "dropzone" | "container" | "uploadIcon";
21 const styles: StyleRulesCallback<CssRules> = theme => ({
28 border: "1px dashed black",
35 verticalAlign: "middle"
39 interface FileUploadProps {
41 onDrop: (files: File[]) => void;
44 export const FileUpload = withStyles(styles)(
45 ({ classes, files, onDrop }: FileUploadProps & WithStyles<CssRules>) =>
46 <Grid container direction={"column"}>
47 <Typography variant={"subheading"}>
50 <Dropzone className={classes.dropzone} onDrop={files => onDrop(files)}>
51 {files.length === 0 &&
52 <Grid container justify="center" alignItems="center" className={classes.container}>
53 <Grid item component={"span"}>
54 <Typography variant={"subheading"}>
55 <CloudUploadIcon className={classes.uploadIcon}/> Drag and drop data or click to browse
60 <Table style={{width: "100%"}}>
63 <TableCell>File name</TableCell>
64 <TableCell>File size</TableCell>
65 <TableCell>Upload speed</TableCell>
66 <TableCell>Upload progress</TableCell>
72 <TableCell>{f.file.name}</TableCell>
73 <TableCell>{formatFileSize(f.file.size)}</TableCell>
74 <TableCell>{formatUploadSpeed(f.prevLoaded, f.loaded, f.prevTime, f.currentTime)}</TableCell>
75 <TableCell>{formatProgress(f.loaded, f.total)}</TableCell>