diff --git a/app/web/src/components/EditorMenu/AllShortcutsModal.tsx b/app/web/src/components/EditorMenu/AllShortcutsModal.tsx index 44303df..788fedb 100644 --- a/app/web/src/components/EditorMenu/AllShortcutsModal.tsx +++ b/app/web/src/components/EditorMenu/AllShortcutsModal.tsx @@ -1,5 +1,5 @@ import { Menu } from '@headlessui/react' -import { useEffect, useState } from 'react' +import { createContext, useContext, useEffect, useState } from 'react' import { useHotkeys } from 'react-hotkeys-hook' import { makeStyles } from '@material-ui/core/styles' import Dialog from '@material-ui/core/Dialog' @@ -14,19 +14,37 @@ const useStyles = makeStyles({ }, }) +interface ShortcutsModalContextType { + open: boolean + toggleOpen: () => any +} + +export const ShortcutsModalContext = createContext({ + open: false, + toggleOpen: () => {}, +}) + +export function useShortcutsModalContext() { + return useContext(ShortcutsModalContext) +} + const AllShortcutsModal = () => { const classes = useStyles() - const [open, setOpen] = useState(false) - useHotkeys(SHORTCUT, () => setOpen(!open), [open]) + const { open, toggleOpen } = useShortcutsModalContext() return ( <> setOpen(false)} - className={classes.root} + onClose={() => toggleOpen()} + className={classes.root + ' bg-transparent'} + PaperProps={{ + style: { + backgroundColor: 'transparent', + }, + }} > -
+

All Shortcuts

{editorMenuConfig .filter((menu) => menu.items.length) @@ -35,7 +53,7 @@ const AllShortcutsModal = () => {

{menu.label}

{menu.items.map((item) => (

{item.label}

diff --git a/app/web/src/components/EditorMenu/menuConfig.tsx b/app/web/src/components/EditorMenu/menuConfig.tsx index d41eabc..4b6e9ce 100644 --- a/app/web/src/components/EditorMenu/menuConfig.tsx +++ b/app/web/src/components/EditorMenu/menuConfig.tsx @@ -3,6 +3,7 @@ import { useRender } from 'src/components/IdeWrapper/useRender' import { makeStlDownloadHandler, PullTitleFromFirstLine } from './helpers' import { useSaveCode } from 'src/components/IdeWrapper/useSaveCode' import { DropdownItem } from './Dropdowns' +import { useShortcutsModalContext } from './AllShortcutsModal' export function cmdOrCtrl() { return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform) ? '⌘' : 'Ctrl' @@ -83,8 +84,8 @@ const viewMenuConfig = { shortcutLabel: 'Ctrl Shift /', component: (props) => { const { config } = props - const [open, setOpen] = useShortcutModalContext() - config.callback = () => setOpen(true) + const { toggleOpen } = useShortcutsModalContext() + config.callback = toggleOpen return }, }, diff --git a/app/web/src/components/IdeWrapper/IdeWrapper.tsx b/app/web/src/components/IdeWrapper/IdeWrapper.tsx index 40f830e..1a52123 100644 --- a/app/web/src/components/IdeWrapper/IdeWrapper.tsx +++ b/app/web/src/components/IdeWrapper/IdeWrapper.tsx @@ -8,6 +8,7 @@ import Svg from 'src/components/Svg/Svg' import { useIdeInit } from 'src/components/EncodedUrl/helpers' import { useIdeContext } from 'src/helpers/hooks/useIdeContext' import { useSaveCode } from 'src/components/IdeWrapper/useSaveCode' +import { ShortcutsModalContext } from 'src/components/EditorMenu/AllShortcutsModal' interface Props { cadPackage: string @@ -22,18 +23,25 @@ const IdeWrapper = ({ cadPackage }: Props) => { saveCode({ code: state.code }) } useIdeInit(cadPackage, project?.code || state?.code) + const [shortcutModalOpen, setShortcutModalOpen] = useState(false) + const shortcutModalContextValues = { + open: shortcutModalOpen, + toggleOpen: () => setShortcutModalOpen(!shortcutModalOpen), + } return (
-
- -
-
- - -
+ +
+ +
+
+ + +
+
) }