diff --git a/src/contexts/KeyboardContext.js b/src/contexts/KeyboardContext.js index ec47dd9..592e60f 100644 --- a/src/contexts/KeyboardContext.js +++ b/src/contexts/KeyboardContext.js @@ -74,4 +74,21 @@ export function useKeyboard(onKeyDown, onKeyUp) { }); } +/** + * Handler to handle a blur event. Useful when using a shortcut that uses the Alt or Cmd + * @param {FocusEvent} onBlur + */ +export function useBlur(onBlur) { + useEffect(() => { + if (onBlur) { + window.addEventListener("blur", onBlur); + } + return () => { + if (onBlur) { + window.removeEventListener("blur", onBlur); + } + }; + }); +} + export default KeyboardContext; diff --git a/src/modals/SelectMapModal.js b/src/modals/SelectMapModal.js index 69cb5c5..9fecc92 100644 --- a/src/modals/SelectMapModal.js +++ b/src/modals/SelectMapModal.js @@ -1,4 +1,4 @@ -import React, { useRef, useState, useEffect } from "react"; +import React, { useRef, useState } from "react"; import { Button, Flex, Label } from "theme-ui"; import shortid from "shortid"; import Case from "case"; @@ -26,7 +26,7 @@ import useResponsiveLayout from "../hooks/useResponsiveLayout"; import { useMapData } from "../contexts/MapDataContext"; import { useAuth } from "../contexts/AuthContext"; -import { useKeyboard } from "../contexts/KeyboardContext"; +import { useKeyboard, useBlur } from "../contexts/KeyboardContext"; const defaultMapProps = { showGrid: false, @@ -382,17 +382,12 @@ function SelectMapModal({ useKeyboard(handleKeyDown, handleKeyUp); - // Set select mode to single when alt+tabing - useEffect(() => { - function handleBlur() { - setSelectMode("single"); - } + // Set select mode to single when cmd+tabing + function handleBlur() { + setSelectMode("single"); + } - window.addEventListener("blur", handleBlur); - return () => { - window.removeEventListener("blur", handleBlur); - }; - }, []); + useBlur(handleBlur); const layout = useResponsiveLayout(); diff --git a/src/modals/SelectTokensModal.js b/src/modals/SelectTokensModal.js index 2c4e009..b506843 100644 --- a/src/modals/SelectTokensModal.js +++ b/src/modals/SelectTokensModal.js @@ -1,4 +1,4 @@ -import React, { useRef, useState, useEffect } from "react"; +import React, { useRef, useState } from "react"; import { Flex, Label, Button } from "theme-ui"; import shortid from "shortid"; import Case from "case"; @@ -20,7 +20,7 @@ import useResponsiveLayout from "../hooks/useResponsiveLayout"; import { useTokenData } from "../contexts/TokenDataContext"; import { useAuth } from "../contexts/AuthContext"; -import { useKeyboard } from "../contexts/KeyboardContext"; +import { useKeyboard, useBlur } from "../contexts/KeyboardContext"; function SelectTokensModal({ isOpen, onRequestClose }) { const { userId } = useAuth(); @@ -224,17 +224,12 @@ function SelectTokensModal({ isOpen, onRequestClose }) { useKeyboard(handleKeyDown, handleKeyUp); - // Set select mode to single when alt+tabing - useEffect(() => { - function handleBlur() { - setSelectMode("single"); - } + // Set select mode to single when cmd+tabing + function handleBlur() { + setSelectMode("single"); + } - window.addEventListener("blur", handleBlur); - return () => { - window.removeEventListener("blur", handleBlur); - }; - }, []); + useBlur(handleBlur); const layout = useResponsiveLayout();