// @flow import { observer } from "mobx-react"; import { SunIcon, MoonIcon } from "outline-icons"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { useMenuState, MenuButton } from "reakit/Menu"; import styled from "styled-components"; import { developers, changelog, githubIssuesUrl, mailToUrl, settings, } from "shared/utils/routeHelpers"; import KeyboardShortcuts from "scenes/KeyboardShortcuts"; import ContextMenu from "components/ContextMenu"; import MenuItem, { MenuAnchor } from "components/ContextMenu/MenuItem"; import Template from "components/ContextMenu/Template"; import Flex from "components/Flex"; import Guide from "components/Guide"; import usePrevious from "hooks/usePrevious"; import useStores from "hooks/useStores"; type Props = {| children: (props: any) => React.Node, |}; const AppearanceMenu = React.forwardRef((props, ref) => { const { ui } = useStores(); const { t } = useTranslation(); const menu = useMenuState(); return ( <> {(props) => ( {t("Appearance")} {ui.resolvedTheme === "light" ? : } )} ui.setTheme("system")} selected={ui.theme === "system"} > {t("System")} ui.setTheme("light")} selected={ui.theme === "light"} > {t("Light")} ui.setTheme("dark")} selected={ui.theme === "dark"} > {t("Dark")} ); }); function AccountMenu(props: Props) { const menu = useMenuState({ placement: "bottom-start", modal: true, }); const { auth, ui, quickMenu } = useStores(); const previousTheme = usePrevious(ui.theme); const { t } = useTranslation(); const [keyboardShortcutsOpen, setKeyboardShortcutsOpen] = React.useState( false ); React.useEffect(() => { if (ui.theme !== previousTheme) { menu.hide(); } }, [menu, ui.theme, previousTheme]); const items = [ { title: t("Settings"), to: settings(), visible: true, }, { title: t("Keyboard shortcuts"), onClick: () => setKeyboardShortcutsOpen(true), visible: true, }, { title: t("API documentation"), href: developers(), }, { type: "separator", }, { title: t("Changelog"), href: changelog(), }, { title: t("Send us feedback"), href: mailToUrl(), }, { title: t("Report a bug"), href: githubIssuesUrl(), }, { type: "separator", }, { type: "separator", }, { title: t("Log out"), onClick: auth.logout, }, // ]; React.useEffect(() => { quickMenu.addContext({ id: "account", items, title: t("Account"), }); return () => quickMenu.removeContext("account"); }, [quickMenu, items, t]); return ( <> setKeyboardShortcutsOpen(false)} title={t("Keyboard shortcuts")} > {props.children}