'use client'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { FormProvider, SubmitHandler, useForm } from 'react-hook-form'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { Button } from '@gitroom/react/form/button'; import { Input } from '@gitroom/react/form/input'; import { useState, useEffect, useCallback } from 'react'; import Link from 'next/link'; type ResendInputs = { email: string; }; type ResendStatus = 'idle' | 'sent' | 'already_activated'; const COOLDOWN_SECONDS = 60; export function Activate() { const t = useT(); const fetch = useFetch(); const [loading, setLoading] = useState(false); const [status, setStatus] = useState('idle'); const [cooldown, setCooldown] = useState(0); const form = useForm(); useEffect(() => { if (cooldown <= 0) return; const timer = setInterval(() => { setCooldown((prev) => prev - 1); }, 1000); return () => clearInterval(timer); }, [cooldown]); const resetToForm = useCallback(() => { setStatus('idle'); setCooldown(COOLDOWN_SECONDS); }, []); const onSubmit: SubmitHandler = async (data) => { setLoading(true); try { const response = await fetch('/auth/resend-activation', { method: 'POST', body: JSON.stringify(data), }); const result = await response.json(); if (result.success) { setStatus('sent'); setCooldown(COOLDOWN_SECONDS); } else if (result.message === 'Account is already activated') { setStatus('already_activated'); } else { form.setError('email', { message: result.message || t('failed_to_resend', 'Failed to resend activation email'), }); } } catch (e) { form.setError('email', { message: t('error_occurred', 'An error occurred. Please try again.'), }); } finally { setLoading(false); } }; return (

{t('activate_your_account', 'Activate your account')}

{t('thank_you_for_registering', 'Thank you for registering!')}
{t( 'please_check_your_email_to_activate_your_account', 'Please check your email to activate your account.' )}

{t('didnt_receive_email', "Didn't receive the email?")}

{status === 'sent' ? (
{t( 'activation_email_sent', 'Activation email has been sent! Please check your inbox.' )}
{cooldown > 0 ? (

{t('resend_available_in', 'You can resend in')} {cooldown}s

) : ( )}
) : status === 'already_activated' ? (
{t( 'account_already_activated', 'Great news! Your account is already activated.' )}
) : (
)} {status !== 'already_activated' && (

{t('already_activated', 'Already activated?')}  {t('sign_in', 'Sign In')}

)}
); }