'use client'; import { useForm, SubmitHandler, FormProvider } from 'react-hook-form'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import Link from 'next/link'; import { Button } from '@gitroom/react/form/button'; import { Input } from '@gitroom/react/form/input'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { classValidatorResolver } from '@hookform/resolvers/class-validator'; import { CreateOrgUserDto } from '@gitroom/nestjs-libraries/dtos/auth/create.org.user.dto'; import { GithubProvider } from '@gitroom/frontend/components/auth/providers/github.provider'; import { useRouter, useSearchParams } from 'next/navigation'; import { LoadingComponent } from '@gitroom/frontend/components/layout/loading'; import interClass from '@gitroom/react/helpers/inter.font'; import clsx from 'clsx'; import { GoogleProvider } from '@gitroom/frontend/components/auth/providers/google.provider'; import { useFireEvents } from '@gitroom/helpers/utils/use.fire.events'; import { useVariables } from '@gitroom/react/helpers/variable.context'; type Inputs = { email: string; password: string; company: string; providerToken: string; provider: string; }; export function Register() { const getQuery = useSearchParams(); const fetch = useFetch(); const [provider] = useState(getQuery?.get('provider')?.toUpperCase()); const [code, setCode] = useState(getQuery?.get('code') || ''); const [show, setShow] = useState(false); useEffect(() => { if (provider && code) { load(); } }, []); const load = useCallback(async () => { const { token } = await ( await fetch(`/auth/oauth/${provider?.toUpperCase() || 'LOCAL'}/exists`, { method: 'POST', body: JSON.stringify({ code }), }) ).json(); if (token) { setCode(token); setShow(true); } }, [provider, code]); if (!code && !provider) { return ; } if (!show) { return ; } return ( ); } function getHelpfulReasonForRegistrationFailure(httpCode) { switch (httpCode) { case 400: return 'Email already exists'; case 404: return 'Your browser got a 404 when trying to contact the API, the most likely reasons for this are the NEXT_PUBLIC_BACKEND_URL is set incorrectly, or the backend is not running.'; } return 'Unhandled error: ' + httpCode; } export function RegisterAfter({ token, provider, }: { token: string; provider: string; }) { const {isGeneral} = useVariables(); const [loading, setLoading] = useState(false); const router = useRouter(); const fireEvents = useFireEvents(); const isAfterProvider = useMemo(() => { return !!token && !!provider; }, [token, provider]); const resolver = useMemo(() => { return classValidatorResolver(CreateOrgUserDto); }, []); const form = useForm({ resolver, defaultValues: { providerToken: token, provider: provider, }, }); const fetchData = useFetch(); const onSubmit: SubmitHandler = async (data) => { setLoading(true); await fetchData('/auth/register', { method: 'POST', body: JSON.stringify({ ...data }), }).then((response) => { setLoading(false); if (response.status === 200) { fireEvents('register') if (response.headers.get('activate') === "true") { router.push('/auth/activate'); } else { router.push('/auth/login'); } } else { form.setError('email', { message: getHelpfulReasonForRegistrationFailure(response.status), }); } }).catch(e => { form.setError("email", { message: 'General error: ' + e.toString() + '. Please check your browser console.', }); }) }; return ( Sign Up {!isAfterProvider && (!isGeneral ? : )} {!isAfterProvider && ( OR )} {!isAfterProvider && ( <> > )} By registering you agree to our{' '} Terms of Service {' '} and{' '} Privacy Policy Create Account Already Have An Account?{' '} {' '} Sign In ); }
Already Have An Account?{' '} {' '} Sign In