import { useState } from "react"; import { Link, useSearchParams, redirect } from "react-router"; import { auth } from "~/lib/auth.server"; import { authClient } from "~/lib/auth-client"; import type { Route } from "./+types/login"; import { Button } from "~/components/ui/button"; import { Input } from "~/components/ui/input"; import { Label } from "~/components/ui/label"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "~/components/ui/card"; export function meta(): Route.MetaDescriptors { return [{ title: "Sign In - Brackt" }]; } function safeRedirectTo(value: string | null): string { if (!value) return "/"; return value.startsWith("/") && !value.startsWith("//") ? value : "/"; } export async function loader(args: Route.LoaderArgs) { const session = await auth.api.getSession({ headers: args.request.headers }); if (session) { const raw = new URL(args.request.url).searchParams.get("redirectTo"); return redirect(safeRedirectTo(raw)); } return {}; } export default function LoginPage() { const [searchParams] = useSearchParams(); const redirectTo = safeRedirectTo(searchParams.get("redirectTo")); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); async function handleEmailSignIn(e: React.FormEvent) { e.preventDefault(); setError(null); setLoading(true); const form = e.currentTarget; const email = (form.elements.namedItem("email") as HTMLInputElement).value; const password = (form.elements.namedItem("password") as HTMLInputElement).value; const { error: signInError } = await authClient.signIn.email({ email, password, callbackURL: redirectTo, }); if (signInError) { setError(signInError.message ?? "Sign in failed. Please check your credentials."); setLoading(false); } } async function handleSocialSignIn(provider: "google" | "discord") { await authClient.signIn.social({ provider, callbackURL: redirectTo }); } return (
Sign in Sign in to your Brackt account
or
{error && }

Forgot password?

Don't have an account?{" "} Create one

); }