Add email addresses validation

[MAILPOET-2677]
This commit is contained in:
Amine Ben hammou
2020-03-12 02:39:55 +01:00
committed by Veljko V
parent adf8cc31e6
commit 3af7601ab6
5 changed files with 42 additions and 8 deletions

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { t, onChange } from 'settings/utils'; import { t, onChange, isEmail } from 'settings/utils';
import { Label, Inputs } from 'settings/components'; import { Label, Inputs } from 'settings/components';
import { useSetting, useSelector } from 'settings/store/hooks'; import { useSetting, useSelector, useAction } from 'settings/store/hooks';
import SenderEmailAddressWarning from 'common/sender_email_address_warning.jsx'; import SenderEmailAddressWarning from 'common/sender_email_address_warning.jsx';
export default function DefaultSender() { export default function DefaultSender() {
@@ -10,6 +10,12 @@ export default function DefaultSender() {
const [senderEmail, setSenderEmail] = useSetting('sender', 'address'); const [senderEmail, setSenderEmail] = useSetting('sender', 'address');
const [replyToName, setReplyToName] = useSetting('reply_to', 'name'); const [replyToName, setReplyToName] = useSetting('reply_to', 'name');
const [replyToEmail, setReplyToEmail] = useSetting('reply_to', 'address'); const [replyToEmail, setReplyToEmail] = useSetting('reply_to', 'address');
const setErrorFlag = useAction('setErrorFlag');
const invalidSenderEmail = (senderEmail && !isEmail(senderEmail));
const invalidReplyToEmail = replyToEmail && !isEmail(replyToEmail);
React.useEffect(() => {
setErrorFlag(invalidSenderEmail || invalidReplyToEmail);
}, [invalidReplyToEmail, invalidSenderEmail, setErrorFlag]);
return ( return (
<> <>
<Label <Label
@@ -34,6 +40,11 @@ export default function DefaultSender() {
value={senderEmail} value={senderEmail}
onChange={onChange(setSenderEmail)} onChange={onChange(setSenderEmail)}
/> />
{invalidSenderEmail && (
<span className="mailpoet_error_item mailpoet_error">
{t`invalidEmail`}
</span>
)}
<div className="regular-text"> <div className="regular-text">
<SenderEmailAddressWarning <SenderEmailAddressWarning
emailAddress={senderEmail} emailAddress={senderEmail}
@@ -56,6 +67,11 @@ export default function DefaultSender() {
value={replyToEmail} value={replyToEmail}
onChange={onChange(setReplyToEmail)} onChange={onChange(setReplyToEmail)}
/> />
{invalidReplyToEmail && (
<span className="mailpoet_error_item mailpoet_error">
{t`invalidEmail`}
</span>
)}
</Inputs> </Inputs>
</> </>
); );

View File

@@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import { t, onToggle, onChange } from 'settings/utils'; import { t, onChange, isEmail } from 'settings/utils';
import { useSetting, useAction } from 'settings/store/hooks'; import { useSetting, useAction } from 'settings/store/hooks';
import { Label, Inputs } from 'settings/components'; import { Label, Inputs } from 'settings/components';
@@ -8,9 +8,10 @@ export default function NewSubscriberNotifications() {
const [email, setEmail] = useSetting('subscriber_email_notification', 'address'); const [email, setEmail] = useSetting('subscriber_email_notification', 'address');
const setErrorFlag = useAction('setErrorFlag'); const setErrorFlag = useAction('setErrorFlag');
const hasError = enabled === '1' && email.trim() === ''; const hasError = enabled === '1' && email.trim() === '';
const invalidEmail = email && !isEmail(email);
React.useEffect(() => { React.useEffect(() => {
setErrorFlag(hasError); setErrorFlag(hasError || invalidEmail);
}, [hasError, setErrorFlag]); }, [hasError, invalidEmail, setErrorFlag]);
return ( return (
<> <>
@@ -42,6 +43,11 @@ export default function NewSubscriberNotifications() {
{t`pleaseFillEmail`} {t`pleaseFillEmail`}
</div> </div>
)} )}
{invalidEmail && (
<div className="mailpoet_error_item mailpoet_error">
{t`invalidEmail`}
</div>
)}
</Inputs> </Inputs>
</> </>
); );

View File

@@ -1,5 +1,7 @@
import React from 'react'; import React from 'react';
import { t, onToggle, onChange } from 'settings/utils'; import {
t, onToggle, onChange, isEmail,
} from 'settings/utils';
import { useSetting, useAction } from 'settings/store/hooks'; import { useSetting, useAction } from 'settings/store/hooks';
import { Label, Inputs } from 'settings/components'; import { Label, Inputs } from 'settings/components';
@@ -9,9 +11,10 @@ export default function StatsNotifications() {
const [email, setEmail] = useSetting('stats_notifications', 'address'); const [email, setEmail] = useSetting('stats_notifications', 'address');
const setErrorFlag = useAction('setErrorFlag'); const setErrorFlag = useAction('setErrorFlag');
const hasError = (enabled === '1' || automated === '1') && email.trim() === ''; const hasError = (enabled === '1' || automated === '1') && email.trim() === '';
const invalidEmail = email && !isEmail(email);
React.useEffect(() => { React.useEffect(() => {
setErrorFlag(hasError); setErrorFlag(hasError || invalidEmail);
}, [hasError, setErrorFlag]); }, [hasError, invalidEmail, setErrorFlag]);
return ( return (
<> <>
@@ -43,6 +46,11 @@ export default function StatsNotifications() {
{t`pleaseFillEmail`} {t`pleaseFillEmail`}
</div> </div>
)} )}
{invalidEmail && (
<div className="mailpoet_error_item mailpoet_error">
{t`invalidEmail`}
</div>
)}
</Inputs> </Inputs>
</> </>
); );

View File

@@ -9,3 +9,5 @@ export const onChange = (setter: Setter) => (e: Event) => setter(e.target.value)
export const onToggle = (setter: Setter) => (e: Event) => setter(e.target.checked ? '1' : '0'); export const onToggle = (setter: Setter) => (e: Event) => setter(e.target.checked ? '1' : '0');
export const t = ([word]: TemplateStringsArray) => MailPoet.I18n.t(word); export const t = ([word]: TemplateStringsArray) => MailPoet.I18n.t(word);
export const isEmail = (value: string): boolean => (window as any).mailpoet_email_regex.test(value);

View File

@@ -85,6 +85,8 @@
'gdprDescription': __('You need to comply with European law in regards to data privacy if you have European subscribers. Rest assured, its easy!'), 'gdprDescription': __('You need to comply with European law in regards to data privacy if you have European subscribers. Rest assured, its easy!'),
'readGuide': __('Read our guide'), 'readGuide': __('Read our guide'),
'invalidEmail': __('Invalid email address'),
'reinstallConfirmation': __('Are you sure? All of your MailPoet data will be permanently erased (newsletters, statistics, subscribers, etc.).'), 'reinstallConfirmation': __('Are you sure? All of your MailPoet data will be permanently erased (newsletters, statistics, subscribers, etc.).'),
'announcementHeader': __('Get notified when someone subscribes'), 'announcementHeader': __('Get notified when someone subscribes'),
'announcementParagraph1': __('Its been a popular feature request from our users, we hope you get lots of emails about all your new subscribers!'), 'announcementParagraph1': __('Its been a popular feature request from our users, we hope you get lots of emails about all your new subscribers!'),