"use client" import React, { useState } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; export const LoginForm = () => { const router = useRouter(); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const validateForm = () => { if (!username || !password) { setError('Username and password are required'); return false; } setError(''); return true; }; const handleSubmit = async (event: any) => { event.preventDefault(); if (!validateForm()) return; setLoading(true); const formDetails = new URLSearchParams(); formDetails.append('username', username); formDetails.append('password', password); try { const response = await fetch(`${process.env.NEXT_PUBLIC_BACKEND_URL!}/token`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: formDetails, }); setLoading(false); if (response.ok) { const data = await response.json(); window.localStorage.setItem('token', data.access_token); router.push('/chat'); // navigate('/protected'); } else { const errorData = await response.json(); setError(errorData.detail || 'Authentication failed!'); } } catch (error) { setLoading(false); setError('An error occurred. Please try again later.'); } }; return ( <>
logo SurfSense

Sign in to your account

setUsername(e.target.value)} className="bg-gray-50 border border-gray-300 text-gray-900 rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="name" />
setPassword(e.target.value)} className="bg-gray-50 border border-gray-300 text-gray-900 rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" />

Don’t have an account yet? Sign up

{error &&

{error}

}
); }