"use client"; import Image from "next/image"; import { FormEvent, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { api, type SessionUser } from "@/lib/api"; export function LoginForm({ variant, tenantSlug, }: { variant: "admin" | "tenant"; tenantSlug?: string; }) { const router = useRouter(); const search = useSearchParams(); const oauthError = { google_off: "Entrar com o Google está indisponível no momento.", google_unlinked: "Este e-mail Google não tem acesso à administração.", google_denied: "Não foi possível entrar com o Google.", }[search.get("error") ?? ""]; const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); async function onSubmit(event: FormEvent) { event.preventDefault(); setError(""); setLoading(true); try { const result = await api<{ user: SessionUser }>("/api/auth/login", { method: "POST", body: JSON.stringify({ email, password, tenantSlug: variant === "tenant" ? tenantSlug : undefined, }), }); const next = search.get("next"); if (result.user.kind === "platform") { router.replace(next?.startsWith("/admin") ? next : "/admin"); return; } const home = `/${result.user.tenantSlug}`; router.replace(next?.startsWith(home) ? next : home); } catch (err) { setError(err instanceof Error ? err.message : "Falha no login."); } finally { setLoading(false); } } return (
Sinka

{variant === "admin" ? "Administração" : "Operação"}

{variant === "admin" ? "Administração Sinka" : "Entrar"}

{variant === "admin" ? "Crie e acompanhe os clientes da Sinka." : "Entre com e-mail e senha, ou com o Google."}

{error || oauthError ?

{error || oauthError}

: null}

ou

Entrar com o Google
); }