-
Notifications
You must be signed in to change notification settings - Fork 196
Expand file tree
/
Copy pathSubscribe.tsx
More file actions
89 lines (79 loc) · 2.83 KB
/
Copy pathSubscribe.tsx
File metadata and controls
89 lines (79 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// import React from "react"
import { useState, useEffect } from "preact/hooks"
import MailchimpSubscribe from "react-mailchimp-subscribe"
import SubscribeSvg from "~/assets/svgs/footer/subscribe.svg?react"
import { clsx } from "~/lib"
import { t } from "i18next"
import { useI18nReady } from "~/hooks/useI18nReady"
import EmailInput from "./EmailInput.tsx"
import styles from "./Subscribe.module.css"
const url = "https://gmail.us14.list-manage.com/subscribe/post?u=3b1d822eb27b2fa64d82d430b&id=0b4603244e"
const isValidEmail = (email: string): boolean => {
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
return emailRegex.test(email)
}
export default function Subscribe(props) {
const [email, setEmail] = useState("")
const [customMessage, setCustomMessage] = useState("")
const [emailValid, setEmailValid] = useState(false)
const isReady = useI18nReady(props.lang)
useEffect(() => {
setCustomMessage("")
setEmailValid(isValidEmail(email))
}, [email])
const handleSubmit = (subscribe) => {
if (!email) {
setCustomMessage(t("landing.NewsletterCTA.pleaseInsertEmail"))
} else if (!emailValid) {
setCustomMessage(t("landing.NewsletterCTA.correctEmail"))
} else {
subscribe({ EMAIL: email })
setEmail("")
}
}
const handleChangeEmail = (e) => {
setEmail(e.target.value)
}
if (!isReady) {
return null
}
return (
<div className={clsx(styles.container, "dark:bg-dark-highlight")}>
<div className={styles.subscribeBox}>
<span className="text-white dark:text-black bg-black dark:bg-white rounded-[50%]">
<SubscribeSvg></SubscribeSvg>
</span>
<div className={styles.copyBox}>
<div className={styles.subscribeTitle}>{t("landing.NewsletterCTA.title")}</div>
<div className={styles.subscribeText}>{t("landing.NewsletterCTA.text")}</div>
</div>
<MailchimpSubscribe
url={url}
render={({
subscribe,
status,
message,
}: {
subscribe: (data: { EMAIL: string }) => void
status: string
message: string
}) => (
<div className={styles.emailBox}>
<EmailInput
className={styles.emailInput}
value={email}
onChange={handleChangeEmail}
onClick={() => handleSubmit(subscribe)}
onEnter={() => handleSubmit(subscribe)}
placeholder={t("landing.NewsletterCTA.placeholder")}
end={status === "success"}
/>
{customMessage && <div className={styles.errorMessage}>{customMessage}</div>}
{status === "error" && <div className={styles.errorMessage}>{t(message)}</div>}
</div>
)}
/>
</div>
</div>
)
}