import { msg } from "@lingui/core/macro" import { useLingui } from "@lingui/react" import { Trans } from "@lingui/react/macro" import { Anchor, Box, Button, Center, Container, Group, Paper, PasswordInput, Stack, Title } from "@mantine/core" import { useForm } from "@mantine/form" import { useState } from "react" import { useAsyncCallback } from "react-async-hook" import { Link, useSearchParams } from "react-router-dom" import { client, errorToStrings } from "@/app/client" import { Alert } from "@/components/Alert" import { useValidationRules } from "@/hooks/useValidationRules" import { PageTitle } from "@/pages/PageTitle" interface PasswordResetFormValues { password: string passwordConfirmation: string } export function PasswordResetPage() { const [message, setMessage] = useState("") const [searchParams] = useSearchParams() const { _ } = useLingui() const validationRules = useValidationRules() const email = searchParams.get("email") ?? "" const token = searchParams.get("token") ?? "" const form = useForm({ initialValues: { password: "", passwordConfirmation: "", }, validate: { password: validationRules.password, passwordConfirmation: (value, values) => validationRules.passwordConfirmation(value, values.password), }, validateInputOnChange: true, }) const resetPassword = useAsyncCallback(client.user.passwordResetCallback, { onSuccess: () => { setMessage(_(msg`Your password has been changed. You can now log in with your new password.`)) form.reset() }, }) const isMissingParams = !email || !token return ( <Trans>Reset Password</Trans> {resetPassword.error && ( )} {isMissingParams && ( )} {message && ( )} {!isMissingParams && !message && (
{ resetPassword.execute({ email, token, password: values.password, }) })} > New Password} placeholder={_(msg`New Password`)} {...form.getInputProps("password")} size="md" required /> Confirm Password} placeholder={_(msg`Confirm Password`)} {...form.getInputProps("passwordConfirmation")} size="md" required />
)}
Back to log in
) }