UNPKG

starkon

Version:

Complete Next.js boilerplate with authentication, i18n & CLI - Create production-ready apps instantly

84 lines (66 loc) 2.19 kB
'use client' import { useRouter } from 'next/navigation' import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useAuth } from '@/providers/AuthProvider' import AuthApiService from '@/lib/services/authApiService' type VerificationStatus = 'verifying' | 'success' | 'error' interface VerificationMessage { title: string description: string } /** * Custom hook for email verification logic */ export function useEmailVerification(token: string | null) { const router = useRouter() const { t } = useTranslation() const { checkAuth } = useAuth() const [message, setMessage] = useState<VerificationMessage>({ title: '', description: '', }) const [status, setStatus] = useState<VerificationStatus>('verifying') useEffect(() => { if (!token) { setStatus('error') setMessage({ title: t('auth.emailVerification.error.invalidLink.title'), description: t('auth.emailVerification.error.invalidLink.description'), }) return } verifyEmailToken(token) // eslint-disable-next-line react-hooks/exhaustive-deps }, [token, t]) const verifyEmailToken = async (token: string) => { try { const response = await AuthApiService.verifyEmail(token) if (response.success) { setStatus('success') setMessage({ title: t('auth.emailVerification.success.title'), description: t('auth.emailVerification.success.description'), }) await checkAuth() // Redirect to dashboard after 2 seconds setTimeout(() => { router.push('/dashboard') }, 2000) } else { throw new Error(response.message || t('auth.emailVerification.error.defaultError')) } } catch (error) { setStatus('error') setMessage({ title: t('auth.emailVerification.error.verificationFailed.title'), description: error instanceof Error ? error.message : t('auth.emailVerification.error.verificationFailed.description'), }) } } const handleReturnToLogin = () => { router.push('/login') } return { status, message, handleReturnToLogin } }