diff --git a/packages/features/bookings/Booker/components/BookEventForm/BookEventForm.tsx b/packages/features/bookings/Booker/components/BookEventForm/BookEventForm.tsx index 9e6c57b72e..70a89d6bb8 100644 --- a/packages/features/bookings/Booker/components/BookEventForm/BookEventForm.tsx +++ b/packages/features/bookings/Booker/components/BookEventForm/BookEventForm.tsx @@ -22,6 +22,7 @@ import { getBookingFieldsWithSystemFields } from "@calcom/features/bookings/lib/ import getBookingResponsesSchema, { getBookingResponsesPartialSchema, } from "@calcom/features/bookings/lib/getBookingResponsesSchema"; +import { bookingSuccessRedirect } from "@calcom/lib/bookingSuccessRedirect"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { HttpError } from "@calcom/lib/http-error"; import { Form, Button, Alert, EmptyScreen } from "@calcom/ui"; @@ -36,34 +37,11 @@ type BookEventFormProps = { onCancel?: () => void; }; -const getSuccessPath = ({ - uid, - email, - slug, - formerTime, - isRecurring, -}: { - uid: string; - email: string; - slug: string; - formerTime?: string; - isRecurring: boolean; -}) => ({ - pathname: `/booking/${uid}`, - query: { - [isRecurring ? "allRemainingBookings" : "isSuccessBookingPage"]: true, - email: email, - eventTypeSlug: slug, - formerTime: formerTime, - }, -}); - export const BookEventForm = ({ onCancel }: BookEventFormProps) => { const router = useRouter(); const { t, i18n } = useLocale(); const { timezone } = useTimePreferences(); const errorRef = useRef(null); - const rescheduleUid = useBookerStore((state) => state.rescheduleUid); const rescheduleBooking = useBookerStore((state) => state.rescheduleBooking); const eventSlug = useBookerStore((state) => state.eventSlug); @@ -194,17 +172,20 @@ export const BookEventForm = ({ onCancel }: BookEventFormProps) => { return; } - return await router.push( - getSuccessPath({ - uid, - email: bookingForm.getValues("responses.email"), - formerTime: rescheduleBooking?.startTime - ? dayjs(rescheduleBooking?.startTime).toISOString() - : undefined, - slug: `${eventSlug}`, - isRecurring: false, - }) - ); + const query = { + isSuccessBookingPage: true, + email: bookingForm.getValues("responses.email"), + eventTypeSlug: eventSlug, + seatReferenceUid: "seatReferenceUid" in responseData ? responseData.seatReferenceUid : null, + formerTime: rescheduleBooking?.startTime ? dayjs(rescheduleBooking.startTime).toString() : undefined, + }; + + return bookingSuccessRedirect({ + router, + successRedirectUrl: eventType?.successRedirectUrl || "", + query, + bookingUid: uid, + }); }, onError: () => { errorRef && errorRef.current?.scrollIntoView({ behavior: "smooth" }); @@ -220,14 +201,20 @@ export const BookEventForm = ({ onCancel }: BookEventFormProps) => { return; } - return await router.push( - getSuccessPath({ - uid, - email: bookingForm.getValues("responses.email"), - slug: `${eventSlug}`, - isRecurring: true, - }) - ); + const query = { + isSuccessBookingPage: true, + allRemainingBookings: true, + email: bookingForm.getValues("responses.email"), + eventTypeSlug: eventSlug, + formerTime: rescheduleBooking?.startTime ? dayjs(rescheduleBooking.startTime).toString() : undefined, + }; + + return bookingSuccessRedirect({ + router, + successRedirectUrl: eventType?.successRedirectUrl || "", + query, + bookingUid: uid, + }); }, }); diff --git a/packages/features/eventtypes/lib/getPublicEvent.ts b/packages/features/eventtypes/lib/getPublicEvent.ts index 94b95208bd..2a83790b30 100644 --- a/packages/features/eventtypes/lib/getPublicEvent.ts +++ b/packages/features/eventtypes/lib/getPublicEvent.ts @@ -39,6 +39,7 @@ const publicEventSelect = Prisma.validator()({ seatsPerTimeSlot: true, bookingFields: true, team: true, + successRedirectUrl: true, workflows: { include: { workflow: {