@@ -219,7 +219,7 @@ class UserProfileAdd extends Component {
219219 value = { lastName }
220220 onChange = { ( e ) => this . handleUserProfile ( e ) }
221221 placeholder = "Last Name"
222- invalid = { ! ! ( this . state . formSubmitted && this . state . formErrors . lastName ) }
222+ invalid = { this . state . formSubmitted && ( ! ! this . state . formErrors . lastName || lastName . length < 2 ) }
223223 className = { darkMode ? 'bg-darkmode-liblack text-light border-0' : '' }
224224 />
225225 { this . state . formSubmitted && this . state . formErrors . lastName && (
@@ -747,6 +747,9 @@ class UserProfileAdd extends Component {
747747 return false ;
748748 } else if ( firstLength && lastLength && phone . length >= 9 ) {
749749 return true ;
750+ } else if ( this . state . userProfile . lastName . length < 2 ) {
751+ toast . error ( 'Last Name must be at least 2 characters long' ) ;
752+ return false ;
750753 } else {
751754 toast . error ( 'Please fill all the required fields' ) ;
752755 return false ;
@@ -894,62 +897,46 @@ class UserProfileAdd extends Component {
894897 this . props . userCreated ( ) ;
895898 } )
896899 . catch ( err => {
897- if ( err . response ?. data ?. type ) {
898- switch ( err . response . data . type ) {
900+ const res = err . response ;
901+ const status = res ?. status ;
902+ const data = res ?. data || { } ;
903+
904+ if ( ! res ) {
905+ toast . error ( `Network error: ${ err . message } ` ) ;
906+ return ;
907+ }
908+
909+ // Handle Mongoose validation error cleanup
910+ if ( data ?. errors && typeof data . errors === 'object' ) {
911+ const firstErrorKey = Object . keys ( data . errors ) [ 0 ] ;
912+ const firstError = data . errors [ firstErrorKey ] ;
913+ const fieldName = firstError . path || firstErrorKey ;
914+ const message = firstError . message ;
915+
916+ toast . error ( `${ fieldName . charAt ( 0 ) . toUpperCase ( ) + fieldName . slice ( 1 ) } : ${ message } ` ) ;
917+ return ;
918+ }
919+
920+ // Fallback to known type-based errors
921+ if ( data . type ) {
922+ switch ( data . type ) {
899923 case 'email' :
900- this . setState ( {
901- formValid : {
902- ...that . state . formValid ,
903- email : false ,
904- } ,
905- formErrors : {
906- ...that . state . formErrors ,
907- email : 'Email already exists' ,
908- } ,
909- } ) ;
910- break ;
924+ toast . error ( 'Email already exists' ) ;
925+ return ;
911926 case 'phoneNumber' :
912- this . setState ( {
913- formValid : {
914- ...that . state . formValid ,
915- phoneNumber : false ,
916- showphone : false ,
917- } ,
918- formErrors : {
919- ...that . state . formErrors ,
920- phoneNumber : 'Phone number already exists' ,
921- } ,
922- } ) ;
923- break ;
927+ toast . error ( 'Phone number already exists' ) ;
928+ return ;
924929 case 'name' :
925- if (
926- this . checkIfDuplicate ( userData . firstName , userData . lastName ) &&
927- ! allowsDuplicateName
928- ) {
929- this . setState ( {
930- popupOpen : true ,
931- } ) ;
932- }
933- break ;
930+ toast . error ( 'A user with this first and last name already exists' ) ;
931+ return ;
934932 case 'credentials' :
935- this . setState ( {
936- formValid : {
937- ...that . state . formValid ,
938- email : false ,
939- } ,
940- formErrors : {
941- ...that . state . formErrors ,
942- actualEmail : 'Actual email or password may be incorrect' ,
943- actualPassword : 'Actual email or password may be incorrect' ,
944- } ,
945- } ) ;
946- break ;
933+ toast . error ( 'Admin credentials were not accepted' ) ;
934+ return ;
947935 }
948936 }
949- toast . error (
950- err . response ?. data ?. error ||
951- 'An unknown error occurred while attempting to create this user.' ,
952- ) ;
937+
938+ // Generic fallback
939+ toast . error ( `Create failed${ status ? ` (${ status } )` : '' } : ${ data . error || 'Unknown error occurred.' } ` ) ;
953940 } ) ;
954941 }
955942 }
@@ -1059,22 +1046,24 @@ class UserProfileAdd extends Component {
10591046 } ,
10601047 } ) ;
10611048 break ;
1062- case 'lastName' :
1063- this . setState ( {
1064- userProfile : {
1065- ...userProfile ,
1066- [ event . target . id ] : event . target . value ,
1067- } ,
1068- formValid : {
1069- ...formValid ,
1070- [ event . target . id ] : event . target . value . length > 0 ,
1071- } ,
1072- formErrors : {
1073- ...formErrors ,
1074- lastName : event . target . value . length > 0 ? '' : 'Last Name required' ,
1075- } ,
1076- } ) ;
1077- break ;
1049+ case 'lastName' :
1050+ this . setState ( {
1051+ userProfile : {
1052+ ...userProfile ,
1053+ [ event . target . id ] : event . target . value ,
1054+ } ,
1055+ formValid : {
1056+ ...formValid ,
1057+ [ event . target . id ] : event . target . value . length >= 2 ,
1058+ } ,
1059+ formErrors : {
1060+ ...formErrors ,
1061+ lastName : event . target . value . length >= 2
1062+ ? ''
1063+ : 'Last Name cannot be less than 2 characters long' ,
1064+ } ,
1065+ } ) ;
1066+ break ;
10781067 case 'email' :
10791068 this . setState ( {
10801069 userProfile : {
0 commit comments