import { type LoaderFunctionArgs } from "@remix-run/node"; import { redirect, typedjson, useTypedLoaderData } from "remix-typedjson"; import { LoginPageLayout } from "~/components/layout/LoginPageLayout"; import { Fieldset } from "~/components/ui/Fieldset"; import { isGoogleAuthSupported } from "~/services/auth.server"; import { setRedirectTo } from "~/services/redirectTo.server"; import { getUserId } from "~/services/session.server"; import { commitSession } from "~/services/sessionStorage.server"; import { requestUrl } from "~/utils/requestUrl.server"; import { env } from "~/env.server"; import { RiGoogleLine } from "@remixicon/react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "~/components/ui/card"; import { Button } from "~/components/ui"; import { Mail } from "lucide-react"; export async function loader({ request }: LoaderFunctionArgs) { const userId = await getUserId(request); if (userId) return redirect("/"); const url = requestUrl(request); const redirectTo = url.searchParams.get("redirectTo"); if (redirectTo) { const session = await setRedirectTo(request, redirectTo); return typedjson( { redirectTo, showGoogleAuth: isGoogleAuthSupported, emailLoginEnabled: env.ENABLE_EMAIL_LOGIN, }, { headers: { "Set-Cookie": await commitSession(session), }, }, ); } else { return typedjson({ redirectTo: null, showGoogleAuth: isGoogleAuthSupported, emailLoginEnabled: env.ENABLE_EMAIL_LOGIN, }); } } export default function LoginPage() { const data = useTypedLoaderData(); return ( Login to your account Create an account or login
{data.showGoogleAuth && ( )} {data.emailLoginEnabled && ( )}
); }