@@ -20,12 +20,12 @@ export default function MultiImageInput({
2020 allowCrop,
2121 ...props
2222} ) {
23- const [ numberOfImages , setNumberOfImages ] = useState ( 1 ) ;
23+ const [ numberOfImages , setNumberOfImages ] = useState (
24+ Object . keys ( files ) . length < max ? Object . keys ( files ) . length : max
25+ ) ;
2426
2527 const [ fileUploadRefs , setFileUploadRefs ] = useState ( { } ) ;
2628
27- const [ imagePreviews , setImagePreviews ] = useState ( { } ) ;
28-
2929 const [ currentImage , setCurrentImage ] = useState ( null ) ;
3030
3131 const currentFile = useRef ( null ) ;
@@ -55,10 +55,11 @@ export default function MultiImageInput({
5555 } , [ numberOfImages ] ) ;
5656
5757 useEffect ( ( ) => {
58- if ( numberOfImages < max && files [ numberOfImages - 1 ] ) {
59- setNumberOfImages ( n => n + 1 ) ;
58+ let imageCount = Object . keys ( files ) . length ;
59+ if ( imageCount < max ) {
60+ setNumberOfImages ( Object . keys ( files ) . length + 1 ) ;
6061 }
61- } , [ files , max , numberOfImages ] ) ;
62+ } , [ files , max ] ) ;
6263
6364 const handleFileChange = ( e , index ) => {
6465 e . preventDefault ( ) ;
@@ -71,11 +72,6 @@ export default function MultiImageInput({
7172
7273 reader . onloadend = ( ) => {
7374 if ( ! allowCrop ) {
74- setImagePreviews ( {
75- ...imagePreviews ,
76- [ index ] : reader . result
77- } ) ;
78-
7975 setFiles ( { ...files , [ index ] : reader . result } ) ;
8076 return ;
8177 }
@@ -100,11 +96,6 @@ export default function MultiImageInput({
10096 if ( imageRef && imageRef . width && imageRef . height ) {
10197 const base64Image = getCroppedImage ( imageRef , crop ) ;
10298
103- setImagePreviews ( {
104- ...imagePreviews ,
105- [ currentFileInputIndex . current ] : base64Image
106- } ) ;
107-
10899 setFiles ( { ...files , [ currentFileInputIndex . current ] : base64Image } ) ;
109100 }
110101 } ;
@@ -151,25 +142,23 @@ export default function MultiImageInput({
151142 const removeImage = ( e , index ) => {
152143 fileUploadRefs [ index ] . current . value = '' ;
153144
154- delete files [ index ] ;
155- delete imagePreviews [ index ] ;
156-
157145 const reIndexedFiles = { } ;
158- const reIndexedPreviews = { } ;
159146
160147 for ( let i = index - 1 ; i >= 0 ; i -- ) {
161148 reIndexedFiles [ i ] = files [ i ] ;
162- reIndexedPreviews [ i ] = imagePreviews [ i ] ;
163149 }
164150
165- for ( let i = index ; i < numberOfImages - 1 ; i ++ ) {
166- reIndexedFiles [ i ] = files [ i + 1 ] ;
167- reIndexedPreviews [ i ] = imagePreviews [ i + 1 ] ;
151+ if ( Object . keys ( files ) . length === max ) {
152+ for ( let i = index ; i < numberOfImages - 1 ; i ++ ) {
153+ reIndexedFiles [ i ] = files [ i + 1 ] ;
154+ }
155+ } else {
156+ for ( let i = index ; i < numberOfImages - 2 ; i ++ ) {
157+ reIndexedFiles [ i ] = files [ i + 1 ] ;
158+ }
168159 }
169160
170- setImagePreviews ( reIndexedPreviews ) ;
171161 setFiles ( reIndexedFiles ) ;
172- setNumberOfImages ( n => n - 1 ) ;
173162
174163 exitCrop ( ) ;
175164
@@ -184,21 +173,24 @@ export default function MultiImageInput({
184173 . fill ( )
185174 . map ( ( _ , index ) => (
186175 < ImageInput key = { index } >
187- { imagePreviews [ index ] ? (
176+ { files [ index ] ? (
188177 < >
189178 < DeleteImageButton
179+ aria-label = { `Delete Image ${ index } ` }
190180 onClick = { e => removeImage ( e , index ) }
191181 type = "button"
192182 />
193183 < ImageOverlay >
194184 < Image
195- src = { imagePreviews [ index ] }
185+ alt = { `uploaded image${ index } ` }
186+ src = { files [ index ] }
196187 onClick = { ( ) => fileUploadRefs [ index ] . current . click ( ) }
197188 />
198189 </ ImageOverlay >
199190 </ >
200191 ) : (
201192 < div
193+ role = "button"
202194 onClick = { ( ) => fileUploadRefs [ index ] . current . click ( ) }
203195 style = { { cursor : 'pointer' } }
204196 >
0 commit comments