From 36e1c9272fa9b86cbe9e53e03e83799820674f17 Mon Sep 17 00:00:00 2001 From: zomars Date: Tue, 26 Jul 2022 18:27:57 -0600 Subject: [PATCH] Update [schedule].tsx --- apps/web/pages/availability/[schedule].tsx | 33 +++++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/apps/web/pages/availability/[schedule].tsx b/apps/web/pages/availability/[schedule].tsx index dd94065915..e5d944e4c1 100644 --- a/apps/web/pages/availability/[schedule].tsx +++ b/apps/web/pages/availability/[schedule].tsx @@ -1,11 +1,14 @@ import { BadgeCheckIcon } from "@heroicons/react/solid"; +import { GetStaticPaths, GetStaticProps } from "next"; import { useRouter } from "next/router"; import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; +import { z } from "zod"; import { availabilityAsString, DEFAULT_SCHEDULE } from "@calcom/lib/availability"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import showToast from "@calcom/lib/notification"; +import { stringOrNumber } from "@calcom/prisma/zod-utils"; import { inferQueryOutput, trpc } from "@calcom/trpc/react"; import Button from "@calcom/ui/Button"; import Switch from "@calcom/ui/Switch"; @@ -124,13 +127,15 @@ export function AvailabilityForm(props: inferQueryOutput<"viewer.availability.sc ); } +const querySchema = z.object({ + schedule: stringOrNumber, +}); + export default function Availability() { const router = useRouter(); const { i18n } = useLocale(); - const query = trpc.useQuery( - ["viewer.availability.schedule", { scheduleId: parseInt(router.query.schedule as string) }], - { enabled: router.isReady } - ); + const { schedule: scheduleId } = router.isReady ? querySchema.parse(router.query) : { schedule: -1 }; + const query = trpc.useQuery(["viewer.availability.schedule", { scheduleId }], { enabled: router.isReady }); const [name, setName] = useState(); return (
@@ -156,3 +161,23 @@ export default function Availability() {
); } + +export const getStaticProps: GetStaticProps = (ctx) => { + const params = querySchema.safeParse(ctx.params); + + if (!params.success) return { notFound: true }; + + return { + props: { + schedule: params.data.schedule, + }, + revalidate: 10, // seconds + }; +}; + +export const getStaticPaths: GetStaticPaths = () => { + return { + paths: [], + fallback: "blocking", + }; +};