import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { useMutation } from '@tanstack/react-query' import { toast } from 'sonner' import { useAuthStore } from '@/stores/authStore' import { authApi } from '@/api/auth' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Label } from '@/components/ui/label' export default function LoginPage() { const navigate = useNavigate() const { login } = useAuthStore() const [code, setCode] = useState('') const [step, setStep] = useState<'request' | 'verify'>('request') // Request code mutation const requestCodeMutation = useMutation({ mutationFn: () => authApi.requestCode(), onSuccess: (data) => { if (data.success) { toast.success('Code sent to Telegram!') setStep('verify') } else { toast.error(data.message || 'Failed to send code') } }, onError: (error: any) => { toast.error(error.response?.data?.message || 'Failed to send code') }, }) // Verify code mutation const verifyCodeMutation = useMutation({ mutationFn: (code: string) => authApi.verifyCode(code), onSuccess: (data: any) => { login(data.token, data.user) toast.success('Welcome back!') navigate('/') }, onError: (error: any) => { toast.error(error.response?.data?.message || 'Invalid code') }, }) const handleRequestCode = () => { requestCodeMutation.mutate() } const handleVerifyCode = (e: React.FormEvent) => { e.preventDefault() if (!code.trim()) { toast.error('Please enter verification code') return } verifyCodeMutation.mutate(code.trim()) } const handleBack = () => { setStep('request') setCode('') } return (
Mnemo Cards Admin {step === 'request' ? 'Click the button below to receive a verification code' : 'Enter the 6-digit code sent to admin Telegram accounts' } {step === 'request' ? (
) : (
) => setCode(e.target.value)} maxLength={6} disabled={verifyCodeMutation.isPending} />
)}
) }