"use client"; import * as React from "react"; import { baseUrl } from "../../api/baseUrl"; import { cn } from "@/lib/utils"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import ActivityIndicator from "@/components/indicators/activity-indicator"; import axios, { AxiosError } from "axios"; import { Toaster } from "@/components/ui/sonner"; import { toast } from "sonner"; import { Form, FormControl, FormField, FormItem, FormLabel, } from "@/components/ui/form"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; interface UserAuthFormProps extends React.HTMLAttributes {} export function UserAuthForm({ className, ...props }: UserAuthFormProps) { const [isLoading, setIsLoading] = React.useState(false); const formSchema = z.object({ user: z.string(), password: z.string(), }); const form = useForm>({ resolver: zodResolver(formSchema), mode: "onChange", defaultValues: { user: "", password: "", }, }); const onSubmit = async (values: z.infer) => { setIsLoading(true); try { await axios.post( "/login", { user: values.user, password: values.password, }, { headers: { "X-CSRF-TOKEN": 1, }, }, ); window.location.href = baseUrl; } catch (error) { if (axios.isAxiosError(error)) { const err = error as AxiosError; if (err.response?.status === 429) { toast.error("Exceeded rate limit. Try again later.", { position: "top-center", }); } else if (err.response?.status === 400) { toast.error("Login failed", { position: "top-center", }); } else { toast.error("Unknown error. Check logs.", { position: "top-center", }); } } else { toast.error("Unknown error. Check console logs.", { position: "top-center", }); } setIsLoading(false); } }; return (
( User )} /> ( Password )} />
); }