import { useForm } from "@tanstack/react-form";
import { Link, createFileRoute } from "@tanstack/react-router";
import {
AuthPageCard,
AuthPageShell,
authRedirectSearchSchema,
} from "@/client/features/auth/AuthPage";
import { getFieldError, getFormError } from "@/client/lib/forms";
import { authClient } from "@/lib/auth-client";
import { isHostedClientAuthMode } from "@/lib/auth-mode";
import { getSignInSearch, normalizeAuthRedirect } from "@/lib/auth-redirect";
import { z } from "zod";
const forgotPasswordSchema = z.object({
email: z.string().trim().email("Enter a valid email address."),
});
export const Route = createFileRoute("/forgot-password")({
validateSearch: authRedirectSearchSchema,
component: ForgotPasswordPage,
});
function ForgotPasswordPage() {
const search = Route.useSearch();
const redirectTo = normalizeAuthRedirect(search.redirect);
const isHostedMode = isHostedClientAuthMode();
const form = useForm({
defaultValues: {
email: "",
},
validators: {
onSubmit: forgotPasswordSchema,
},
onSubmit: async ({ formApi, value }) => {
try {
const redirectUrl = new URL("/reset-password", window.location.origin);
if (redirectTo !== "/")
redirectUrl.searchParams.set("redirect", redirectTo);
const result = await authClient.requestPasswordReset({
email: value.email.trim(),
redirectTo: redirectUrl.toString(),
});
if (result.error) {
formApi.setErrorMap({
onSubmit: {
form: result.error.message || "We couldn't send the reset email.",
fields: {},
},
});
return;
}
} catch {
formApi.setErrorMap({
onSubmit: {
form: "We couldn't send the reset email right now. Please try again.",
fields: {},
},
});
}
},
});
return (
{error}
) : null}{errorMessage}
) : null} )} ); }} ); }