import Head from "next/head"; import prisma from "../../lib/prisma"; import { getSession, useSession } from "next-auth/client"; import Shell from "../../components/Shell"; import { useRouter } from "next/router"; import dayjs from "dayjs"; import { Fragment } from "react"; import { Menu, Transition } from "@headlessui/react"; import { DotsHorizontalIcon } from "@heroicons/react/solid"; import classNames from "@lib/classNames"; import { ClockIcon, XIcon } from "@heroicons/react/outline"; import Loader from "@components/Loader"; export default function Bookings({ bookings }) { // eslint-disable-next-line @typescript-eslint/no-unused-vars const [session, loading] = useSession(); const router = useRouter(); if (loading) { return ; } async function confirmBookingHandler(booking, confirm: boolean) { const res = await fetch("/api/book/confirm", { method: "PATCH", body: JSON.stringify({ id: booking.id, confirmed: confirm }), headers: { "Content-Type": "application/json", }, }); if (res.ok) { await router.replace(router.asPath); } } return (
Bookings | Calendso
{bookings .filter((booking) => !booking.confirmed && !booking.rejected) .concat(bookings.filter((booking) => booking.confirmed || booking.rejected)) .map((booking) => ( ))}
{!booking.confirmed && !booking.rejected && ( Unconfirmed )}
{booking.title}
{dayjs(booking.startTime).format("D MMMM YYYY")}:{" "} {dayjs(booking.startTime).format("HH:mm")} -{" "} {dayjs(booking.endTime).format("HH:mm")}
{dayjs(booking.startTime).format("D MMMM YYYY")}
{dayjs(booking.startTime).format("HH:mm")} -{" "} {dayjs(booking.endTime).format("HH:mm")}
{!booking.confirmed && !booking.rejected && ( <> )} {booking.confirmed && !booking.rejected && ( <> {({ open }) => ( <>
Open options
{({ active }) => ( )} {({ active }) => ( )}
)}
)} {!booking.confirmed && booking.rejected && (
Rejected
)}
); } export async function getServerSideProps(context) { const session = await getSession(context); if (!session) { return { redirect: { permanent: false, destination: "/auth/login" } }; } const user = await prisma.user.findFirst({ where: { email: session.user.email, }, select: { id: true, }, }); const b = await prisma.booking.findMany({ where: { userId: user.id, }, select: { uid: true, title: true, description: true, attendees: true, confirmed: true, rejected: true, id: true, startTime: true, endTime: true, }, orderBy: { startTime: "asc", }, }); const bookings = b.reverse().map((booking) => { return { ...booking, startTime: booking.startTime.toISOString(), endTime: booking.endTime.toISOString() }; }); return { props: { bookings } }; }