Skip to content

Commit cf59123

Browse files
committed
hotfix: bookings and availability pages
commit 36e1c92 Author: zomars <zomars@me.com> Date: Tue Jul 26 18:27:57 2022 -0600 Update [schedule].tsx commit f39535f Author: zomars <zomars@me.com> Date: Tue Jul 26 18:07:30 2022 -0600 Update [status].tsx commit c3ac1bc Author: zomars <zomars@me.com> Date: Tue Jul 26 17:53:43 2022 -0600 Update [schedule].tsx commit 39364d8 Author: zomars <zomars@me.com> Date: Tue Jul 26 17:43:13 2022 -0600 Debugging prod commit 4b428d2 Author: zomars <zomars@me.com> Date: Tue Jul 26 17:20:44 2022 -0600 Update checkLicense.ts commit 4212e6d Author: zomars <zomars@me.com> Date: Tue Jul 26 17:11:37 2022 -0600 Booking fixes attempt commit e316002 Author: zomars <zomars@me.com> Date: Tue Jul 26 13:52:35 2022 -0600 migration conflict fixes
1 parent 5ad25a6 commit cf59123

File tree

9 files changed

+65
-37
lines changed

9 files changed

+65
-37
lines changed

apps/web/components/Shell.tsx

+3-6
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,9 @@ const Layout = ({
125125
}: LayoutProps & { status: SessionContextValue["status"]; plan?: UserPlan; isLoading: boolean }) => {
126126
const isEmbed = useIsEmbed();
127127
const router = useRouter();
128-
const { data: routingForms } = trpc.useQuery([
129-
"viewer.appById",
130-
{
131-
appId: "routing_forms",
132-
},
133-
]);
128+
const { data: routingForms } = trpc.useQuery(["viewer.appById", { appId: "routing_forms" }], {
129+
enabled: status === "authenticated",
130+
});
134131

135132
const { t } = useLocale();
136133
const navigation = [

apps/web/pages/availability/[schedule].tsx

+30-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import { BadgeCheckIcon } from "@heroicons/react/solid";
2+
import { GetStaticPaths, GetStaticProps } from "next";
23
import { useRouter } from "next/router";
34
import { useState } from "react";
45
import { Controller, useForm } from "react-hook-form";
6+
import { z } from "zod";
57

6-
import { DEFAULT_SCHEDULE, availabilityAsString } from "@calcom/lib/availability";
8+
import { availabilityAsString, DEFAULT_SCHEDULE } from "@calcom/lib/availability";
79
import { useLocale } from "@calcom/lib/hooks/useLocale";
810
import showToast from "@calcom/lib/notification";
11+
import { stringOrNumber } from "@calcom/prisma/zod-utils";
912
import { inferQueryOutput, trpc } from "@calcom/trpc/react";
1013
import Button from "@calcom/ui/Button";
1114
import Switch from "@calcom/ui/Switch";
@@ -124,15 +127,15 @@ export function AvailabilityForm(props: inferQueryOutput<"viewer.availability.sc
124127
);
125128
}
126129

130+
const querySchema = z.object({
131+
schedule: stringOrNumber,
132+
});
133+
127134
export default function Availability() {
128135
const router = useRouter();
129136
const { i18n } = useLocale();
130-
const query = trpc.useQuery([
131-
"viewer.availability.schedule",
132-
{
133-
scheduleId: parseInt(router.query.schedule as string),
134-
},
135-
]);
137+
const { schedule: scheduleId } = router.isReady ? querySchema.parse(router.query) : { schedule: -1 };
138+
const query = trpc.useQuery(["viewer.availability.schedule", { scheduleId }], { enabled: router.isReady });
136139
const [name, setName] = useState<string>();
137140
return (
138141
<div>
@@ -158,3 +161,23 @@ export default function Availability() {
158161
</div>
159162
);
160163
}
164+
165+
export const getStaticProps: GetStaticProps = (ctx) => {
166+
const params = querySchema.safeParse(ctx.params);
167+
168+
if (!params.success) return { notFound: true };
169+
170+
return {
171+
props: {
172+
schedule: params.data.schedule,
173+
},
174+
revalidate: 10, // seconds
175+
};
176+
};
177+
178+
export const getStaticPaths: GetStaticPaths = () => {
179+
return {
180+
paths: [],
181+
fallback: "blocking",
182+
};
183+
};

apps/web/pages/bookings/[status].tsx

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { CalendarIcon } from "@heroicons/react/outline";
2+
import { GetStaticPaths, GetStaticProps } from "next";
23
import { useRouter } from "next/router";
34
import { Fragment } from "react";
45
import { z } from "zod";
@@ -20,6 +21,8 @@ import SkeletonLoader from "@components/booking/SkeletonLoader";
2021
type BookingListingStatus = inferQueryInput<"viewer.bookings">["status"];
2122
type BookingOutput = inferQueryOutput<"viewer.bookings">["bookings"][0];
2223

24+
const validStatuses = ["upcoming", "recurring", "past", "cancelled"] as const;
25+
2326
const descriptionByStatus: Record<BookingListingStatus, string> = {
2427
upcoming: "upcoming_bookings",
2528
recurring: "recurring_bookings",
@@ -28,11 +31,12 @@ const descriptionByStatus: Record<BookingListingStatus, string> = {
2831
};
2932

3033
const querySchema = z.object({
31-
status: z.enum(["upcoming", "recurring", "past", "cancelled"]),
34+
status: z.enum(validStatuses),
3235
});
3336

3437
export default function Bookings() {
3538
const router = useRouter();
39+
console.log("router", JSON.stringify(router));
3640
const { status } = router.isReady ? querySchema.parse(router.query) : { status: "upcoming" as const };
3741
const { t } = useLocale();
3842

@@ -137,3 +141,25 @@ export default function Bookings() {
137141
</Shell>
138142
);
139143
}
144+
145+
export const getStaticProps: GetStaticProps = (ctx) => {
146+
const params = querySchema.safeParse(ctx.params);
147+
148+
if (!params.success) return { notFound: true };
149+
150+
return {
151+
props: {
152+
status: params.data.status,
153+
},
154+
};
155+
};
156+
157+
export const getStaticPaths: GetStaticPaths = () => {
158+
return {
159+
paths: validStatuses.map((status) => ({
160+
params: { status },
161+
locale: "en",
162+
})),
163+
fallback: "blocking",
164+
};
165+
};

apps/web/pages/bookings/index.tsx

-18
This file was deleted.

packages/ee/server/checkLicense.ts

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { CONSOLE_URL } from "@calcom/lib/constants";
55
const CACHING_TIME = 86400000; // 24 hours in milliseconds
66

77
async function checkLicense(license: string): Promise<boolean> {
8-
return true;
98
if (!!process.env.NEXT_PUBLIC_IS_E2E) return true;
109
const url = `${CONSOLE_URL}/api/license?key=${license}`;
1110
const cachedResponse = cache.get(url);

packages/lib/server/perfObserver.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ export const perfObserver =
99
new PerformanceObserver((items) => {
1010
items.getEntries().forEach((entry) => {
1111
// Log entry duration in seconds with four decimal places.
12-
console.log(entry.name.replace("$1", `${(entry.duration / 1000.0).toFixed(4)}s`));
12+
if (!!process.env.NEXT_PUBLIC_DEBUG)
13+
console.log(entry.name.replace("$1", `${(entry.duration / 1000.0).toFixed(4)}s`));
1314
});
1415
});
1516

packages/prisma/migrations/20220628190334_adds_missing_oncascades/migration.sql

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-- DropForeignKey
2-
ALTER TABLE "DestinationCalendar" DROP CONSTRAINT "DestinationCalendar_bookingId_fkey";
2+
ALTER TABLE "DestinationCalendar" DROP CONSTRAINT IF EXISTS "DestinationCalendar_bookingId_fkey";
33

44
-- DropForeignKey
55
ALTER TABLE "DestinationCalendar" DROP CONSTRAINT "DestinationCalendar_eventTypeId_fkey";

packages/prisma/migrations/20220714175322_destination_calendar_one_to_many_bookings/migration.sql

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
*/
77
-- DropForeignKey
8-
ALTER TABLE "DestinationCalendar" DROP CONSTRAINT "DestinationCalendar_bookingId_fkey";
8+
ALTER TABLE "DestinationCalendar" DROP CONSTRAINT IF EXISTS "DestinationCalendar_bookingId_fkey";
99

1010
-- DropIndex
1111
DROP INDEX "DestinationCalendar_bookingId_key";

packages/prisma/zod-utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { z } from "zod";
22

3-
import { LocationType } from "@calcom/core/location";
3+
import { LocationType } from "@calcom/app-store/locations";
44
import dayjs from "@calcom/dayjs";
55
import { slugify } from "@calcom/lib/slugify";
66

0 commit comments

Comments
 (0)