import clsx from 'clsx'; import Link from 'next/link'; import { signIn, signOut, useSession } from 'next-auth/react'; import type { ReactNode } from 'react'; import { Fragment, useState } from 'react'; import { Dialog, Menu, Transition } from '@headlessui/react'; import { Bars3BottomLeftIcon, BriefcaseIcon, CurrencyDollarIcon, DocumentTextIcon, HomeIcon, XMarkIcon, } from '@heroicons/react/24/outline'; const sidebarNavigation = [ { current: false, href: '/', icon: HomeIcon, name: 'Home' }, { current: false, href: '/resumes', icon: DocumentTextIcon, name: 'Resumes' }, { current: false, href: '/questions', icon: BriefcaseIcon, name: 'Questions', }, { current: false, href: '/offers', icon: CurrencyDollarIcon, name: 'Offers' }, ]; type Props = Readonly<{ children: ReactNode; }>; function ProfileJewel() { const { data: session, status } = useSession(); const isSessionLoading = status === 'loading'; if (isSessionLoading) { return null; } if (session == null) { return ( { event.preventDefault(); signIn(); }}> Sign in ); } const userNavigation = [ { href: '/profile', name: 'Profile' }, { href: '/api/auth/signout', name: 'Sign out', onClick: (event: MouseEvent) => { event.preventDefault(); signOut(); }, }, ]; return (
Open user menu {session?.user?.image == null ? ( Render some icon ) : ( {session?.user?.email )}
{userNavigation.map((item) => ( {({ active }) => ( {item.name} )} ))}
); } export default function AppShell({ children }: Props) { const [mobileMenuOpen, setMobileMenuOpen] = useState(false); return (
{/* Narrow sidebar */}
Your Company
{sidebarNavigation.map((item) => (
{/* Mobile menu */}
Your Company
{/* Content area */}
Some menu items
{/* Main content */}
{children}
); }