import { arktypeResolver } from "@hookform/resolvers/arktype"; import { useMutation } from "@tanstack/react-query"; import { type } from "arktype"; import { useForm } from "react-hook-form"; import { useNavigate } from "react-router"; import { toast } from "sonner"; import { loginMutation } from "~/api-client/@tanstack/react-query.gen"; import { GridBackground } from "~/components/grid-background"; import { Button } from "~/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "~/components/ui/card"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "~/components/ui/form"; import { Input } from "~/components/ui/input"; const loginSchema = type({ username: "2<=string<=50", password: "string>=1", }); type LoginFormValues = typeof loginSchema.inferIn; export default function LoginPage() { const navigate = useNavigate(); const form = useForm({ resolver: arktypeResolver(loginSchema), defaultValues: { username: "", password: "", }, }); const login = useMutation({ ...loginMutation(), onSuccess: async () => { navigate("/"); }, onError: (error) => { console.error(error); toast.error("Login failed"); }, }); const onSubmit = (values: LoginFormValues) => { login.mutate({ body: { username: values.username.trim(), password: values.password.trim(), }, }); }; return ( Welcome Back Sign in to your account
( Username )} /> ( Password )} />
); }