From a55ffca0139e2db6c542bcc7017d4161e10b88ad Mon Sep 17 00:00:00 2001 From: Shaik-Sirajuddin <89742297+Shaik-Sirajuddin@users.noreply.github.com> Date: Tue, 19 Mar 2024 23:45:08 +0530 Subject: [PATCH] fix: timezone display on booking page to reflect event availability timezone (#14127) * fix timezone display on booking page to reflect event availability timezone * migrate fetching event owner's schedule to server side * migrate fetching event owner's schedule to server side * fix e2e test errors --------- Co-authored-by: Shaik-Sirajuddin Co-authored-by: Shaik-Sirajuddin Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> --- .../bookings/Booker/components/EventMeta.tsx | 8 +++++++ .../features/eventtypes/lib/getPublicEvent.ts | 21 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/features/bookings/Booker/components/EventMeta.tsx b/packages/features/bookings/Booker/components/EventMeta.tsx index 367a433b5a..7c8d4c6331 100644 --- a/packages/features/bookings/Booker/components/EventMeta.tsx +++ b/packages/features/bookings/Booker/components/EventMeta.tsx @@ -1,5 +1,6 @@ import { m } from "framer-motion"; import dynamic from "next/dynamic"; +import { useEffect } from "react"; import { shallow } from "zustand/shallow"; import { useEmbedUiConfig, useIsEmbed } from "@calcom/embed-core/embed-iframe"; @@ -44,6 +45,13 @@ export const EventMeta = ({ const isEmbed = useIsEmbed(); const hideEventTypeDetails = isEmbed ? embedUiConfig.hideEventTypeDetails : false; + useEffect(() => { + //In case the event has lockTimeZone enabled ,set the timezone to event's attached availability timezone + if (event && event?.lockTimeZoneToggleOnBookingPage && event?.schedule?.timeZone) { + setTimezone(event.schedule?.timeZone); + } + }, [event, setTimezone]); + if (hideEventTypeDetails) { return null; } diff --git a/packages/features/eventtypes/lib/getPublicEvent.ts b/packages/features/eventtypes/lib/getPublicEvent.ts index e6794e8c02..df1343fcc2 100644 --- a/packages/features/eventtypes/lib/getPublicEvent.ts +++ b/packages/features/eventtypes/lib/getPublicEvent.ts @@ -44,6 +44,7 @@ const userSelect = Prisma.validator()({ bannerUrl: true, }, }, + defaultScheduleId: true, }); const publicEventSelect = Prisma.validator()({ @@ -107,6 +108,12 @@ const publicEventSelect = Prisma.validator()({ owner: { select: userSelect, }, + schedule: { + select: { + id: true, + timeZone: true, + }, + }, hidden: true, assignAllTeamMembers: true, }); @@ -253,7 +260,19 @@ export const getPublicEvent = async ( if (users === null) { throw new Error("Event has no owner"); } - + //In case the event schedule is not defined ,use the event owner's default schedule + if (!eventWithUserProfiles.schedule && eventWithUserProfiles.owner?.defaultScheduleId) { + const eventOwnerDefaultSchedule = await prisma.schedule.findUnique({ + where: { + id: eventWithUserProfiles.owner?.defaultScheduleId, + }, + select: { + id: true, + timeZone: true, + }, + }); + eventWithUserProfiles.schedule = eventOwnerDefaultSchedule; + } return { ...eventWithUserProfiles, bookerLayouts: bookerLayoutsSchema.parse(eventMetaData?.bookerLayouts || null),