From 99d84cbb3b261be760f98c67e06ff325c12caf51 Mon Sep 17 00:00:00 2001 From: Daniel K Date: Tue, 23 May 2023 09:36:15 -0700 Subject: [PATCH] (fix) error handling on password reset page --- src/modules/Password/reset/request.tsx | 35 +++++++++++++++++++------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/modules/Password/reset/request.tsx b/src/modules/Password/reset/request.tsx index 759fca0f8..ccd178cdc 100644 --- a/src/modules/Password/reset/request.tsx +++ b/src/modules/Password/reset/request.tsx @@ -1,12 +1,13 @@ import ButtonField from "@/components/generic/button-field"; import SectionLayout from "@/layouts/section-layout"; import { useRouter } from "next/dist/client/router"; -import LoadingProvider from "@/components/loader"; +import LoadingProvider, { Loading } from "@/components/loader"; import React, { FormEvent, useRef } from "react"; import { useUserMutation } from "@/context/user"; import { p } from "@/lib/client"; import Head from "next/head"; import Link from "next/link"; +import { isNone } from "@/lib/helper"; export { getServerSideProps } from '@/lib/data-fetching/metadata'; @@ -16,16 +17,24 @@ export default function Page(pageProps: any) { const Component: React.FC<{}> = () => { const router = useRouter(); const email = useRef(null); - const { requestPasswordReset: { isLoading, mutateAsync } } = useUserMutation(); + const [errors, setErrors] = React.useState([]); + const { loading, setLoading } = React.useContext(Loading); + const { requestPasswordReset } = useUserMutation(); const onSubmit = async (e: FormEvent) => { e.preventDefault(); - const { request_password_reset } = await mutateAsync({ - email: email.current?.value as string, - redirect_url: location.origin + p`/password/reset` - }); - - if ((request_password_reset?.errors || []).length === 0) router.push(`/password/reset/sent`) + try { + setLoading(true); + await requestPasswordReset.mutateAsync({ + email: email.current?.value as string, + redirect_url: location.origin + p`/password/reset` + }); + router.push(`/password/reset/sent`) + } catch (error: any) { + const _error = error.data?.errors || error; + setErrors(Array.isArray(_error) ? _error : [_error]); + } + setLoading(false); }; return ( @@ -35,6 +44,10 @@ export default function Page(pageProps: any) {

Forgotten your password?

Enter your email address below, and we’ll email instructions for setting a new one.

+ {(errors as any[]).filter(error => isNone(error.field)).map(({ message }, index) => ( +

{message}

+ ))} +
@@ -43,8 +56,12 @@ export default function Page(pageProps: any) {
+ {errors.filter(error => error.field === 'email').map(({ messages }) => ( + messages.map((message: any, index: number) =>

{message}

) + ))} + Reset my password