Skip to content

Commit be3d961

Browse files
extracted common code into a custom hook,removed commnets
1 parent 3aa1ac8 commit be3d961

File tree

3 files changed

+25
-31
lines changed

3 files changed

+25
-31
lines changed

client/modules/IDE/hooks/custom-hooks.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,22 @@ export const useEventListener = (
6868
document.addEventListener(event, callback, useCapture);
6969
return () => document.removeEventListener(event, callback, useCapture);
7070
}, list);
71+
72+
// Usage: usePreserveFormValuesOnLanguageChange(formRef, language)
73+
// This hook ensures that form values are preserved when the language changes.
74+
// Pass a ref to the form instance and the current language as arguments.
75+
export const usePreserveFormValuesOnLanguageChange = (formRef, language) => {
76+
useEffect(() => {
77+
const form = formRef.current;
78+
if (!form) return;
79+
80+
const { values } = form.getState();
81+
form.reset();
82+
83+
Object.keys(values).forEach((field) => {
84+
if (values[field]) {
85+
form.change(field, values[field]);
86+
}
87+
});
88+
}, [language]);
89+
};

client/modules/User/components/LoginForm.jsx

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import React, { useEffect, useRef, useState } from 'react';
1+
import React, { useRef, useState } from 'react';
22
import { useTranslation } from 'react-i18next';
33
import { Form, Field } from 'react-final-form';
44
import { useDispatch } from 'react-redux';
55
import { AiOutlineEye, AiOutlineEyeInvisible } from 'react-icons/ai';
66
import Button from '../../../common/Button';
77
import { validateLogin } from '../../../utils/reduxFormUtils';
88
import { validateAndLoginUser } from '../actions';
9+
import { usePreserveFormValuesOnLanguageChange } from '../../IDE/hooks/custom-hooks';
910

1011
function LoginForm() {
1112
const { t, i18n } = useTranslation();
@@ -20,21 +21,8 @@ function LoginForm() {
2021
const handleVisibility = () => {
2122
setShowPassword(!showPassword);
2223
};
23-
useEffect(() => {
24-
const form = formRef.current;
25-
if (!form) return;
2624

27-
const { values } = form.getState(); // store current form touched values
28-
form.reset();
29-
30-
// Restore prev form values and trigger validation
31-
Object.keys(values).forEach((field) => {
32-
if (values[field]) {
33-
// Only reapply touched values
34-
form.change(field, values[field]);
35-
}
36-
});
37-
}, [i18n.language]);
25+
usePreserveFormValuesOnLanguageChange(formRef, i18n.language);
3826

3927
return (
4028
<Form

client/modules/User/components/SignupForm.jsx

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useRef, useState } from 'react';
1+
import React, { useRef, useState } from 'react';
22
import { useTranslation } from 'react-i18next';
33
import { Form, Field } from 'react-final-form';
44
import { useDispatch } from 'react-redux';
@@ -7,6 +7,7 @@ import { validateSignup } from '../../../utils/reduxFormUtils';
77
import { validateAndSignUpUser } from '../actions';
88
import Button from '../../../common/Button';
99
import apiClient from '../../../utils/apiClient';
10+
import { usePreserveFormValuesOnLanguageChange } from '../../IDE/hooks/custom-hooks';
1011

1112
function asyncValidate(fieldToValidate, value) {
1213
if (!value || value.trim().length === 0) {
@@ -49,21 +50,7 @@ function SignupForm() {
4950
const handleConfirmVisibility = () => {
5051
setShowConfirmPassword(!showConfirmPassword);
5152
};
52-
useEffect(() => {
53-
const form = formRef.current;
54-
if (!form) return;
55-
56-
const { values } = form.getState(); // store current form touched values
57-
form.reset();
58-
59-
// Restore prev form values and trigger validation
60-
Object.keys(values).forEach((field) => {
61-
if (values[field]) {
62-
// Only reapply touched values
63-
form.change(field, values[field]);
64-
}
65-
});
66-
}, [i18n.language]);
53+
usePreserveFormValuesOnLanguageChange(formRef, i18n.language);
6754

6855
return (
6956
<Form

0 commit comments

Comments
 (0)