diff --git a/apps/web/components/eventtype/AvailabilityTab.tsx b/apps/web/components/eventtype/AvailabilityTab.tsx index 0d296e66e9..33da157354 100644 --- a/apps/web/components/eventtype/AvailabilityTab.tsx +++ b/apps/web/components/eventtype/AvailabilityTab.tsx @@ -99,18 +99,77 @@ const format = (date: Date, hour12: boolean) => new Date(dayjs.utc(date).format("YYYY-MM-DDTHH:mm:ss")) ); -const EventTypeSchedule = () => { - const me = useMeQuery(); - const timeFormat = me?.data?.timeFormat; +const EventTypeScheduleDetails = () => { + const { data: loggedInUser } = useMeQuery(); + const timeFormat = loggedInUser?.timeFormat; const { t, i18n } = useLocale(); const { watch } = useFormContext(); const scheduleId = watch("schedule"); - const { isLoading, data: schedule } = trpc.viewer.availability.schedule.get.useQuery({ scheduleId }); + const { isLoading, data: schedule } = trpc.viewer.availability.schedule.get.useQuery( + { scheduleId: scheduleId || loggedInUser?.defaultScheduleId || undefined }, + { enabled: !!scheduleId || !!loggedInUser?.defaultScheduleId } + ); const filterDays = (dayNum: number) => schedule?.schedule.availability.filter((item) => item.days.includes((dayNum + 1) % 7)) || []; + return ( +
+
    + {weekdayNames(i18n.language, 1, "long").map((day, index) => { + const isAvailable = !!filterDays(index).length; + return ( +
  1. + + {day} + + {isLoading ? ( + + ) : isAvailable ? ( +
    + {filterDays(index).map((dayRange, i) => ( +
    + + {format(dayRange.startTime, timeFormat === 12)} + + - +
    {format(dayRange.endTime, timeFormat === 12)}
    +
    + ))} +
    + ) : ( + {t("unavailable")} + )} +
  2. + ); + })} +
+
+
+ + + {schedule?.timeZone || } + + +
+
+ ); +}; + +const EventTypeSchedule = () => { + const { t } = useLocale(); return (
@@ -131,67 +190,14 @@ const EventTypeSchedule = () => { )} />
-
-
    - {weekdayNames(i18n.language, 1, "long").map((day, index) => { - const isAvailable = !!filterDays(index).length; - return ( -
  1. - - {day} - - {isLoading ? ( - - ) : isAvailable ? ( -
    - {filterDays(index).map((dayRange, i) => ( -
    - - {format(dayRange.startTime, timeFormat === 12)} - - - -
    {format(dayRange.endTime, timeFormat === 12)}
    -
    - ))} -
    - ) : ( - {t("unavailable")} - )} -
  2. - ); - })} -
-
-
- - - {schedule?.timeZone || } - - -
-
+
); }; -export const AvailabilityTab = ({ isTeamEvent }: { isTeamEvent: boolean }) => { +const UseCommonScheduleSettingsToggle = () => { const { t } = useLocale(); - - if (!isTeamEvent) { - return ; - } - + const { resetField, setValue } = useFormContext(); return ( { checked={!value} onCheckedChange={(checked) => { onChange(!checked); + if (checked) { + resetField("schedule"); + } else { + setValue("schedule", null); + } }} title={t("choose_common_schedule_team_event")} description={t("choose_common_schedule_team_event_description")}> @@ -209,3 +220,7 @@ export const AvailabilityTab = ({ isTeamEvent }: { isTeamEvent: boolean }) => { /> ); }; + +export const AvailabilityTab = ({ isTeamEvent }: { isTeamEvent: boolean }) => { + return isTeamEvent ? : ; +}; diff --git a/apps/web/pages/event-types/[type]/index.tsx b/apps/web/pages/event-types/[type]/index.tsx index bbd9fd9118..fdb17d2414 100644 --- a/apps/web/pages/event-types/[type]/index.tsx +++ b/apps/web/pages/event-types/[type]/index.tsx @@ -62,7 +62,7 @@ export type FormValues = { phone?: string; }[]; customInputs: CustomInputParsed[]; - schedule: number; + schedule: number | null; periodType: PeriodType; periodDays: number; periodCountCalendarDays: "1" | "0"; diff --git a/packages/trpc/server/routers/viewer.tsx b/packages/trpc/server/routers/viewer.tsx index 8972dd5c35..d75ecc44f9 100644 --- a/packages/trpc/server/routers/viewer.tsx +++ b/packages/trpc/server/routers/viewer.tsx @@ -162,6 +162,7 @@ const loggedInViewerRouter = router({ avatar: user.avatar, createdDate: user.createdDate, trialEndsAt: user.trialEndsAt, + defaultScheduleId: user.defaultScheduleId, completedOnboarding: user.completedOnboarding, twoFactorEnabled: user.twoFactorEnabled, disableImpersonation: user.disableImpersonation, diff --git a/packages/trpc/server/routers/viewer/eventTypes.tsx b/packages/trpc/server/routers/viewer/eventTypes.tsx index 824da3ddce..efae2f88fe 100644 --- a/packages/trpc/server/routers/viewer/eventTypes.tsx +++ b/packages/trpc/server/routers/viewer/eventTypes.tsx @@ -92,7 +92,7 @@ const EventTypeUpdateInput = _EventTypeModel }) ) .optional(), - schedule: z.number().optional(), + schedule: z.number().nullable().optional(), hashedLink: z.string(), }) .partial() @@ -564,6 +564,12 @@ export const eventTypesRouter = router({ }; } } + // allows unsetting a schedule through { schedule: null, ... } + else if (null === schedule) { + data.schedule = { + disconnect: true, + }; + } if (users) { data.users = {