import { signOut } from "next-auth/react"; import { usePathname } from "next/navigation"; import { useEffect, useState } from "react"; import HelpMenuItem from "@calcom/features/ee/support/components/HelpMenuItem"; import { classNames } from "@calcom/lib"; import { JOIN_COMMUNITY, ROADMAP, DESKTOP_APP_LINK } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery"; import { Avatar, Dropdown, DropdownItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuTrigger, Icon, } from "@calcom/ui"; // TODO (Platform): we shouldnt be importing from web here import { useGetUserAttributes } from "@calcom/web/components/settings/platform/hooks/useGetUserAttributes"; import usePostHog from "../../ee/event-tracking/lib/posthog/userPostHog"; import FreshChatProvider from "../../ee/support/lib/freshchat/FreshChatProvider"; interface UserDropdownProps { small?: boolean; } export function UserDropdown({ small }: UserDropdownProps) { const { isPlatformUser } = useGetUserAttributes(); const { t } = useLocale(); const { data: user } = useMeQuery(); const pathname = usePathname(); const posthog = usePostHog(); const isPlatformPages = pathname?.startsWith("/settings/platform"); useEffect(() => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore const Beacon = window.Beacon; // window.Beacon is defined when user actually opens up HelpScout and username is available here. On every re-render update session info, so that it is always latest. Beacon && Beacon("session-data", { username: user?.username || "Unknown", screenResolution: `${screen.width}x${screen.height}`, }); }); const [helpOpen, setHelpOpen] = useState(false); const [menuOpen, setMenuOpen] = useState(false); const onHelpItemSelect = () => { setHelpOpen(false); setMenuOpen(false); }; // Prevent rendering dropdown if user isn't available. // We don't want to show nameless user. if (!user) { return null; } return ( setMenuOpen((menuOpen) => !menuOpen)}> { setMenuOpen(false); setHelpOpen(false); }} className="group overflow-hidden rounded-md"> {helpOpen ? ( onHelpItemSelect()} /> ) : ( <> {!isPlatformPages && ( <> )} {t("join_our_community")} {t("visit_roadmap")} {!isPlatformPages && ( {t("download_desktop_app")} )} {!isPlatformPages && isPlatformUser && ( Platform )} )} ); }