import Link from "next/link"; import { Fragment, useEffect, useState } from "react"; import { useRouter } from "next/router"; import { signOut, useSession } from "next-auth/client"; import { Dialog, Menu, Transition } from "@headlessui/react"; import { collectPageParameters, telemetryEventTypes, useTelemetry } from "../lib/telemetry"; import { MenuIcon, SelectorIcon, XIcon } from "@heroicons/react/outline"; import { CalendarIcon, ClockIcon, CogIcon, PuzzleIcon, SupportIcon, ChatAltIcon, LogoutIcon, ExternalLinkIcon, LinkIcon, } from "@heroicons/react/solid"; function classNames(...classes) { return classes.filter(Boolean).join(" "); } export default function Shell(props) { const router = useRouter(); const [session, loading] = useSession(); const telemetry = useTelemetry(); const navigation = [ { name: "Event Types", href: "/event-types", icon: LinkIcon, current: router.pathname.startsWith("/event-types"), }, { name: "Bookings", href: "/bookings", icon: ClockIcon, current: router.pathname.startsWith("/bookings"), }, { name: "Availability", href: "/availability", icon: CalendarIcon, current: router.pathname.startsWith("/availability"), }, { name: "Integrations", href: "/integrations", icon: PuzzleIcon, current: router.pathname.startsWith("/integrations"), }, { name: "Settings", href: "/settings", icon: CogIcon, current: router.pathname.startsWith("/settings") }, ]; const [sidebarOpen, setSidebarOpen] = useState(false); useEffect(() => { telemetry.withJitsu((jitsu) => { return jitsu.track(telemetryEventTypes.pageView, collectPageParameters(router.pathname)); }); }, [telemetry]); const logoutHandler = () => { signOut({ redirect: false }).then(() => router.push("/auth/logout")); }; if (!loading && !session) { router.replace("/auth/login"); } return session ? (
Workflow
{/* Force sidebar to shrink to fit close icon */}
{/* Static sidebar for desktop */}
{/* Sidebar component, swap this element with another sidebar if you like */}
Calendso
{/* User account dropdown */} {({ open }) => ( <>
{session.user.name} {session.user.username}
{({ active }) => ( )} {({ active }) => ( )}
{({ active }) => ( )}
)}

{props.heading}

{props.children}
) : null; }