// @flow import { observer } from "mobx-react"; import { SunIcon, MoonIcon } from "outline-icons"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; 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 Separator from "components/ContextMenu/Separator"; 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 } = 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]); return ( <> setKeyboardShortcutsOpen(false)} title={t("Keyboard shortcuts")} > {props.children} {t("Settings")} setKeyboardShortcutsOpen(true)}> {t("Keyboard shortcuts")} {t("API documentation")} {t("Changelog")} {t("Send us feedback")} {t("Report a bug")} {t("Log out")} ); } const ChangeTheme = styled(Flex)` width: 100%; `; export default observer(AccountMenu);