import { useState } from "react"; import { useForm } from "react-hook-form"; import { Settings } from "lucide-react"; import { SettingsDialog } from "@/components/settings-dialog"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { Link } from "react-router-dom"; import { useLogin } from "@/hooks/use-auth"; import { useConfig } from "@/hooks/useConfig"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { ApiError } from "@/lib/api"; import { toast } from "sonner"; import { useTranslation } from "react-i18next"; const loginSchema = z.object({ email: z.string().email("Invalid email address"), password: z.string().min(8, "Password must be at least 8 characters"), }); type LoginFormValues = z.infer; export default function LoginPage() { const { mutate: login, isPending } = useLogin(); const { data: config } = useConfig(); const { t } = useTranslation(); const [settingsOpen, setSettingsOpen] = useState(false); const form = useForm({ resolver: zodResolver(loginSchema), defaultValues: { email: "", password: "" }, }); const onSubmit = (data: LoginFormValues) => { login(data, { onError: (error: any) => { if (error instanceof ApiError) { toast.error(error.message); } else { toast.error(t("Failed to login")); } }, }); }; return (
{t("Welcome back")} {t("Enter your email to sign in to your account")}
( {t("Email")} )} /> ( {t("Password")} )} />
{config?.allow_registration !== false && (

{t("Don't have an account?")}{" "} {t("Sign up")}

)}
); }