@@ -38,10 +38,38 @@ const ViewStudentPage: NextPageWithBreadcrumbs = () => {
3838 const [ startDate , setStartDate ] = useState ( "" ) ;
3939 const [ endDate , setEndDate ] = useState ( "" ) ;
4040
41- const [ formError , setFormError ] = useState ( false ) ;
42- const [ helperText , setHelperText ] = useState ( "" ) ;
41+ interface errorMessage {
42+ message : string ;
43+ field : string | null ;
44+ }
45+ interface FormError {
46+ error : boolean ;
47+ errorMessage : errorMessage ;
48+ }
4349
50+ const [ formError , setFormError ] = useState < FormError > ( {
51+ error : false ,
52+ errorMessage : { message : "" , field : null } ,
53+ } ) ;
4454 const utils = trpc . useContext ( ) ;
55+
56+ // Handle error timeout
57+ useEffect ( ( ) => {
58+ let timeoutId : NodeJS . Timeout ;
59+ if ( formError . error ) {
60+ timeoutId = setTimeout ( ( ) => {
61+ setFormError ( {
62+ error : false ,
63+ errorMessage : { message : "" , field : null } ,
64+ } ) ;
65+ } , 3000 ) ;
66+ }
67+ return ( ) => {
68+ if ( timeoutId ) {
69+ clearTimeout ( timeoutId ) ;
70+ }
71+ } ;
72+ } , [ formError ] ) ;
4573 const router = useRouter ( ) ;
4674 const { student_id } = router . query ;
4775
@@ -106,21 +134,22 @@ const ViewStudentPage: NextPageWithBreadcrumbs = () => {
106134 ! alphabeticalRegex . test ( data . get ( "firstName" ) as string ) ||
107135 ! alphabeticalRegex . test ( data . get ( "lastName" ) as string )
108136 ) {
109- setFormError ( true ) ;
110- setHelperText ( "Only letters, spaces, and hyphens allowed" ) ;
111- setTimeout ( ( ) => {
112- setFormError ( false ) ;
113- setHelperText ( "" ) ;
114- } , 3000 ) ;
115-
137+ setFormError ( {
138+ error : true ,
139+ errorMessage : {
140+ message : "Only letters, spaces, and hyphens allowed" ,
141+ field : "name" ,
142+ } ,
143+ } ) ;
116144 return ;
117145 } else if ( Number ( data . get ( "grade" ) ) === 0 ) {
118- setFormError ( true ) ;
119- setHelperText ( "Grade must be between 1 and 12" ) ;
120- setTimeout ( ( ) => {
121- setHelperText ( "" ) ;
122- setFormError ( false ) ;
123- } , 3000 ) ;
146+ setFormError ( {
147+ error : true ,
148+ errorMessage : {
149+ message : "Grade must be between 1 and 12" ,
150+ field : "grade" ,
151+ } ,
152+ } ) ;
124153 return ;
125154 } else {
126155 editMutation . mutate ( {
@@ -284,8 +313,8 @@ const ViewStudentPage: NextPageWithBreadcrumbs = () => {
284313 endDate = { endDate }
285314 setStartDate = { setStartDate }
286315 onSubmit = { handleEditStudent }
287- error = { formError }
288- helperText = { helperText }
316+ error = { formError . error }
317+ helperText = { formError . errorMessage }
289318 />
290319
291320 { /* Archiving Student Modal appears when "Archive" button is pressed*/ }
0 commit comments