From 8b423774535b939fa2135b51af78dcf59c484a60 Mon Sep 17 00:00:00 2001 From: Brandon Egger Date: Tue, 5 Sep 2023 20:03:38 -0500 Subject: [PATCH] reduce redundant trpc error handling code to function --- src/pages/resources/[id]/edit.tsx | 14 ++------------ src/pages/resources/create.tsx | 8 +++++++- src/server/api/routers/auditoryResources.ts | 2 +- src/utils/parseTRPCError.ts | 12 ++++++++++++ 4 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 src/utils/parseTRPCError.ts diff --git a/src/pages/resources/[id]/edit.tsx b/src/pages/resources/[id]/edit.tsx index e228ce7..7641bc5 100644 --- a/src/pages/resources/[id]/edit.tsx +++ b/src/pages/resources/[id]/edit.tsx @@ -13,6 +13,7 @@ import { useRouter } from "next/router"; import { HeaderFooterLayout } from "~/layouts/HeaderFooterLayout"; import { QueryWaitWrapper } from "~/components/LoadingWrapper"; import { type AuditoryResource } from "@prisma/client"; +import { parseTRPCErrorMessage } from "~/utils/parseTRPCError"; const EditResourcePage = () => { const router = useRouter(); @@ -50,18 +51,7 @@ const EditResourcePage = () => { await router.push(`/resources/${data.id}`); }, onError: (error) => { - try { - const zodErrors = JSON.parse(error.message) as unknown as { message: string }[]; - setServerError( - zodErrors - .map((error) => { - return error.message; - }) - .join(", ") - ); - } catch { - setServerError(error.message); - } + setServerError(parseTRPCErrorMessage(error.message)); }, }); diff --git a/src/pages/resources/create.tsx b/src/pages/resources/create.tsx index 7b40181..454d26a 100644 --- a/src/pages/resources/create.tsx +++ b/src/pages/resources/create.tsx @@ -15,6 +15,7 @@ import { } from "~/components/admin/resources/form"; import { HeaderFooterLayout } from "~/layouts/HeaderFooterLayout"; import { api } from "~/utils/api"; +import { parseTRPCErrorMessage } from "~/utils/parseTRPCError"; const EditResourcePage = () => { const router = useRouter(); @@ -31,6 +32,9 @@ const EditResourcePage = () => { setServerError(undefined); await router.push(`/resources/${resData.id}`); }, + onError: (error) => { + setServerError(parseTRPCErrorMessage(error.message)); + }, }); const onSubmit: SubmitHandler = (data) => { @@ -61,7 +65,9 @@ const EditResourcePage = () => { >
} + methods={ + formMethods as unknown as UseFormReturn + } error={serverError} />
diff --git a/src/server/api/routers/auditoryResources.ts b/src/server/api/routers/auditoryResources.ts index 4da6867..a88bf5d 100644 --- a/src/server/api/routers/auditoryResources.ts +++ b/src/server/api/routers/auditoryResources.ts @@ -17,7 +17,7 @@ const emptyStringToUndefined = (val: string | undefined | null) => { }; const AuditoryResourceSchema = z.object({ - icon: z.string().min(1).optional(), + icon: z.string().min(1).optional().nullable(), name: z.string().min(1), description: z.string().min(1), manufacturer: z.object({ diff --git a/src/utils/parseTRPCError.ts b/src/utils/parseTRPCError.ts new file mode 100644 index 0000000..5d29b30 --- /dev/null +++ b/src/utils/parseTRPCError.ts @@ -0,0 +1,12 @@ +export const parseTRPCErrorMessage = (message: string) => { + try { + const zodErrors = JSON.parse(message) as unknown as { message: string }[]; + return zodErrors + .map((error) => { + return error.message; + }) + .join(", "); + } catch { + return message; + } +};