diff --git a/apps/web/modules/bookings/views/booking-dry-run-success-view.tsx b/apps/web/modules/bookings/views/booking-dry-run-success-view.tsx
index 6c3228752b..3e319b5250 100644
--- a/apps/web/modules/bookings/views/booking-dry-run-success-view.tsx
+++ b/apps/web/modules/bookings/views/booking-dry-run-success-view.tsx
@@ -42,7 +42,9 @@ export default function DryRunSuccessful() {
- {t("booking_dry_run_successful")}
+
+ {t("booking_dry_run_successful")}
+
{t("booking_dry_run_successful_description")}
{/*
diff --git a/apps/web/pages/router/index.tsx b/apps/web/pages/router/index.tsx
index b9b9956292..5821c6243c 100644
--- a/apps/web/pages/router/index.tsx
+++ b/apps/web/pages/router/index.tsx
@@ -4,6 +4,8 @@ import Head from "next/head";
import type { inferSSRProps } from "@calcom/types/inferSSRProps";
+import PageWrapper from "@components/PageWrapper";
+
import { getServerSideProps } from "../../server/lib/router/getServerSideProps";
export default function Router({ form, message }: inferSSRProps
) {
@@ -23,4 +25,6 @@ export default function Router({ form, message }: inferSSRProps {
- {t("dry_run_mode_active")}
+
+ {t("dry_run_mode_active")}
+
);
diff --git a/packages/features/bookings/Booker/components/hooks/useSlots.ts b/packages/features/bookings/Booker/components/hooks/useSlots.ts
index f7a30442bc..508d5cac85 100644
--- a/packages/features/bookings/Booker/components/hooks/useSlots.ts
+++ b/packages/features/bookings/Booker/components/hooks/useSlots.ts
@@ -4,14 +4,17 @@ import { shallow } from "zustand/shallow";
import dayjs from "@calcom/dayjs";
import { useBookerStore } from "@calcom/features/bookings/Booker/store";
import { useSlotReservationId } from "@calcom/features/bookings/Booker/useSlotReservationId";
+import { isBookingDryRun } from "@calcom/features/bookings/Booker/utils/isBookingDryRun";
import type { BookerEvent } from "@calcom/features/bookings/types";
import { MINUTES_TO_BOOK } from "@calcom/lib/constants";
+import { useCompatSearchParams } from "@calcom/lib/hooks/useCompatSearchParams";
import { trpc } from "@calcom/trpc";
export type UseSlotsReturnType = ReturnType;
export const useSlots = (event: { data?: Pick | null }) => {
const selectedDuration = useBookerStore((state) => state.selectedDuration);
+ const searchParams = useCompatSearchParams();
const [selectedTimeslot, setSelectedTimeslot] = useBookerStore(
(state) => [state.selectedTimeslot, state.setSelectedTimeslot],
shallow
@@ -45,6 +48,7 @@ export const useSlots = (event: { data?: Pick | nu
.utc()
.add(selectedDuration || event.data.length, "minutes")
.format(),
+ _isDryRun: isBookingDryRun(searchParams),
});
}
};
diff --git a/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts b/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts
index 62e3a263ba..9ee0ba5259 100644
--- a/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts
+++ b/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts
@@ -21,7 +21,7 @@ interface ReserveSlotOptions {
export const reserveSlotHandler = async ({ ctx, input }: ReserveSlotOptions) => {
const { prisma, req, res } = ctx;
const uid = req?.cookies?.uid || uuid();
- const { slotUtcStartDate, slotUtcEndDate, eventTypeId, bookingUid } = input;
+ const { slotUtcStartDate, slotUtcEndDate, eventTypeId, bookingUid, _isDryRun } = input;
const releaseAt = dayjs.utc().add(parseInt(MINUTES_TO_BOOK), "minutes").format();
const eventType = await prisma.eventType.findUnique({
where: { id: eventTypeId },
@@ -54,7 +54,7 @@ export const reserveSlotHandler = async ({ ctx, input }: ReserveSlotOptions) =>
}
}
- if (eventType && shouldReserveSlot) {
+ if (eventType && shouldReserveSlot && !_isDryRun) {
try {
await Promise.all(
eventType.users.map((user) =>
diff --git a/packages/trpc/server/routers/viewer/slots/types.ts b/packages/trpc/server/routers/viewer/slots/types.ts
index 0d82f05497..3741303ddb 100644
--- a/packages/trpc/server/routers/viewer/slots/types.ts
+++ b/packages/trpc/server/routers/viewer/slots/types.ts
@@ -56,6 +56,7 @@ export const reserveSlotSchema = z
// endTime ISOString
slotUtcEndDate: z.string(),
bookingUid: z.string().optional(),
+ _isDryRun: z.boolean().optional(),
})
.refine(
(data) => !!data.eventTypeId || !!data.slotUtcStartDate || !!data.slotUtcEndDate,