1+ /* eslint-disable sonarjs/no-identical-functions */
12/* eslint-disable react/no-unescaped-entities */
23/* eslint-disable max-lines-per-function */
34/* eslint-disable sonarjs/cognitive-complexity */
@@ -283,8 +284,11 @@ const query = graphql`
283284` ;
284285
285286export const UpdatesPage = ( ) => {
286- const [ selectValue ] = useState ( null ) ;
287+ const [ selectValue , setSelectValue ] = useState ( false ) ;
288+ const [ inputValue , setInputValue ] = useState ( false ) ;
287289 const [ enteState ] = useState ( '' ) ;
290+ const [ formValidate , setFormValidate ] = useState ( false ) ;
291+
288292 const {
289293 site : {
290294 siteMetadata : { apiUrl } ,
@@ -299,9 +303,24 @@ export const UpdatesPage = () => {
299303
300304 const classes = useStyles ( ) ;
301305
302- useEffect ( ( ) => { } , [ selectValue ] ) ;
306+ useEffect ( ( ) => {
307+ const inputArr = document . querySelectorAll ( '#updates-form [data-form="true"]' ) ;
303308
304- const onSubmit = async ( data , event ) => {
309+ const inputHandler = ( ) => {
310+ const currentInputArr = document . querySelectorAll ( '#updates-form [data-form="true"]' ) ;
311+ const inputValue = Array . prototype . slice . call ( currentInputArr ) . every ( ( input ) => input . value !== '' ) ;
312+ console . log ( 'every' , inputValue ) ;
313+ if ( inputValue ) {
314+ setInputValue ( true ) ;
315+ }
316+ } ;
317+
318+ inputArr . forEach ( ( input ) => {
319+ input . addEventListener ( 'input' , inputHandler ) ;
320+ } ) ;
321+ } , [ ] ) ;
322+
323+ const onSubmit = async ( data ) => {
305324 console . log ( data ) ;
306325 Object . keys ( data ) . map ( function ( key ) {
307326 if ( data [ key ] === undefined ) {
@@ -368,11 +387,6 @@ export const UpdatesPage = () => {
368387 . then ( ( ) => {
369388 spinner . classList . add ( 'hidden' ) ;
370389 announce ( 'Invio in corso' ) ;
371- event . target . reset ( ) ;
372- const selectArr = document . querySelectorAll ( '.select [class$="-singleValue"]' ) ;
373- selectArr . forEach ( ( singleValue ) => ( singleValue . innerHTML = '' ) ) ;
374- const inputArr = document . querySelectorAll ( '#updates-form input' ) ;
375- inputArr . forEach ( ( input ) => ( input . value = '' ) ) ;
376390 } ) ;
377391 } ;
378392
@@ -388,6 +402,19 @@ export const UpdatesPage = () => {
388402 announce ( 'Pagina caricata ' + content . name ) ;
389403 } , [ ] ) ;
390404
405+ const onChangeSelectHandler = ( e ) => {
406+ if ( e . value !== '' ) {
407+ setSelectValue ( true ) ;
408+ } else {
409+ setSelectValue ( false ) ;
410+ }
411+ } ;
412+
413+ useEffect ( ( ) => {
414+ inputValue && selectValue ? setFormValidate ( true ) : setFormValidate ( false ) ;
415+ console . log ( 'formValidate' , formValidate ) ;
416+ } , [ selectValue , inputValue , formValidate ] ) ;
417+
391418 const {
392419 selectRepresent,
393420 selectInQuanto,
@@ -464,6 +491,7 @@ export const UpdatesPage = () => {
464491 type = "text"
465492 id = "address"
466493 aria-required = "true"
494+ data-form = "true"
467495 autocomplete = "email"
468496 { ...field }
469497 className = "mb-0"
@@ -483,12 +511,12 @@ export const UpdatesPage = () => {
483511 control = { control }
484512 name = "representative"
485513 rules = { { required : true } }
486- render = { ( { field : { onChange , value } } ) => (
514+ render = { ( { field : { onChangeSelect , value } } ) => (
487515 < Select
488516 value = { value }
489517 id = "represent-select"
490518 inputId = "represent-select-input"
491- onChange = { onChange }
519+ onChange = { ( onChangeSelect , onChangeSelectHandler ) }
492520 onFocus = { onFocus }
493521 options = { selectRepresent }
494522 placeholder = { selectPlaceholder }
@@ -568,6 +596,7 @@ export const UpdatesPage = () => {
568596 aria-required = "true"
569597 aria-labelledby = { errors . ente && 'error-enteName' }
570598 aria-invalid = { errors . ente && 'true' }
599+ data-form = "true"
571600 { ...field }
572601 id = "enteName"
573602 />
@@ -594,12 +623,12 @@ export const UpdatesPage = () => {
594623 message : requiredLabel ,
595624 } ,
596625 } }
597- render = { ( { field : { onChange , value } } ) => (
626+ render = { ( { field : { onChangeSelect , value } } ) => (
598627 < Select
599628 value = { value }
600629 id = "enteSelect"
601630 inputId = "enteSelect-input"
602- onChange = { onChange }
631+ onChange = { onChangeSelect }
603632 options = { selectInQuanto }
604633 aria-describedby = "mandatory-label"
605634 placeholder = { selectPlaceholder }
@@ -626,7 +655,7 @@ export const UpdatesPage = () => {
626655 </ a >
627656 </ p >
628657 < div className = { `${ classes . submitContainer } d-flex mt-5` } >
629- < Button color = "primary" type = "submit" form = "updates-form" >
658+ < Button color = "primary" type = "submit" form = "updates-form" disabled = { ! formValidate ? true : false } >
630659 { sendButtonLabel }
631660 </ Button >
632661 < img className = { classes . spinner } src = "/assets/spinner.gif" alt = "" > </ img >
0 commit comments