import { useEffect } from 'react' import Page from 'site/components/wrappers/page.js' import useApp from 'site/hooks/useApp.js' import useBackend from 'site/hooks/useBackend.js' import { serverSideTranslations } from 'next-i18next/serverSideTranslations' import { useTranslation } from 'next-i18next' import Layout from 'site/components/layouts/bare' import Link from 'next/link' import { useState } from 'react' import { validateEmail, validateTld } from 'shared/utils.mjs' import WelcomeWrapper from 'site/components/wrappers/welcome.js' import Spinner from 'shared/components/icons/spinner.js' import { useRouter } from 'next/router' import Popout from 'shared/components/popout.js' import { GdprProfileDetails, GdprMeasurementsDetails, namespaces as gdprNs, } from 'site/components/gdpr/details.js' import Robot from 'shared/components/robot/index.js' // Translation namespaces used on this page const namespaces = [...gdprNs] export const SignupLinkExpired = () => { const { t } = useTranslation('confirm') return ( <>

{t('signupLinkExpired')}

{t('signupAgain')} ) } const Checkbox = ({ value, name, setter, label, children = null }) => (
setter(value ? false : true)} >
setter(value ? false : true)} /> {label}
{children}
) const ConfirmSignUpPage = (props) => { const app = useApp(props) const backend = useApp(app) const { t } = useTranslation(namespaces) const router = useRouter() const loadingClasses = app.loading ? 'opacity-50' : '' const [id, setId] = useState(false) const [pDetails, setPDetails] = useState(false) const [mDetails, setMDetails] = useState(false) const [profile, setProfile] = useState(false) const [measurements, setMeasurements] = useState(false) const [openData, setOpenData] = useState(true) const [ready, setReady] = useState(false) const [error, setError] = useState(false) const createAccount = async () => { let consent = 0 if (profile) consent = 1 if (profile && measurements) consent = 2 if (profile && measurements && openData) consent = 3 if (consent > 0 && id) { const data = await backend.confirmSignup({ consent, id, ...app.loadHelpers }) if (data?.token && data?.account) { console.log(data) app.setToken(data.token) app.setAccount(data.account) router.push('/welcome') } else { // Something went wrong console.log('something went wrong') } } } useEffect(() => { // Async inside useEffect requires this approach const getConfirmation = async () => { // Get confirmation ID and check from url const [confirmationId, confirmationCheck] = router.asPath.slice(1).split('/').slice(2) // Reach out to backend const data = await backend.loadConfirmation({ id: confirmationId, check: confirmationCheck, ...app.loadHelpers, }) if (data instanceof Error) setError(true) setReady(true) setId(confirmationId) } // Call async method getConfirmation() }, []) // Short-circuit errors if (error) return ( ) const partA = ( <>
{t('profileQuestion')}
{pDetails ? : null} {profile ? ( ) : ( <>

{t('noConsentNoAccount')} )} ) const partB = ( <>
{t('peopleQuestion')}
{mDetails ? : null} {measurements ? ( ) : ( )} {mDetails && measurements ? ( ) : null} {measurements && !openData ? {t('openDataInfo')} : null} {!measurements && ( <>

{t('noConsentNoPatterns')} )} ) return ( {ready ? ( <>

{t('privacyMatters')}

{t('compliant')}

{t('consentWhyAnswer')}

{partA} {profile && partB} ) : ( )} {profile && !measurements && ( )} {profile && measurements && ( )}

FreeSewing Privacy Notice

) } export default ConfirmSignUpPage export async function getStaticProps({ locale }) { return { props: { ...(await serverSideTranslations(locale)), }, } } export async function getStaticPaths() { return { paths: [], fallback: true, } }