import { HeadSeo } from "@components/seo/head-seo"; import Link from "next/link"; import prisma from "@lib/prisma"; import { useEffect, useState } from "react"; import { useRouter } from "next/router"; import { CheckIcon } from "@heroicons/react/outline"; import { ClockIcon } from "@heroicons/react/solid"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; import toArray from "dayjs/plugin/toArray"; import timezone from "dayjs/plugin/timezone"; import { createEvent } from "ics"; import { getEventName } from "@lib/event"; import Theme from "@components/Theme"; import { GetServerSidePropsContext } from "next"; import { asStringOrNull } from "../lib/asStringOrNull"; import { inferSSRProps } from "@lib/types/inferSSRProps"; import { isBrandingHidden } from "@lib/isBrandingHidden"; dayjs.extend(utc); dayjs.extend(toArray); dayjs.extend(timezone); export default function Success(props: inferSSRProps) { const router = useRouter(); const { location, name } = router.query; const [is24h, setIs24h] = useState(false); const [date, setDate] = useState(dayjs.utc(router.query.date)); const { isReady } = Theme(props.user.theme); useEffect(() => { setDate(date.tz(localStorage.getItem("timeOption.preferredTimeZone") || dayjs.tz.guess())); setIs24h(!!localStorage.getItem("timeOption.is24hClock")); }, []); const eventName = getEventName(name, props.eventType.title, props.eventType.eventName); function eventLink(): string { const optional = {}; if (location) { optional["location"] = location; } const event = createEvent({ start: date .utc() .toArray() .slice(0, 6) .map((v, i) => (i === 1 ? v + 1 : v)), startInputType: "utc", title: eventName, description: props.eventType.description, duration: { minutes: props.eventType.length }, ...optional, }); if (event.error) { throw event.error; } return encodeURIComponent(event.value); } return ( isReady && (
) ); } export async function getServerSideProps(context: GetServerSidePropsContext) { const username = asStringOrNull(context.query.user); const typeId = parseInt(asStringOrNull(context.query.type) ?? ""); if (!username || isNaN(typeId)) { return { notFound: true, }; } const user = await prisma.user.findUnique({ where: { username, }, select: { username: true, name: true, bio: true, avatar: true, hideBranding: true, theme: true, plan: true, }, }); if (!user) { return { notFound: true, }; } const eventType = await prisma.eventType.findUnique({ where: { id: typeId, }, select: { id: true, title: true, description: true, length: true, eventName: true, requiresConfirmation: true, }, }); if (!eventType) { return { notFound: true, }; } return { props: { user, eventType, }, }; }