From a0764189892f1ebcad4b660a8f189d0b1efe498c Mon Sep 17 00:00:00 2001 From: Hariom Balhara Date: Thu, 22 Dec 2022 16:43:33 +0530 Subject: [PATCH] Hotfix/Event Type Save Error with Multiple Durations (#6154) * Fix .length being undefined when form is submitted without any change to duration * Fix type error Co-authored-by: Alex van Andel --- apps/web/components/eventtype/EventSetupTab.tsx | 9 +++------ apps/web/pages/event-types/[type]/index.tsx | 11 +++++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/apps/web/components/eventtype/EventSetupTab.tsx b/apps/web/components/eventtype/EventSetupTab.tsx index fae1b20c27..46035b4d44 100644 --- a/apps/web/components/eventtype/EventSetupTab.tsx +++ b/apps/web/components/eventtype/EventSetupTab.tsx @@ -290,7 +290,7 @@ export const EventSetupTab = ( setDefaultDuration( selectedMultipleDuration.find((opt) => opt.value === option?.value) ?? null ); - formMethods.setValue("length", Number(option?.value)); + if (option) formMethods.setValue("length", option.value); }} /> @@ -298,14 +298,11 @@ export const EventSetupTab = ( ) : ( {t("minutes")}} defaultValue={eventType.length ?? 15} - onChange={(e) => { - formMethods.setValue("length", Number(e.target.value)); - }} + {...formMethods.register("length")} + addOnSuffix={<>{t("minutes")}} /> )}
diff --git a/apps/web/pages/event-types/[type]/index.tsx b/apps/web/pages/event-types/[type]/index.tsx index fa01ad45ec..44a4a4eace 100644 --- a/apps/web/pages/event-types/[type]/index.tsx +++ b/apps/web/pages/event-types/[type]/index.tsx @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-empty-function */ import { useAutoAnimate } from "@formkit/auto-animate/react"; +import { zodResolver } from "@hookform/resolvers/zod"; import { PeriodType, Prisma, SchedulingType } from "@prisma/client"; import { GetServerSidePropsContext } from "next"; import { useRouter } from "next/router"; @@ -204,6 +205,16 @@ const EventTypePage = (props: inferSSRProps) => { ), metadata, }, + resolver: zodResolver( + z + .object({ + // Length if string, is converted to a number or it can be a number + // Make it optional because it's not submitted from all tabs of the page + length: z.union([z.string().transform((val) => +val), z.number()]).optional(), + }) + // TODO: Add schema for other fields later. + .passthrough() + ), }); const appsMetadata = formMethods.getValues("metadata")?.apps;