-
Notifications
You must be signed in to change notification settings - Fork 73
Description
Description
The issue arises when utilizing the validateEmail
prop with a custom validation in react-multi-email
. The library returns the email only if it passes its internal validation, thereby overwriting the custom validation. This occurs within the initialEmailAddress
function, which executes within a useEffect
with the emails
array as a dependency. Consequently, each time a user adds emails, the function fires and overrides the custom validation. The culprit is in the filter function applied to the emails
array, which forces validation via isEmailFn
, thus disregarding the custom validation.
const initialEmailAddress = (emails?: string[]) => {
if (typeof emails === 'undefined') return [];
const validEmails = emails.filter(email => isEmailFn(email));
return validEmails;
};
Fix suggestion
Move initialEmailAddress
function inside the component. right under the useStates.
And change the function to look like this:
const initialEmailAddress = (emails?: string[]) => {
if (typeof emails === 'undefined') return [];
const validEmails = emails.filter(email => validateEmail ? validateEmail(email) : isEmailFn(email));
return validEmails;
};
Steps to Reproduce
- Add the
validateEmail
prop with a custom validation. - Input an email that passes the custom validation but fails the library's isEmail validation.
- Observe that the component removes the email instead of adding it.
Expected Behavior
The component should respect the user's intention to employ a custom validation.
Actual Behavior
The component fails to respect the custom validation and instead prioritizes the library's isEmail validation.
Additional Notes
- PR created: This pull request addresses the issue where the eact-multi-email com… #171 (including test case)
- Currently, I have temporarily copied the library files to my project with the fix implemented. Once the PR is merged, I will revert to using the library directly.