diff --git a/lib/app-providers.tsx b/lib/app-providers.tsx index efe691c9..200e76a0 100644 --- a/lib/app-providers.tsx +++ b/lib/app-providers.tsx @@ -1,18 +1,26 @@ import { Provider } from "next-auth/client"; import React from "react"; -import { QueryClient, QueryClientProvider } from "react-query"; +import { HydrateProps, QueryClient, QueryClientProvider } from "react-query"; import { Hydrate } from "react-query/hydration"; +import { Session } from "@lib/auth"; import { createTelemetryClient, TelemetryProvider } from "@lib/telemetry"; export const queryClient = new QueryClient(); -const AppProviders: React.FC = (props, pageProps) => { +type AppProviderProps = { + pageProps: { + session?: Session; + dehydratedState?: HydrateProps; + }; +}; + +const AppProviders: React.FC = ({ pageProps, children }) => { return ( - {props.children} + {children} diff --git a/pages/_app.tsx b/pages/_app.tsx index 911897bc..99b0c106 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -15,7 +15,7 @@ export type AppProps = NextAppProps & { function MyApp({ Component, pageProps, err }: AppProps) { return ( - + diff --git a/pages/api/availability/[user].ts b/pages/api/availability/[user].ts index 875f7757..8a2663b9 100644 --- a/pages/api/availability/[user].ts +++ b/pages/api/availability/[user].ts @@ -6,6 +6,8 @@ import { asStringOrNull } from "@lib/asStringOrNull"; import { getBusyCalendarTimes } from "@lib/calendarClient"; import prisma from "@lib/prisma"; +import { Prisma } from ".prisma/client"; + export default async function handler(req: NextApiRequest, res: NextApiResponse) { const user = asStringOrNull(req.query.user); const dateFrom = dayjs(asStringOrNull(req.query.dateFrom)); @@ -32,19 +34,24 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) }, }); - const eventType = await prisma.eventType.findUnique({ - where: { id: eventTypeId }, - select: { - timeZone: true, - availability: { - select: { - startTime: true, - endTime: true, - days: true, + const getEventType = (id: number) => + prisma.eventType.findUnique({ + where: { id }, + select: { + timeZone: true, + availability: { + select: { + startTime: true, + endTime: true, + days: true, + }, }, }, - }, - }); + }); + + type EventType = Prisma.PromiseReturnType; + let eventType: EventType | null = null; + if (eventTypeId) eventType = await getEventType(eventTypeId); if (!rawUser) throw new Error("No user found"); diff --git a/pages/availability/index.tsx b/pages/availability/index.tsx index b2c73cee..820affbd 100644 --- a/pages/availability/index.tsx +++ b/pages/availability/index.tsx @@ -339,6 +339,6 @@ export async function getServerSideProps(context) { }, }); return { - props: { user, types }, // will be passed to the page component as props + props: { session, user, types }, }; } diff --git a/pages/availability/troubleshoot.tsx b/pages/availability/troubleshoot.tsx index 76a573af..47f8141f 100644 --- a/pages/availability/troubleshoot.tsx +++ b/pages/availability/troubleshoot.tsx @@ -1,24 +1,23 @@ import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; -import { GetServerSideProps } from "next"; +import { GetServerSidePropsContext } from "next"; import { useEffect, useState } from "react"; import { getSession } from "@lib/auth"; import prisma from "@lib/prisma"; +import { inferSSRProps } from "@lib/types/inferSSRProps"; import Loader from "@components/Loader"; import Shell from "@components/Shell"; dayjs.extend(utc); -export default function Troubleshoot({ user }) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars +export default function Troubleshoot({ user }: inferSSRProps) { const [loading, setLoading] = useState(true); const [availability, setAvailability] = useState([]); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [selectedDate, setSelectedDate] = useState(dayjs()); + const [selectedDate] = useState(dayjs()); - function convertMinsToHrsMins(mins) { + function convertMinsToHrsMins(mins: number) { let h = Math.floor(mins / 60); let m = mins % 60; h = h < 10 ? "0" + h : h; @@ -97,9 +96,9 @@ export default function Troubleshoot({ user }) { ); } -export const getServerSideProps: GetServerSideProps = async (context) => { +export const getServerSideProps = async (context: GetServerSidePropsContext) => { const session = await getSession(context); - if (!session) { + if (!session?.user?.id) { return { redirect: { permanent: false, destination: "/auth/login" } }; } @@ -114,7 +113,9 @@ export const getServerSideProps: GetServerSideProps = async (context) => { }, }); + if (!user) return { redirect: { permanent: false, destination: "/auth/login" } }; + return { - props: { user }, + props: { session, user }, }; }; diff --git a/pages/bookings/index.tsx b/pages/bookings/index.tsx index 55c73190..05c453e3 100644 --- a/pages/bookings/index.tsx +++ b/pages/bookings/index.tsx @@ -346,5 +346,5 @@ export async function getServerSideProps(context) { return { ...booking, startTime: booking.startTime.toISOString(), endTime: booking.endTime.toISOString() }; }); - return { props: { bookings } }; + return { props: { session, bookings } }; } diff --git a/pages/event-types/[type].tsx b/pages/event-types/[type].tsx index ba3ee40d..ee5401f6 100644 --- a/pages/event-types/[type].tsx +++ b/pages/event-types/[type].tsx @@ -1350,6 +1350,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return { props: { + session, localeProp: locale, eventType: eventTypeObject, locationOptions, diff --git a/pages/event-types/index.tsx b/pages/event-types/index.tsx index 74b03652..6802304e 100644 --- a/pages/event-types/index.tsx +++ b/pages/event-types/index.tsx @@ -475,7 +475,7 @@ const CreateNewEventDialog = ({
- {location.hostname}/{router.query.eventPage || profiles[0].slug}/ + {process.env.NEXT_PUBLIC_APP_URL}/{router.query.eventPage || profiles[0].slug}/ ) { + const [, loading] = useSession(); if (loading) { return ; } + const iframeTemplate = ``; + const htmlTemplate = `Schedule a meeting${iframeTemplate}`; + return ( @@ -33,13 +37,7 @@ export default function Embed(props) { id="iframe" className="h-32 shadow-sm focus:ring-black focus:border-black block w-full sm:text-sm border-gray-300 rounded-sm" placeholder="Loading..." - defaultValue={ - '' - } + defaultValue={iframeTemplate} readOnly />
@@ -53,13 +51,7 @@ export default function Embed(props) { id="fullscreen" className="h-32 shadow-sm focus:ring-black focus:border-black block w-full sm:text-sm border-gray-300 rounded-sm" placeholder="Loading..." - defaultValue={ - 'Schedule a meeting' - } + defaultValue={htmlTemplate} readOnly />
@@ -80,9 +72,9 @@ export default function Embed(props) { ); } -export async function getServerSideProps(context) { +export async function getServerSideProps(context: GetServerSidePropsContext) { const session = await getSession(context); - if (!session) { + if (!session?.user?.email) { return { redirect: { permanent: false, destination: "/auth/login" } }; } @@ -102,9 +94,7 @@ export async function getServerSideProps(context) { }, }); - const BASE_URL = process.env.BASE_URL; - return { - props: { user, BASE_URL }, // will be passed to the page component as props + props: { session, user }, }; } diff --git a/pages/settings/profile.tsx b/pages/settings/profile.tsx index 2815d732..fd4c8e64 100644 --- a/pages/settings/profile.tsx +++ b/pages/settings/profile.tsx @@ -433,6 +433,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return { props: { + session, localeProp: locale, localeOptions, localeLabels, diff --git a/pages/settings/security.tsx b/pages/settings/security.tsx index 0de823b3..ace80391 100644 --- a/pages/settings/security.tsx +++ b/pages/settings/security.tsx @@ -46,6 +46,6 @@ export async function getServerSideProps(context) { }); return { - props: { user }, // will be passed to the page component as props + props: { session, user }, }; }