"use client"; import { useState } from "react"; import { createFileRoute, Link, useNavigate } from "@tanstack/react-router"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { toast } from "sonner"; import { Loader2 } from "lucide-react"; import { supabase } from "@/integrations/supabase/client"; import { translateAuthError } from "@/lib/auth-errors"; import { AuthCard } from "@/components/mika/AuthCard"; import { GoogleButton } from "@/components/mika/GoogleButton"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; type LoginSearch = { redirect?: string }; const schema = z.object({ email: z.string().email("Formato de e-mail inválido."), password: z.string().min(1, "Informe sua senha."), }); type FormValues = z.infer; export const Route = createFileRoute("/login")({ validateSearch: (search: Record): LoginSearch => ({ redirect: typeof search.redirect === "string" ? search.redirect : undefined, }), component: LoginPage, }); function LoginPage() { const { redirect } = Route.useSearch(); const navigate = useNavigate(); const [submitting, setSubmitting] = useState(false); const { register, handleSubmit, formState: { errors } } = useForm({ resolver: zodResolver(schema), }); const onSubmit = async (data: FormValues) => { setSubmitting(true); const { error } = await supabase.auth.signInWithPassword({ email: data.email, password: data.password, }); setSubmitting(false); if (error) { toast.error(translateAuthError(error.message)); return; } toast.success("Bem-vindo de volta!"); navigate({ to: (redirect as "/painel") || "/painel" }); }; return ( Não tem conta?{" "} Criar conta } >
{errors.email &&

{errors.email.message}

}
Esqueci minha senha
{errors.password &&

{errors.password.message}

}
ou
); }