add inferSSRProps utility (#551)

This commit is contained in:
Alex Johansson 2021-09-02 18:10:44 +02:00 committed by GitHub
parent c6fa712b10
commit 52f95eb1c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 16 deletions

View file

@ -0,0 +1,11 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
type GetSSRResult<TProps> =
//
{ props: TProps } | { redirect: any } | { notFound: true };
type GetSSRFn<TProps> = (...args: any[]) => Promise<GetSSRResult<TProps>>;
export type inferSSRProps<TFn extends GetSSRFn<any>> = TFn extends GetSSRFn<infer TProps>
? NonNullable<TProps>
: never;

View file

@ -1,24 +1,25 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Availability } from "@prisma/client";
import Theme from "@components/Theme";
import { ChevronDownIcon, ChevronUpIcon, ClockIcon, GlobeIcon } from "@heroicons/react/solid";
import prisma from "@lib/prisma";
import * as Collapsible from "@radix-ui/react-collapsible";
import dayjs, { Dayjs } from "dayjs";
import { GetServerSidePropsContext, InferGetServerSidePropsType } from "next";
import { HeadSeo } from "@components/seo/head-seo";
import { useRouter } from "next/router";
import { useEffect, useState } from "react";
import Avatar from "@components/Avatar";
import AvailableTimes from "@components/booking/AvailableTimes";
import DatePicker from "@components/booking/DatePicker";
import TimeOptions from "@components/booking/TimeOptions";
import { HeadSeo } from "@components/seo/head-seo";
import Theme from "@components/Theme";
import PoweredByCalendso from "@components/ui/PoweredByCalendso";
import { timeZone } from "@lib/clock";
import { collectPageParameters, telemetryEventTypes, useTelemetry } from "@lib/telemetry";
import { ChevronDownIcon, ChevronUpIcon, ClockIcon, GlobeIcon } from "@heroicons/react/solid";
import { asStringOrNull } from "@lib/asStringOrNull";
import { timeZone } from "@lib/clock";
import prisma from "@lib/prisma";
import { collectPageParameters, telemetryEventTypes, useTelemetry } from "@lib/telemetry";
import { inferSSRProps } from "@lib/types/inferSSRProps";
import { Availability } from "@prisma/client";
import * as Collapsible from "@radix-ui/react-collapsible";
import dayjs, { Dayjs } from "dayjs";
import { GetServerSidePropsContext } from "next";
import { useRouter } from "next/router";
import { useEffect, useState } from "react";
export default function Type(props: InferGetServerSidePropsType<typeof getServerSideProps>) {
export default function Type(props: inferSSRProps<typeof getServerSideProps>) {
// Get router variables
const router = useRouter();
const { rescheduleUid } = router.query;

View file

@ -35,12 +35,13 @@ import { DateRangePicker, OrientationShape, toMomentObject } from "react-dates";
import Switch from "@components/ui/Switch";
import { Dialog, DialogTrigger } from "@components/Dialog";
import ConfirmationDialogContent from "@components/dialog/ConfirmationDialogContent";
import { GetServerSidePropsContext, InferGetServerSidePropsType } from "next";
import { GetServerSidePropsContext } from "next";
import { useMutation } from "react-query";
import { EventTypeInput } from "@lib/types/event-type";
import updateEventType from "@lib/mutations/event-types/update-event-type";
import deleteEventType from "@lib/mutations/event-types/delete-event-type";
import showToast from "@lib/notification";
import { inferSSRProps } from "@lib/types/inferSSRProps";
dayjs.extend(utc);
dayjs.extend(timezone);
@ -60,7 +61,7 @@ const PERIOD_TYPES = [
},
];
const EventTypePage = (props: InferGetServerSidePropsType<typeof getServerSideProps>) => {
const EventTypePage = (props: inferSSRProps<typeof getServerSideProps>) => {
const { user, eventType, locationOptions, availability } = props;
const router = useRouter();
const [successModalOpen, setSuccessModalOpen] = useState(false);
@ -1082,7 +1083,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) =>
if (!eventType) {
return {
notFound: true,
};
} as const;
}
const credentials = await prisma.credential.findMany({