@@ -5,7 +5,7 @@ import { Button } from '@neos-project/react-ui-components';
5
5
import { createUseMediaUiStyles , MediaUiTheme , useIntl , useNotify } from '@media-ui/core/src' ;
6
6
import { useUploadDialogState , useUploadFiles } from '@media-ui/feature-asset-upload/src/hooks' ;
7
7
import { useCallback } from 'react' ;
8
- import { UploadedFile } from '@media-ui/feature-asset-upload/src/interfaces' ;
8
+ import { FilesUploadState , UploadedFile } from '@media-ui/feature-asset-upload/src/interfaces' ;
9
9
import { PreviewSection , UploadSection } from '@media-ui/feature-asset-upload/src/components' ;
10
10
11
11
const useStyles = createUseMediaUiStyles ( ( theme : MediaUiTheme ) => ( {
@@ -30,32 +30,71 @@ const NewAssetUpload = (props: { onComplete: (result: { object: { __identity: st
30
30
const handleUpload = useCallback ( ( ) => {
31
31
uploadFiles ( dialogState . files . selected )
32
32
. then ( ( { data : { uploadFiles } } ) => {
33
+ setFiles ( ( prev ) => {
34
+ return {
35
+ selected : [ ] ,
36
+ finished : [
37
+ ...prev . finished ,
38
+ ...prev . selected . filter ( ( file ) =>
39
+ uploadFiles . find ( ( result ) => {
40
+ return result . success && result . filename === file . name
41
+ ? ( file . uploadStateResult = result . result )
42
+ : false ;
43
+ } )
44
+ ) ,
45
+ ] ,
46
+ rejected : [
47
+ ...prev . rejected ,
48
+ ...prev . selected . filter ( ( file ) =>
49
+ uploadFiles . find ( ( result ) => {
50
+ return ! result . success && result . filename === file . name
51
+ ? ( file . uploadStateResult = result . result )
52
+ : false ;
53
+ } )
54
+ ) ,
55
+ ] ,
56
+ } as FilesUploadState ;
57
+ } ) ;
33
58
if ( ! uploadFiles [ 0 ] . success ) {
34
59
Notify . warning (
60
+ translate ( 'uploadDialog.uploadFinishedWithErrors' , 'Some files could not be uploaded' ) ,
35
61
translate ( 'uploadDialog.uploadFinishedWithErrors' , 'Some files could not be uploaded' )
36
62
) ;
37
63
} else {
38
64
Notify . ok ( translate ( 'uploadDialog.uploadFinished' , 'Upload finished' ) ) ;
39
65
onComplete ( { object : { __identity : uploadFiles [ 0 ] . assetId } } ) ;
40
66
}
67
+ setUploadPossible ( false ) ;
41
68
} )
42
69
. catch ( ( error ) => {
43
70
Notify . error ( translate ( 'fileUpload.error' , 'Upload failed' ) , error ) ;
44
71
} ) ;
45
- } , [ uploadFiles , dialogState . files . selected , Notify , translate , onComplete ] ) ;
72
+ } , [ uploadFiles , dialogState . files . selected , setFiles , setUploadPossible , Notify , translate , onComplete ] ) ;
46
73
47
74
const handleSetFiles = useCallback (
48
75
( files : UploadedFile [ ] ) => {
49
76
setFiles ( ( prev ) => {
50
- return { ...prev , selected : files } ;
77
+ const fileNames = new Set ( ) ;
78
+ for ( const file of prev . finished . concat ( prev . rejected ) ) {
79
+ fileNames . add ( file . name ) ;
80
+ }
81
+ const newSelectedFiles = files . filter ( ( file ) => {
82
+ return fileNames . has ( file . name ) ? false : fileNames . add ( file . name ) ;
83
+ } ) ;
84
+ return { ...prev , selected : newSelectedFiles } ;
51
85
} ) ;
52
86
} ,
53
87
[ setFiles ]
54
88
) ;
55
89
56
90
return (
57
91
< section className = { classes . uploadArea } >
58
- < UploadSection files = { dialogState . files . selected } loading = { loading } onSetFiles = { handleSetFiles } />
92
+ < UploadSection
93
+ files = { dialogState . files . selected }
94
+ loading = { loading }
95
+ onSetFiles = { handleSetFiles }
96
+ maxFiles = { 1 }
97
+ />
59
98
< PreviewSection
60
99
files = { dialogState . files }
61
100
loading = { loading }
0 commit comments