1
0
Fork 0
freesewing/sites/shared/components/buttons/email-valid-button.mjs

55 lines
1.6 KiB
JavaScript
Raw Normal View History

2023-05-05 19:56:51 +02:00
import { useContext } from 'react'
import { validateEmail, validateTld } from 'site/utils.mjs'
import { Spinner } from 'shared/components/spinner.mjs'
import { useTranslation } from 'next-i18next'
import { EmailIcon, RightIcon, WarningIcon } from 'shared/components/icons.mjs'
import { FlexButtonText } from './flex-button-text.mjs'
2023-05-05 19:56:51 +02:00
// Context
import { LoadingContext } from 'shared/context/loading-context.mjs'
2023-05-05 19:56:51 +02:00
export const EmailValidButton = ({ email, validText, invalidText, btnProps = {} }) => {
// Context
const { loading } = useContext(LoadingContext)
const { t } = useTranslation(['signup'])
const emailValid = (validateEmail(email) && validateTld(email)) || false
return (
<button
style={{
backgroundColor: emailValid ? '' : 'hsl(var(--wa) / var(--tw-border-opacity))',
opacity: emailValid ? 1 : 0.8,
}}
className={`btn mt-4 capitalize w-full
2023-05-05 19:56:51 +02:00
${emailValid ? (loading ? 'btn-accent' : 'btn-primary') : 'btn-warning'}`}
tabIndex="-1"
role="button"
aria-disabled={!emailValid}
{...btnProps}
>
<FlexButtonText>
{emailValid ? (
2023-05-05 19:56:51 +02:00
loading ? (
<>
<Spinner />
<span>{t('processing')}</span>
<Spinner />
</>
) : (
<>
<EmailIcon />
<span>{validText}</span>
<RightIcon />
</>
)
) : (
<>
<EmailIcon />
<span>{invalidText}</span>
<WarningIcon />
</>
)}
</FlexButtonText>
</button>
)
}