@@ -54,6 +54,7 @@ const effectConfig = {
5454
5555const body = document . body ;
5656const upload = document . querySelector ( '.img-upload' ) ;
57+ const uploadSubmitButton = upload . querySelector ( '#upload-submit' ) ;
5758const uploadFile = upload . querySelector ( '#upload-file' ) ;
5859const uploadForm = upload . querySelector ( '#upload-select-image' ) ;
5960const uploadOverlay = upload . querySelector ( '.img-upload__overlay' ) ;
@@ -76,48 +77,51 @@ const showAlert = (type) => {
7677 const alert = fragment . querySelector ( `.${ type } ` ) . cloneNode ( true ) ;
7778 const alertCloseButton = alert . querySelector ( `.${ type } __button` ) ;
7879
79- const onAlertKeydown = ( evt ) => {
80+ const onDocumentKeydown = ( evt ) => {
8081 if ( isEscapeKey ( evt ) ) {
8182 evt . preventDefault ( ) ;
8283 closeAlert ( ) ;
8384 }
8485 } ;
8586
86- const onAlertOutsideClick = ( evt ) => {
87+ const onDocumentClick = ( evt ) => {
8788 if ( ! evt . target . closest ( `.${ type } __inner` ) ) {
8889 closeAlert ( ) ;
8990 }
9091 } ;
9192
92- const onAlertCloseClick = ( ) => {
93+ const onAlertCloseButtonClick = ( ) => {
9394 closeAlert ( ) ;
9495 } ;
9596
9697 function closeAlert ( ) {
9798 alert . remove ( ) ;
98- document . removeEventListener ( 'keydown' , onAlertKeydown ) ;
99- document . removeEventListener ( 'click' , onAlertOutsideClick ) ;
99+ document . removeEventListener ( 'keydown' , onDocumentKeydown ) ;
100+ document . removeEventListener ( 'click' , onDocumentClick ) ;
100101 }
101102
102- alertCloseButton . addEventListener ( 'click' , onAlertCloseClick ) ;
103- document . addEventListener ( 'keydown' , onAlertKeydown ) ;
104- document . addEventListener ( 'click' , onAlertOutsideClick ) ;
103+ alertCloseButton . addEventListener ( 'click' , onAlertCloseButtonClick ) ;
104+ document . addEventListener ( 'keydown' , onDocumentKeydown ) ;
105+ document . addEventListener ( 'click' , onDocumentClick ) ;
105106 body . appendChild ( alert ) ;
106107} ;
107108
108-
109109const applyFilterEffect = ( effect , value ) => `${ effectConfig [ effect ] ?. property } (${ parseFloat ( value ) } ${ effectConfig [ effect ] ?. unit } )` ;
110110
111111const applyTransformScale = ( value ) => `scale(${ parseFloat ( value ) / 100 } )` ;
112112
113+ const toggleSubmitButton = ( isDisabled ) => {
114+ uploadSubmitButton . disabled = isDisabled ;
115+ } ;
116+
113117const onScaleControlClick = ( direction ) => {
114118 currentScale = Math . min ( Math . max ( currentScale + ( direction * ScaleStep . STEP ) , ScaleStep . MIN ) , ScaleStep . MAX ) ;
115119
116120 uploadScaleControlInput . value = `${ currentScale } %` ;
117121 uploadPreview . style . transform = applyTransformScale ( currentScale ) ;
118122} ;
119123
120- const onUploadKeydown = ( evt ) => {
124+ const onDocumentKeydownUpload = ( evt ) => {
121125 if ( document . querySelector ( '.success' ) || document . querySelector ( '.error' ) ) {
122126 return ;
123127 }
@@ -128,11 +132,13 @@ const onUploadKeydown = (evt) => {
128132 }
129133} ;
130134
131- const onUploadCloseClick = ( ) => {
135+ const onUploadCloseButtonClick = ( ) => {
132136 closeUpload ( ) ;
133137} ;
134138
135139const onFormSubmit = async ( data ) => {
140+ toggleSubmitButton ( true ) ;
141+
136142 try {
137143 const request = await sendData ( data ) ;
138144
@@ -143,6 +149,8 @@ const onFormSubmit = async (data) => {
143149 } catch {
144150 showAlert ( 'error' ) ;
145151 }
152+
153+ toggleSubmitButton ( false ) ;
146154} ;
147155
148156const onSliderUpdate = ( ) => {
@@ -188,7 +196,6 @@ const checkEffectSliderVisibility = (effect) => {
188196} ;
189197
190198const clearForm = ( ) => {
191- uploadFile . value = '' ;
192199 uploadPreview . style = '' ;
193200 uploadForm . reset ( ) ;
194201 currentEffect = 'none' ;
@@ -205,10 +212,10 @@ const openUpload = () => {
205212 uploadOverlay . classList . remove ( 'hidden' ) ;
206213 checkEffectSliderVisibility ( 'none' ) ;
207214
208- document . addEventListener ( 'keydown' , onUploadKeydown ) ;
215+ document . addEventListener ( 'keydown' , onDocumentKeydownUpload ) ;
209216} ;
210217
211- const initUpload = ( ) => {
218+ const setUpload = ( ) => {
212219 uploadFile . addEventListener ( 'change' , openUpload ) ;
213220
214221 uploadScaleControlSmaller . addEventListener ( 'click' , ( ) => {
@@ -219,7 +226,7 @@ const initUpload = () => {
219226 onScaleControlClick ( ScaleDirection . INCREASE ) ;
220227 } ) ;
221228
222- uploadCloseButton . addEventListener ( 'click' , onUploadCloseClick ) ;
229+ uploadCloseButton . addEventListener ( 'click' , onUploadCloseButtonClick ) ;
223230 uploadEffects . addEventListener ( 'change' , ( ) => {
224231 checkEffectSliderVisibility ( uploadForm [ 'effect' ] . value ) ;
225232 } ) ;
@@ -231,7 +238,7 @@ function closeUpload() {
231238 body . classList . remove ( 'modal-open' ) ;
232239 uploadOverlay . classList . add ( 'hidden' ) ;
233240
234- document . removeEventListener ( 'keydown' , onUploadKeydown ) ;
241+ document . removeEventListener ( 'keydown' , onDocumentKeydownUpload ) ;
235242}
236243
237- export { initUpload , onFormSubmit } ;
244+ export { setUpload , onFormSubmit } ;
0 commit comments