From 935491c70f4fbd359cfbb8381922252ce9c891f1 Mon Sep 17 00:00:00 2001 From: mohammed hussam <52914487+hussamkhatib@users.noreply.github.com> Date: Fri, 12 Aug 2022 22:46:55 +0530 Subject: [PATCH] migrate api/availability/[user] to viewer.availability.user in trpc (#3591) Co-authored-by: Alex van Andel --- apps/web/pages/api/availability/[user].ts | 4 ++ apps/web/pages/availability/troubleshoot.tsx | 63 ++++++++----------- .../server/routers/viewer/availability.tsx | 19 ++++++ 3 files changed, 49 insertions(+), 37 deletions(-) diff --git a/apps/web/pages/api/availability/[user].ts b/apps/web/pages/api/availability/[user].ts index 1074b7b8d1..7fd6fd95d1 100644 --- a/apps/web/pages/api/availability/[user].ts +++ b/apps/web/pages/api/availability/[user].ts @@ -12,6 +12,10 @@ const availabilitySchema = z.object({ eventTypeId: stringOrNumber.optional(), }); +/** + * @deprecated Use TRCP's viewer.availability.user + */ + async function handler(req: NextApiRequest) { const { user: username, eventTypeId, dateTo, dateFrom } = availabilitySchema.parse(req.query); return getUserAvailability({ diff --git a/apps/web/pages/availability/troubleshoot.tsx b/apps/web/pages/availability/troubleshoot.tsx index f1c1162dad..633d5e5d09 100644 --- a/apps/web/pages/availability/troubleshoot.tsx +++ b/apps/web/pages/availability/troubleshoot.tsx @@ -1,6 +1,6 @@ -import { useEffect, useState } from "react"; +import { useState } from "react"; -import dayjs, { Dayjs } from "@calcom/dayjs"; +import dayjs from "@calcom/dayjs"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { inferQueryOutput, trpc } from "@calcom/trpc/react"; import Shell from "@calcom/ui/Shell"; @@ -13,40 +13,21 @@ type User = inferQueryOutput<"viewer.me">; const AvailabilityView = ({ user }: { user: User }) => { const { t } = useLocale(); - const [loading, setLoading] = useState(true); - const [availability, setAvailability] = useState<{ end: string; start: string; title?: string }[]>([]); const [selectedDate, setSelectedDate] = useState(dayjs()); - function convertMinsToHrsMins(mins: number) { - const h = Math.floor(mins / 60); - const m = mins % 60; - const hs = h < 10 ? "0" + h : h; - const ms = m < 10 ? "0" + m : m; - return `${hs}:${ms}`; - } - - useEffect(() => { - const fetchAvailability = (date: Dayjs) => { - const dateFrom = date.startOf("day").utc().format(); - const dateTo = date.endOf("day").utc().format(); - setLoading(true); - - fetch(`/api/availability/${user.username}?dateFrom=${dateFrom}&dateTo=${dateTo}`) - .then((res) => { - return res.json(); - }) - .then((availableIntervals) => { - setAvailability(availableIntervals.busy); - }) - .catch((e) => { - console.error(e); - }) - .finally(() => { - setLoading(false); - }); - }; - fetchAvailability(selectedDate); - }, [user.username, selectedDate]); + const { data, isLoading } = trpc.useQuery( + [ + "viewer.availability.user", + { + username: user.username!, + dateFrom: selectedDate.startOf("day").utc().format(), + dateTo: selectedDate.endOf("day").utc().format(), + }, + ], + { + enabled: !!user.username, + } + ); return (
@@ -67,10 +48,10 @@ const AvailabilityView = ({ user }: { user: User }) => { {t("your_day_starts_at")} {convertMinsToHrsMins(user.startTime)}
- {loading ? ( + {isLoading ? ( - ) : availability.length > 0 ? ( - availability.map((slot) => ( + ) : data && data.busy.length > 0 ? ( + data.busy.map((slot) => (
{t("calendar_shows_busy_between")}{" "} @@ -115,3 +96,11 @@ export default function Troubleshoot() {
); } + +function convertMinsToHrsMins(mins: number) { + const h = Math.floor(mins / 60); + const m = mins % 60; + const hs = h < 10 ? "0" + h : h; + const ms = m < 10 ? "0" + m : m; + return `${hs}:${ms}`; +} diff --git a/packages/trpc/server/routers/viewer/availability.tsx b/packages/trpc/server/routers/viewer/availability.tsx index 51e6270cb1..ee315f4176 100644 --- a/packages/trpc/server/routers/viewer/availability.tsx +++ b/packages/trpc/server/routers/viewer/availability.tsx @@ -1,7 +1,9 @@ import { Prisma } from "@prisma/client"; import { z } from "zod"; +import { getUserAvailability } from "@calcom/core/getUserAvailability"; import { getAvailabilityFromSchedule } from "@calcom/lib/availability"; +import { stringOrNumber } from "@calcom/prisma/zod-utils"; import { Schedule } from "@calcom/types/schedule"; import { TRPCError } from "@trpc/server"; @@ -93,6 +95,23 @@ export const availabilityRouter = createProtectedRouter() }; }, }) + .query("user", { + input: z.object({ + username: z.string(), + dateFrom: z.string(), + dateTo: z.string(), + eventTypeId: stringOrNumber.optional(), + }), + async resolve({ input }) { + const { username, eventTypeId, dateTo, dateFrom } = input; + return getUserAvailability({ + username, + dateFrom, + dateTo, + eventTypeId, + }); + }, + }) .mutation("schedule.create", { input: z.object({ name: z.string(),