diff --git a/.changeset/green-horses-itch.md b/.changeset/green-horses-itch.md new file mode 100644 index 00000000000..4fc2dbd8bee --- /dev/null +++ b/.changeset/green-horses-itch.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": patch +--- + +You can now close GraphiQL Playground with Escape key diff --git a/.changeset/tiny-paws-nail.md b/.changeset/tiny-paws-nail.md index 97b894b32b5..24de975a924 100644 --- a/.changeset/tiny-paws-nail.md +++ b/.changeset/tiny-paws-nail.md @@ -2,4 +2,4 @@ "saleor-dashboard": patch --- -GraphQL Playground now no longer uses additional variables when using `shift + cmd + '` keyboard shortcut as the shortcut was removed. You can now only use one shortcut `cmd + '`, simplifying your workflow. +GraphQL Playground now no longer uses additional variables when using `shift + cmd + '` keyboard shortcut as the shortcut was removed. You can now only use `cmd + '`, simplifying your workflow. diff --git a/src/components/DevModePanel/DevModePanel.tsx b/src/components/DevModePanel/DevModePanel.tsx index f54cc77c51e..a06db609b56 100644 --- a/src/components/DevModePanel/DevModePanel.tsx +++ b/src/components/DevModePanel/DevModePanel.tsx @@ -7,7 +7,7 @@ import { createFetch } from "@saleor/sdk"; import React from "react"; import { useIntl } from "react-intl"; -import GraphiQL from "../GraphiQLPlain"; +import PlainGraphiQL from "../GraphiQLPlain"; import { useDevModeContext } from "./hooks"; import { messages } from "./messages"; @@ -50,7 +50,7 @@ export const DevModePanel: React.FC = () => { {intl.formatMessage(messages.title)} - { + const handleOpen = () => { setDevModeContent(""); setVariables(""); setDevModeVisibility(!isDevModeVisible); }; - useDevModeKeyTrigger(triggerHandler); + const handleClose = () => { + setDevModeVisibility(false); + }; + + useDevModeKeyTrigger(handleOpen, handleClose); return ( void; +type HandleOpen = () => void; +type HandleClose = () => void; export const useDevModeKeyTrigger = ( - callbackHandler: DevModeKeyTriggerCallback, + handleOpen: HandleOpen, + handleClose: HandleClose, ) => { useEffect(() => { - const handler = (event: KeyboardEvent) => { + const keyDownHandler = (event: KeyboardEvent) => { if ((event.metaKey || event.ctrlKey) && event.code === "Quote") { - callbackHandler(); + handleOpen(); } }; - document.addEventListener("keydown", handler); - return () => document.removeEventListener("keydown", handler); - }, [callbackHandler]); + const keyUpHandler = (event: KeyboardEvent) => { + if (event.code === "Escape") { + handleClose(); + } + }; + + document.addEventListener("keydown", keyDownHandler); + // GraphiQL Playground stops propagation of keydown event for Escape key + document.addEventListener("keyup", keyUpHandler); + + return () => { + document.removeEventListener("keydown", keyDownHandler); + document.removeEventListener("keyup", keyUpHandler); + }; + }, [handleOpen, handleClose]); };