@@ -3,6 +3,7 @@ import { useSearchParams } from 'next/navigation';
33import React from 'react' ;
44import { Field , Input , RefreshButton , Tag } from 'shared/components' ;
55import { form } from 'shared/form' ;
6+ import { usePrevious } from 'shared/usePrevious' ;
67import { useUrlState } from 'state-in-url/next' ;
78
89export const Form = ( {
@@ -52,8 +53,8 @@ export const Form = ({
5253 reset ( )
5354 reset ( { replace : false , scroll : true } )
5455 }
55- // eslint-disable-next-line react-hooks/exhaustive-deps
56- } , [ ] ) ;
56+ } , [ setUrl , setState , urlState , reset ] ) ;
57+
5758 const onChangeAge = React . useCallback (
5859 ( ev : React . ChangeEvent < HTMLInputElement > ) => {
5960 const val = + ev . target . value ;
@@ -89,6 +90,20 @@ export const Form = ({
8990 [ setUrl ] ,
9091 ) ;
9192
93+ // same reference
94+ const setUrlStable = React . useRef ( setUrl ) ;
95+ const setUrlPrev = usePrevious ( setUrl ) ;
96+ const setStatePrev = usePrevious ( setState ) ;
97+ const setStateStable = React . useRef ( setState ) ;
98+
99+ const [ isError , setIsError ] = React . useState ( false ) ;
100+ const isInit = setUrlPrev
101+ const isEqual = ( setUrlStable . current !== setUrlPrev || setUrlPrev !== setUrl || setStateStable . current !== setState || setStatePrev !== setState )
102+ if ( isInit && isEqual && ! isError ) {
103+ setIsError ( true )
104+ }
105+ if ( isError ) return null ;
106+
92107 return (
93108 < div className = { className } >
94109 < div className = "flex-1 border border-grey rounded-md p-4 shadow-md" >
0 commit comments