import type { GetServerSidePropsContext } from "next"; import { URLSearchParams } from "url"; import { z } from "zod"; import { getDefaultEvent } from "@calcom/lib/defaultEvents"; import { maybeGetBookingUidFromSeat } from "@calcom/lib/server/maybeGetBookingUidFromSeat"; import prisma, { bookingMinimalSelect } from "@calcom/prisma"; export default function Type() { // Just redirect to the schedule page to reschedule it. return null; } export async function getServerSideProps(context: GetServerSidePropsContext) { const { uid: bookingId, seatReferenceUid } = z .object({ uid: z.string(), seatReferenceUid: z.string().optional() }) .parse(context.query); const uid = await maybeGetBookingUidFromSeat(prisma, bookingId); const booking = await prisma.booking.findUnique({ where: { uid, }, select: { ...bookingMinimalSelect, eventType: { select: { users: { select: { username: true, }, }, slug: true, team: { select: { slug: true, }, }, seatsPerTimeSlot: true, }, }, dynamicEventSlugRef: true, dynamicGroupSlugRef: true, user: true, }, }); const dynamicEventSlugRef = booking?.dynamicEventSlugRef || ""; if (!booking) { return { notFound: true, } as const; } if (!booking?.eventType && !booking?.dynamicEventSlugRef) { // TODO: Show something in UI to let user know that this booking is not rescheduleable. return { notFound: true, } as { notFound: true; }; } const eventType = booking.eventType ? booking.eventType : getDefaultEvent(dynamicEventSlugRef); const eventPage = (eventType.team ? "team/" + eventType.team.slug : dynamicEventSlugRef ? booking.dynamicGroupSlugRef : booking.user?.username || "rick") /* This shouldn't happen */ + "/" + eventType?.slug; const destinationUrl = new URLSearchParams(); destinationUrl.set("rescheduleUid", seatReferenceUid || bookingId); return { redirect: { destination: `/${eventPage}?${destinationUrl.toString()}${ eventType.seatsPerTimeSlot ? "&bookingUid=null" : "" }`, permanent: false, }, }; }