import { Button } from "@/components/ui/button"; import { Input } from "../components/input"; import { login } from "@/shared/api/auth"; import { saveToken } from "@/shared/token"; import { useNavigate } from "react-router"; import { useState } from "react"; import { Spinner } from "@/components/ui/spinner"; import { ApiError } from "@/shared/api"; export const LoginTab = () => { const navigate = useNavigate(); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); const loginAction = async ( formData: FormData, e: React.FormEvent, ) => { e.preventDefault(); setLoading(true); const email = formData.get("email"); const password = formData.get("password"); if (!email || !password) { setError("Неверное имя пользователя или пароль"); setLoading(false); return; } try { const token = await login({ email: email.toString(), password: password.toString(), }); saveToken(token.token); navigate("/"); } catch (e) { if (e instanceof ApiError && (e.status === 400 || e.status === 401)) { setError("Неверное имя пользователя или пароль"); } else { setError("Произошла непредвиденная ошибка"); } } setLoading(false); }; return (
loginAction(new FormData(e.currentTarget), e)} >
{error && {error}}
); };