@@ -12,24 +12,42 @@ import axios from 'axios';
1212import admissionConstant from './admission.constant.mjs' ;
1313
1414const Steps = ( ) => {
15- const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
15+
1616 const [ activeStep , setActiveStep ] = useState ( 0 ) ;
1717 const [ isLoading , setIsLoading ] = useState ( false ) ;
1818 const [ image , setImage ] = useState ( null ) ;
1919 const [ imageUploadSuccess , setImageUploadSuccess ] =
2020 useState ( false ) ;
21- const [ formData , setFormData ] = useState ( { } ) ;
21+
2222 const [ Avtor , setAvtor ] = useState ( null ) ;
23-
24-
25- useEffect ( ( ) => {
23+ const [ missingFields , setMissingFields ] = useState ( [ ] ) ;
24+ const [ showErrors , setShowErrors ] = useState ( false ) ;
25+
26+ const [ formData , setFormData ] = useState ( {
27+ firstName : '' ,
28+ middleName : '' ,
29+ lastName : '' ,
30+ fatherName : '' ,
31+ motherName : '' ,
32+ AadharCardNumber : '' ,
33+ email : '' ,
34+ contactNumber : '' ,
35+ dateOfBirth : '' ,
36+ gender : '' ,
37+ nationality : '' ,
38+ street : '' ,
39+ city : '' ,
40+ state : '' ,
41+ pinCode : '' ,
42+ } ) ;
43+ useEffect ( ( ) => {
2644 const savedData = sessionStorage . getItem ( 'admissionFormData' ) ;
2745 if ( savedData ) {
28- setFormData ( JSON . parse ( savedData ) ) ;
46+ setFormData ( JSON . parse ( savedData ) ) ;
2947 }
30- } , [ ] ) ;
31-
48+ } , [ ] ) ;
3249
50+
3351 let admission = useSelector ( state => state . admission . admission ) ;
3452
3553 let dispatch = useDispatch ( ) ;
@@ -40,6 +58,9 @@ const Steps = () => {
4058 ...prevData ,
4159 [ name ] : value ,
4260 } ) ) ;
61+
62+ setMissingFields ( ( prev ) => prev . filter ( ( err ) => ! err . toLowerCase ( ) . includes ( name . toLowerCase ( ) ) ) ) ;
63+
4364 } ;
4465
4566 const handleDropdownChange = ( name , value ) => {
@@ -117,6 +138,8 @@ const Steps = () => {
117138 < YourInfo
118139 handleInputChange = { handleInputChange }
119140 handleDropdownChange = { handleDropdownChange }
141+ errors = { missingFields }
142+ showErrors = { showErrors }
120143 />
121144 ) ,
122145 } ,
@@ -144,37 +167,83 @@ const Steps = () => {
144167 ] ;
145168
146169 const validateStep = ( ) => {
147- const requiredFields = [ ] ;
148-
149- if ( activeStep === 0 ) {
150- requiredFields . push ( 'firstName' , 'lastName' , 'email' ) ;
151- } else if ( activeStep === 1 ) {
152- requiredFields . push ( 'fatherName' , 'motherName' ) ;
153- } else if ( activeStep === 4 && ! image ) {
154- setIsModalOpen ( true ) ;
155- return false ;
156- }
157- //check values in formData
158- for ( let field of requiredFields ) {
159- if ( ! formData [ field ] || formData [ field ] . trim ( ) === '' ) {
160- setIsModalOpen ( true ) ;
161- return false ;
170+ const stepValidationConfig = {
171+ 0 : [
172+ 'firstName' ,
173+ 'lastName' ,
174+ 'email' ,
175+ 'fatherName' ,
176+ 'motherName' ,
177+ 'AadharCardNumber' ,
178+ 'contactNumber' ,
179+ 'dateOfBirth' ,
180+ 'gender' ,
181+ 'nationality' ,
182+ 'street' ,
183+ 'city' ,
184+ 'state' ,
185+ 'pinCode' ,
186+ ] ,
187+ 1 : [ 'Gname' , 'Grelation' , 'GcontactNumber' ] ,
188+ 2 : [ ] , // AreYouHuman step
189+ 3 : [
190+ 'tenthBoard' ,
191+ 'tenthGrade' ,
192+ 'twelfthMarks' ,
193+ 'twelfthGrade' ,
194+ ] ,
195+ 4 : [ 'university' , 'courseName' , 'mode' ] ,
196+ } ;
197+
198+ const missing = [ ] ;
199+ const requiredFields = stepValidationConfig [ activeStep ] || [ ] ;
200+
201+ for ( const field of requiredFields ) {
202+ const value = formData [ field ] ;
203+ if (
204+ value === undefined ||
205+ value === null ||
206+ ( typeof value === 'string' && value . trim ( ) === '' )
207+ ) {
208+ const formatted = field
209+ . replace ( / ( [ A - Z ] ) / g, ' $1' )
210+ . replace ( / ^ ./ , str => str . toUpperCase ( ) ) ;
211+ missing . push ( formatted ) ;
162212 }
163-
164213 }
165- //Save current changes
166- sessionStorage . setItem ( 'admissionFormData' , JSON . stringify ( formData ) ) ;
214+
215+ if ( activeStep === 4 && ! image ) {
216+ missing . push ( 'Profile Picture' ) ;
217+ }
218+
219+ sessionStorage . setItem (
220+ 'admissionFormData' ,
221+ JSON . stringify ( formData ) ,
222+ ) ;
167223
168- return true ;
224+
225+
226+ setMissingFields ( missing ) ;
227+ return missing . length === 0 ;
169228
170229 } ;
171230
172- const handleNext = ( ) => {
231+ const handleNext = ( e ) => {
232+ e . preventDefault ( ) ; // Prevent accidental page reload
233+ setShowErrors ( true ) ;
173234 if ( validateStep ( ) ) {
174235 if ( activeStep < steps . length - 1 ) {
175236 setActiveStep ( prevStep => prevStep + 1 ) ;
237+ setShowErrors ( false ) ;
176238 }
177- }
239+ } else {
240+ // setIsModalOpen(true);
241+
242+ const firstErrorField = document . querySelector ( '.input-error' ) ;
243+ firstErrorField ?. scrollIntoView ( { behavior : 'smooth' , block : 'center' } ) ;
244+ }
245+
246+
178247 } ;
179248
180249 const handlePrevious = ( ) => {
@@ -303,13 +372,13 @@ const Steps = () => {
303372 </ div >
304373 ) }
305374 </ form >
306-
307- < StepValidateModal
375+ { /* <StepValidateModal
308376 isOpen={isModalOpen}
309377 onClose={() => setIsModalOpen(false)}
310378 title='Incomplete Form'
311379 message='Please fill in all fields before proceeding!'
312- />
380+ missingFields={missingFields}
381+ /> */ }
313382 </ >
314383 ) ;
315384} ;
0 commit comments