@@ -1547,6 +1547,14 @@ const DynamicForm = ({
15471547 }
15481548 }
15491549
1550+ // Protect username from being updated if it's disabled
1551+ // Preserve the existing username value if username field is disabled
1552+ const isUsernameDisabled = formUiSchema ?. username ?. [ 'ui:disabled' ] === true ;
1553+ if ( isUsernameDisabled && prevFormData . current ?. username ) {
1554+ // Keep the existing username value when username field is disabled
1555+ formData . username = prevFormData . current . username ;
1556+ }
1557+
15501558 prevFormData . current = formData ;
15511559 // console.log('Form data changed:', formData);
15521560 // live error
@@ -1589,16 +1597,40 @@ const DynamicForm = ({
15891597 const prevNameRef = useRef ( { firstName : '' , lastName : '' } ) ;
15901598
15911599 const handleFirstLastNameBlur = async ( id : any , value : any ) => {
1600+ // Extract field name from id (RJSF uses formats like "root_firstName", "root.lastName", or just "firstName")
1601+ // Handle different ID formats: "root_firstName", "root.firstName", "firstName", etc.
1602+ let fieldName = '' ;
1603+ if ( id ) {
1604+ // Remove "root_" prefix if present
1605+ fieldName = id . replace ( / ^ r o o t [ _ . ] / , '' ) . replace ( / ^ r o o t / , '' ) ;
1606+ // Handle nested paths like "root.firstName" -> "firstName"
1607+ const parts = fieldName . split ( '.' ) ;
1608+ fieldName = parts [ parts . length - 1 ] ;
1609+ }
1610+
1611+ // Only proceed if the blurred field is firstName or lastName
1612+ if ( fieldName !== 'firstName' && fieldName !== 'lastName' ) {
1613+ return ;
1614+ }
1615+
15921616 if (
15931617 formData ?. firstName !== undefined &&
15941618 formData ?. lastName !== undefined &&
15951619 type === 'learner'
15961620 ) {
1597- // Only update if firstName or lastName changed
1598- if (
1599- formData . firstName !== prevNameRef . current . firstName ||
1600- formData . lastName !== prevNameRef . current . lastName
1601- ) {
1621+ // Check if username field is disabled - don't update if disabled
1622+ const isUsernameDisabled = formUiSchema ?. username ?. [ 'ui:disabled' ] === true ;
1623+
1624+ if ( isUsernameDisabled ) {
1625+ // Username is disabled, don't update it
1626+ return ;
1627+ }
1628+
1629+ // Only update if firstName or lastName actually changed
1630+ const firstNameChanged = formData . firstName !== prevNameRef . current . firstName ;
1631+ const lastNameChanged = formData . lastName !== prevNameRef . current . lastName ;
1632+
1633+ if ( firstNameChanged || lastNameChanged ) {
16021634 const randomTwoDigit = Math . floor ( 10 + Math . random ( ) * 90 ) ;
16031635 const newUserName = `${ formData . firstName } ${ formData . lastName } ${ randomTwoDigit } ` ;
16041636 if ( formData . username !== newUserName ) {
0 commit comments