import { observer } from "mobx-react"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { MenuButton, useMenuState } from "reakit/Menu"; import styled from "styled-components"; import ContextMenu from "~/components/ContextMenu"; import Template from "~/components/ContextMenu/Template"; import { createAction } from "~/actions"; import { development } from "~/actions/definitions/debug"; import { navigateToSettings, openKeyboardShortcuts, openChangelog, openAPIDocumentation, openBugReportUrl, openFeedbackUrl, logout, } from "~/actions/definitions/navigation"; import { changeTheme } from "~/actions/definitions/settings"; import useCurrentTeam from "~/hooks/useCurrentTeam"; import usePrevious from "~/hooks/usePrevious"; import useSessions from "~/hooks/useSessions"; import useStores from "~/hooks/useStores"; import separator from "~/menus/separator"; type Props = { children: (props: any) => React.ReactNode; }; function AccountMenu(props: Props) { const [sessions] = useSessions(); const menu = useMenuState({ unstable_offset: [8, 0], placement: "bottom-start", modal: true, }); const { ui } = useStores(); const { theme } = ui; const team = useCurrentTeam(); const previousTheme = usePrevious(theme); const { t } = useTranslation(); React.useEffect(() => { if (theme !== previousTheme) { menu.hide(); } }, [menu, theme, previousTheme]); const actions = React.useMemo(() => { // @ts-expect-error ts-migrate(2339) FIXME: Property 'filter' does not exist on type 'Session[... Remove this comment to see the full error message const otherSessions = sessions.filter( // @ts-expect-error ts-migrate(7006) FIXME: Parameter 'session' implicitly has an 'any' type. (session) => session.teamId !== team.id && session.url !== team.url ); return [ navigateToSettings, openKeyboardShortcuts, openAPIDocumentation, separator(), openChangelog, openFeedbackUrl, openBugReportUrl, development, changeTheme, separator(), ...(otherSessions.length ? [ createAction({ name: t("Switch team"), section: "account", // @ts-expect-error ts-migrate(7006) FIXME: Parameter 'session' implicitly has an 'any' type. children: otherSessions.map((session) => ({ name: session.name, icon: , perform: () => (window.location.href = session.url), })), }), ] : []), logout, ]; }, [team.id, team.url, sessions, t]); return ( <> {props.children}