@@ -58,6 +58,8 @@ const NewRequest = () => {
58
58
const [ formData , setFormData ] = useState ( initialFormData )
59
59
const [ createRequestError , setCreateRequestError ] = useState ( undefined )
60
60
const [ createdRequestUUID , setCreatedRequestUUID ] = useState ( undefined )
61
+ const [ buttonDisabled , setButtonDisabled ] = useState ( false )
62
+ const [ formSubmitting , setFormSubmitting ] = useState ( false )
61
63
62
64
/**
63
65
* @param {object } event onChange event
@@ -80,13 +82,15 @@ const NewRequest = () => {
80
82
}
81
83
82
84
const handleSubmit = async ( event ) => {
85
+ setButtonDisabled ( true )
83
86
if ( ! event . formData ) {
84
87
// these steps are needed for requests without a dynamic form
85
88
// but error on the event resulting from the react json form
86
89
event . preventDefault ( )
87
90
event . stopPropagation ( )
88
91
setValidated ( true )
89
92
}
93
+ setFormSubmitting ( true )
90
94
91
95
if ( requestForm . billingSameAsShipping === true ) Object . assign ( requestForm . billing , requestForm . shipping )
92
96
@@ -110,7 +114,7 @@ const NewRequest = () => {
110
114
} , [ createdRequestUUID ] )
111
115
112
116
// TODO(alishaevn): use react bs placeholder component
113
- if ( isLoadingInitialRequest || ! wareID ) return < Loading wrapperClass = 'item-page mt-5' />
117
+ if ( isLoadingInitialRequest || ! wareID || formSubmitting ) return < Loading wrapperClass = 'item-page mt-5' />
114
118
115
119
if ( ! session ) {
116
120
return (
@@ -165,6 +169,7 @@ const NewRequest = () => {
165
169
defaultRequiredDate = { oneWeekFromNow }
166
170
requestForm = { requestForm }
167
171
updateRequestForm = { updateRequestForm }
172
+ buttonDisabled = { buttonDisabled }
168
173
/>
169
174
</ Form >
170
175
) : (
@@ -179,40 +184,44 @@ const NewRequest = () => {
179
184
defaultRequiredDate = { oneWeekFromNow }
180
185
requestForm = { requestForm }
181
186
updateRequestForm = { updateRequestForm }
187
+ buttonDisabled = { buttonDisabled }
182
188
/>
183
189
</ BsForm >
184
190
) }
185
191
</ div >
186
192
)
187
193
}
188
194
189
- const StandardRequestOptions = ( { defaultRequiredDate, requestForm, updateRequestForm, } ) => (
190
- < >
191
- < div className = 'row' >
192
- < div className = 'col' >
193
- < ShippingDetails
194
- backgroundColor = { requestFormHeaderBg }
195
- billingCountry = { requestForm . billing . country }
196
- shippingCountry = { requestForm . shipping . country }
197
- updateRequestForm = { updateRequestForm }
198
- />
199
- </ div >
200
- < div className = 'col' >
201
- < AdditionalInfo
202
- updateRequestForm = { updateRequestForm }
203
- defaultRequiredDate = { defaultRequiredDate }
204
- backgroundColor = { requestFormHeaderBg }
205
- />
195
+ const StandardRequestOptions = ( { buttonDisabled, defaultRequiredDate, requestForm, updateRequestForm, } ) => {
196
+ return (
197
+ < >
198
+ < div className = 'row' >
199
+ < div className = 'col' >
200
+ < ShippingDetails
201
+ backgroundColor = { requestFormHeaderBg }
202
+ billingCountry = { requestForm . billing . country }
203
+ shippingCountry = { requestForm . shipping . country }
204
+ updateRequestForm = { updateRequestForm }
205
+ />
206
+ </ div >
207
+ < div className = 'col' >
208
+ < AdditionalInfo
209
+ updateRequestForm = { updateRequestForm }
210
+ defaultRequiredDate = { defaultRequiredDate }
211
+ backgroundColor = { requestFormHeaderBg }
212
+ />
213
+ </ div >
206
214
</ div >
207
- </ div >
208
- < Button
209
- addClass = 'btn btn-primary my-4 ms-auto d-block'
210
- backgroundColor = { buttonBg }
211
- label = 'Initiate Request'
212
- type = 'submit'
213
- size = 'large'
214
- />
215
- </ >
216
- )
215
+ < Button
216
+ addClass = 'btn btn-primary my-4 ms-auto d-block'
217
+ backgroundColor = { buttonBg }
218
+ disabled = { buttonDisabled }
219
+ label = 'Initiate Request'
220
+ type = 'submit'
221
+ size = 'large'
222
+ />
223
+ </ >
224
+ )
225
+ }
217
226
218
227
export default NewRequest
0 commit comments