import { ViewIcon, ViewOffIcon } from "@chakra-ui/icons" import { Button, Center, Container, FormControl, FormErrorMessage, Icon, Image, Input, InputGroup, InputRightElement, Link, useBoolean, } from "@chakra-ui/react" import { Link as RouterLink, createFileRoute, redirect, } from "@tanstack/react-router" import React from "react" import { type SubmitHandler, useForm } from "react-hook-form" import Logo from "../assets/images/fastapi-logo.svg" import type { ApiError } from "../client" import type { Body_login_login_access_token as AccessToken } from "../client/models/Body_login_login_access_token" import useAuth, { isLoggedIn } from "../hooks/useAuth" export const Route = createFileRoute("/login")({ component: Login, beforeLoad: async () => { if (isLoggedIn()) { throw redirect({ to: "/", }) } }, }) function Login() { const [show, setShow] = useBoolean() const { login } = useAuth() const [error, setError] = React.useState(null) const { register, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ mode: "onBlur", criteriaMode: "all", defaultValues: { username: "", password: "", }, }) const onSubmit: SubmitHandler = async (data) => { try { await login(data) } catch (err) { const errDetail = (err as ApiError).body.detail setError(errDetail) } } return ( <> FastAPI logo {errors.username && ( {errors.username.message} )} {show ? : } {error && {error}}
Forgot password?
) } export default Login