import { Link, useNavigate, useParams } from '@tanstack/react-router' import { Button, Checkbox, Stack, TextInput, Text, Anchor, Alert } from "@pikku/mantine/core" import { Controller, useForm } from "react-hook-form" import { requestMagicLink } from "@/lib/auth" import { pikku } from "@/pikku/http" import { useMutation, useQueryClient } from "@tanstack/react-query" import { useI18n } from "@/context/i18n-provider" import { useState } from "react" import { asI18n } from "@pikku/react" export const StartApplication: React.FunctionComponent<{ initializing: boolean }> = ({ initializing }) => { const navigate = useNavigate() const params = useParams({ strict: false }) const lang = params.lang as string const t = useI18n() const [emailExists, setEmailExists] = useState(false) const [existingEmail, setExistingEmail] = useState('') const [hasError, setHasError] = useState(false) const { control, handleSubmit, formState: { errors }, } = useForm({ defaultValues: { email: '', fullName: '', termsAndPrivacyAccepted: false } }) const queryClient = useQueryClient() const mutation = useMutation({ mutationFn: async (data: any) => { if (data.termsAndPrivacyAccepted && data.fullName && data.email) { try { await pikku().post('/candidate', { name: data.fullName, email: data.email }); (window as any).fbq?.('trackCustom', 'StartApplication', { source: 'check_my_qualification_button', page: '/en/jobs/apply' }); queryClient.invalidateQueries({ queryKey: ['candidate'] }); navigate({ to: `/${lang}/jobs/application` }); } catch (error: any) { if (error.status === 409) { setEmailExists(true) setExistingEmail(data.email) setHasError(false) throw error } setHasError(true) setEmailExists(false) throw error } } } }) const sendMagicLinkMutation = useMutation({ mutationFn: async () => { await requestMagicLink(existingEmail) } }) return ( mutation.mutateAsync(data))}> ( )} /> ( )} /> ( {t('jobs.startapplication.termstext.prefix')}{asI18n(' ')} {t('jobs.startapplication.termstext.terms')} {asI18n(' ')} {t('jobs.startapplication.termstext.and')}{asI18n(' ')} {t('jobs.startapplication.termstext.privacy')} {asI18n(' ')} {t('jobs.startapplication.termstext.suffix')} } /> )} /> {hasError && ( {t('jobs.startapplication.error.message')} )} {emailExists && ( {t('jobs.startapplication.emailexists.message')} )} {t('jobs.startapplication.freetext')} ); }