@@ -17,23 +17,28 @@ import {
1717import {
1818 Block as BlockIcon ,
1919 CheckCircle as CheckCircleIcon ,
20+ Queue as QueueIcon ,
2021} from '@material-ui/icons' ;
2122
2223import * as StringUtils from '../utils/String' ;
2324import { LinearDeterminate } from './Loaders' ;
2425
2526const getFileStatusClass = status => {
2627 switch ( status ) {
28+ case 'queued' :
29+ return 'fileQueued' ;
30+ break ;
31+
2732 case 'uploaded' :
28- return 'fileSuccess ' ;
33+ return 'fileUploaded ' ;
2934 break ;
3035
3136 case 'rejected' :
32- return 'fileError ' ;
37+ return 'fileRejected ' ;
3338 break ;
3439
3540 default :
36- return 'filePrimary ' ;
41+ return 'fileUploading ' ;
3742 break ;
3843 }
3944} ;
@@ -42,12 +47,21 @@ let FileIcon = props => {
4247 const { classes, status } = props ;
4348
4449 switch ( status ) {
50+ case 'queued' :
51+ return < QueueIcon className = { classes . queued } fontSize = "large" /> ;
52+ break ;
53+
4554 case 'uploaded' :
46- return < CheckCircleIcon color = "primary" fontSize = "large" /> ;
55+ return (
56+ < CheckCircleIcon
57+ className = { classes . uploaded }
58+ fontSize = "large"
59+ />
60+ ) ;
4761 break ;
4862
4963 case 'rejected' :
50- return < BlockIcon className = { classes . error } fontSize = "large" /> ;
64+ return < BlockIcon className = { classes . rejected } fontSize = "large" /> ;
5165 break ;
5266
5367 default :
@@ -60,15 +74,20 @@ let FileIcon = props => {
6074
6175FileIcon . propTypes = {
6276 classes : PropTypes . object . isRequired ,
63- status : PropTypes . oneOf ( [ 'uploading' , 'uploaded' , 'rejected' ] ) . isRequired ,
77+ status : PropTypes . oneOf ( [ 'queued' , 'uploading' , 'uploaded' , 'rejected' ] )
78+ . isRequired ,
6479} ;
6580
6681FileIcon = withStyles ( theme => ( {
67- success : {
82+ queued : {
83+ color : theme . palette . grey [ 500 ] ,
84+ } ,
85+
86+ uploaded : {
6887 color : colors . green [ 600 ] ,
6988 } ,
7089
71- error : {
90+ rejected : {
7291 color : theme . palette . error . light ,
7392 } ,
7493
@@ -82,11 +101,17 @@ FileIcon = withStyles(theme => ({
82101} ) ) ( FileIcon ) ;
83102
84103function Dropzone ( props ) {
85- const { classes, acceptedFileTypes, maxFiles, maxFileSize } = props ;
104+ const {
105+ classes,
106+ acceptedFileTypes,
107+ maxFiles,
108+ maxFileSize,
109+ handleUpload,
110+ } = props ;
86111
87112 const [ files , setFiles ] = useState ( [ ] ) ;
88113
89- const getFileErrorMessage = file => {
114+ const getfileRejectedMessage = file => {
90115 let errors = [ ] ;
91116
92117 if (
@@ -116,7 +141,8 @@ function Dropzone(props) {
116141 acceptedFiles = acceptedFiles . map ( file =>
117142 Object . assign ( file , {
118143 url : URL . createObjectURL ( file ) ,
119- status : 'uploading' ,
144+ status : 'queued' ,
145+ message : 'File is on the waiting queue.' ,
120146 } ) ,
121147 ) ;
122148
@@ -126,11 +152,21 @@ function Dropzone(props) {
126152 status : 'rejected' ,
127153 message : file . hasOwnProperty ( 'message' )
128154 ? file . message
129- : getFileErrorMessage ( file ) ,
155+ : getfileRejectedMessage ( file ) ,
130156 } ) ,
131157 ) ;
132158
133- setFiles ( files . concat ( acceptedFiles , rejectedFiles ) ) ;
159+ setFiles (
160+ files . concat ( acceptedFiles , rejectedFiles ) . map ( ( file , key ) => {
161+ if ( key === 0 && file . status === 'queued' ) {
162+ file . status = 'uploading' ;
163+
164+ return file ;
165+ }
166+
167+ return file ;
168+ } ) ,
169+ ) ;
134170 } ,
135171 noClick : true ,
136172 noKeyboard : true ,
@@ -143,9 +179,9 @@ function Dropzone(props) {
143179 files . forEach ( file => {
144180 // Make sure to revoke the data uris to avoid memory leaks.
145181 URL . revokeObjectURL ( file . preview ) ;
146-
147- // Process uploading here.
148182 } ) ;
183+
184+ // If there aren't any one being uploaded, pick one from the queue.
149185 } ,
150186 [ files ] ,
151187 ) ;
@@ -321,9 +357,9 @@ function Dropzone(props) {
321357
322358Dropzone . propTypes = {
323359 acceptedFileTypes : PropTypes . array ,
324- onDrop : PropTypes . func ,
325360 maxFiles : PropTypes . number ,
326361 maxFileSize : PropTypes . number ,
362+ handleUpload : PropTypes . func . isRequired ,
327363} ;
328364
329365Dropzone . defaultProps = {
@@ -401,16 +437,20 @@ const styles = theme => ({
401437 } ,
402438 } ,
403439
404- fileSuccess : {
405- border : `2px solid ${ colors . green [ 600 ] } ` ,
440+ fileQueued : {
441+ border : `2px solid ${ theme . palette . grey [ 500 ] } ` ,
406442 } ,
407443
408- fileError : {
409- border : `2px solid ${ theme . palette . error . light } ` ,
444+ fileUploading : {
445+ border : `2px solid ${ theme . palette . primary . main } ` ,
410446 } ,
411447
412- filePrimary : {
413- border : `2px solid ${ theme . palette . primary . main } ` ,
448+ fileUploaded : {
449+ border : `2px solid ${ colors . green [ 600 ] } ` ,
450+ } ,
451+
452+ fileRejected : {
453+ border : `2px solid ${ theme . palette . error . light } ` ,
414454 } ,
415455
416456 fileAdd : {
0 commit comments