Skip to content

Commit ea9a39c

Browse files
authored
Merge pull request #2162 from tekdi/release-1.12.0
Release 1.12.0 to prod fix
2 parents b52f991 + 9b2e51d commit ea9a39c

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

libs/shared-lib-v2/src/DynamicForm/components/DynamicForm.tsx

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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(/^root[_.]/, '').replace(/^root/, '');
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

Comments
 (0)