// Hooks import { useState, useContext } from 'react' import { useBackend } from 'shared/hooks/use-backend.mjs' import { useTranslation } from 'next-i18next' import { useLoadingStatus } from 'shared/hooks/use-loading-status.mjs' // Context import { ModalContext } from 'shared/context/modal-context.mjs' // Dependencies import { randomString, validateEmail, validateTld, horFlexClasses, horFlexClassesNoSm, capitalize, } from 'shared/utils.mjs' import { oauthConfig } from 'shared/config/oauth.config.mjs' // Components import Link from 'next/link' import { Robot } from 'shared/components/robot/index.mjs' import { LeftIcon, HelpIcon, GoogleIcon, GitHubIcon, KeyIcon, SettingsIcon, EmailIcon, DownIcon, } from 'shared/components/icons.mjs' import { ModalWrapper } from 'shared/components/wrappers/modal.mjs' import { EmailInput } from 'shared/components/inputs.mjs' // Translation namespaces used on this page export const ns = ['susi', 'errors'] export const SignUp = () => { // Context const { setModal } = useContext(ModalContext) const backend = useBackend() const { t, i18n } = useTranslation(ns) const { setLoadingStatus, LoadingStatus } = useLoadingStatus() const [email, setEmail] = useState('') const [emailValid, setEmailValid] = useState(false) const [result, setResult] = useState(false) const [showAll, setShowAll] = useState(false) const state = '' const updateEmail = (value) => { setEmail(value) const valid = (validateEmail(value) && validateTld(value)) || false setEmailValid(valid === true ? true : false) } const signupHandler = async (evt) => { evt.preventDefault() if (!emailValid) { setLoadingStatus([true, t('susi:pleaseProvideValidEmail'), true, false]) return } let res try { res = await backend.signUp({ email, language: i18n.language, setResult, }) } catch (err) { // Here to keep the stupid linter happy console.log(err) } if (res.data.result === 'created') setResult('success') else { setModal(

An error occured while trying to process your request

{t('susi:err2')}

{t('susi:err3')}

{t('susi:contact')}
) } } const initOauth = async (provider) => { setLoadingStatus([true, t(`status:contactingBackend`)]) const result = await backend.oauthInit({ provider, language: i18n.language }) if (result.success) { setLoadingStatus([true, t(`status:contacting${provider}`)]) window.location.href = result.data.authUrl } } return (

{result ? ( result === 'success' ? ( {t('susi:emailSent')}! ) : ( An error occured while trying to process your request ) ) : ( {t('susi:createAFreeSewingAccount')} )}

{result ? ( result === 'success' ? ( <>

{t('susi:checkYourInbox')} FreeSewing.org

{t('susi:clickSignupLink')}

{t('susi:contact')}
) : ( <>

{t('susi:err2')}

{t('susi:err3')}

{t('susi:contact')}
) ) : ( <>

{t('toReceiveSignupLink')}:

emailValid} placeholder={t('susi:emailAddress')} update={updateEmail} /> {showAll ? ( <>
{['Google', 'GitHub'].map((provider) => ( ))}
{t('susi:signInHere')} {t('susi:migrateV2Account')}
) : (
)} )}
) }