import { type HTMLAttributes, useEffect, useState } from 'react'; import { ReadStatus } from '@prisma/client'; import { InboxIcon, MenuIcon, SearchIcon } from 'lucide-react'; import { Link, useParams } from 'react-router'; import { useSession } from '@documenso/lib/client-only/providers/session'; import { isPersonalLayout } from '@documenso/lib/utils/organisations'; import { getRootHref } from '@documenso/lib/utils/params'; import { trpc } from '@documenso/trpc/react'; import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; import { BrandingLogo } from '~/components/general/branding-logo'; import { AppCommandMenu } from './app-command-menu'; import { AppNavDesktop } from './app-nav-desktop'; import { AppNavMobile } from './app-nav-mobile'; import { MenuSwitcher } from './menu-switcher'; import { OrgMenuSwitcher } from './org-menu-switcher'; export type HeaderProps = HTMLAttributes; export const Header = ({ className, ...props }: HeaderProps) => { const params = useParams(); const { organisations } = useSession(); const [isCommandMenuOpen, setIsCommandMenuOpen] = useState(false); const [isHamburgerMenuOpen, setIsHamburgerMenuOpen] = useState(false); const [scrollY, setScrollY] = useState(0); const { data: unreadCountData } = trpc.document.inbox.getCount.useQuery( { readStatus: ReadStatus.NOT_OPENED, }, { // refetchInterval: 30000, // Refetch every 30 seconds }, ); useEffect(() => { const onScroll = () => { setScrollY(window.scrollY); }; window.addEventListener('scroll', onScroll); return () => window.removeEventListener('scroll', onScroll); }, []); return ( 5 && 'border-b-border', className, )} {...props} > {unreadCountData && unreadCountData.count > 0 && ( {unreadCountData.count > 99 ? '99+' : unreadCountData.count} )} {isPersonalLayout(organisations) ? : } setIsCommandMenuOpen(true)}> setIsHamburgerMenuOpen(true)}> ); };