import { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import Layout from '../components/Layout'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { toast } from '@/hooks/use-toast'; import { Eye, EyeOff } from 'lucide-react'; const LoginPage = () => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [showPassword, setShowPassword] = useState(false); const { login } = useAuth(); const navigate = useNavigate(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(''); try { await login(email, password); toast({ title: "Welcome back!", description: "You've been successfully logged in.", }); navigate('/dashboard'); } catch (err: any) { console.error('Login error:', err); let errorMessage = 'Login failed. Please try again.'; if (err.message) { if (err.message.includes('Invalid login credentials')) { errorMessage = 'Invalid email or password. Please check your credentials.'; } else if (err.message.includes('Email not confirmed')) { errorMessage = 'Please check your email and confirm your account before logging in.'; } else { errorMessage = err.message; } } setError(errorMessage); } finally { setLoading(false); } }; return (
Periodicity Logo
Welcome to Periodicity Sign in to your account to continue tracking your health
{error && ( {error} )}
setEmail(e.target.value)} required />
setPassword(e.target.value)} required />

Don't have an account?{' '} Sign up here

← Back to home
); }; export default LoginPage;