Skip to content

Commit 3a2e6b4

Browse files
Add error handling for newsletter subscription form
1 parent 378066d commit 3a2e6b4

File tree

2 files changed

+37
-14
lines changed

2 files changed

+37
-14
lines changed

src/theme/Footer/Layout/enhanced-footer.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,6 +1384,16 @@ html[data-theme='light'] .enhanced-footer {
13841384
font-weight: 500;
13851385
}
13861386

1387+
.newsletter-input.input-error {
1388+
border-color: #e53e3e;
1389+
}
1390+
1391+
.error-text {
1392+
margin-top: 4px;
1393+
font-size: 0.85rem;
1394+
color: #e53e3e;
1395+
}
1396+
13871397
/* Responsive Design */
13881398
@media (max-width: 1200px) {
13891399
.footer-links-grid {

src/theme/Footer/Layout/index.tsx

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export default function FooterLayout({
3030
const [email, setEmail] = useState('');
3131
const [isSubscribed, setIsSubscribed] = useState(false);
3232
const [showToast, setShowToast] = useState(false);
33+
const [error, setError] = useState("");
3334

3435
useEffect(() => {
3536
// Simulate real-time stats updates
@@ -59,21 +60,32 @@ export default function FooterLayout({
5960

6061
const handleSubscribe = (e: React.FormEvent) => {
6162
e.preventDefault();
62-
if (email) {
63-
setIsSubscribed(true);
64-
setShowToast(true);
65-
66-
// Hide toast after 3 seconds
67-
setTimeout(() => {
68-
setShowToast(false);
69-
}, 3000);
70-
71-
// Reset form after 3 seconds
72-
setTimeout(() => {
73-
setIsSubscribed(false);
74-
setEmail('');
75-
}, 3000);
63+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
64+
65+
if (!email) {
66+
setError("Email is required");
67+
return;
68+
}
69+
70+
if (!emailRegex.test(email)) {
71+
setError("Please enter a valid email address");
72+
return;
7673
}
74+
75+
setError("");
76+
setIsSubscribed(true);
77+
setShowToast(true);
78+
79+
// Hide toast after 3 seconds
80+
setTimeout(() => {
81+
setShowToast(false);
82+
}, 3000);
83+
84+
// Reset form after 3 seconds
85+
setTimeout(() => {
86+
setIsSubscribed(false);
87+
setEmail('');
88+
}, 3000);
7789
};
7890

7991
return (
@@ -355,6 +367,7 @@ export default function FooterLayout({
355367
>
356368
{isSubscribed ? "✓ Subscribed!" : "Subscribe Now →"}
357369
</button>
370+
{error && <p className="error-text">{error}</p>}
358371
</form>
359372
<div className="newsletter-stats">
360373
<span className="newsletter-stat">

0 commit comments

Comments
 (0)