Skip to content

Instantly share code, notes, and snippets.

@colinfwren
Created October 6, 2021 00:11
Show Gist options
  • Save colinfwren/70a17256962ba9609c28848323d2efc4 to your computer and use it in GitHub Desktop.
Save colinfwren/70a17256962ba9609c28848323d2efc4 to your computer and use it in GitHub Desktop.
Capturing key events at the top most level and passing into context for use in app
import React, { useEffect, useState } from "react";
import { AppProvider } from "./AppContext";
import { Map } from "./Map";
export default function App() {
const [isInSelectMode, setIsInSelectMode] = useState(false);
const [selectedEntities, setSelectedEntities] = useState([]);
function handleKeyDown(e) {
if (!isInSelectMode && e.keyCode === 16) {
setIsInSelectMode(true);
}
}
function handleKeyUp(e) {
if (isInSelectMode && e.keyCode === 16) {
setIsInSelectMode(false);
}
}
useEffect(() => {
document.addEventListener("keydown", handleKeyDown);
document.addEventListener("keyup", handleKeyUp);
return function cleanUp() {
document.removeEventListener("keydown", handleKeyDown);
document.removeEventListener("keyup", handleKeyUp);
};
});
return (
<AppProvider
value={{
isInSelectMode,
setIsInSelectMode,
selectedEntities,
setSelectedEntities
}}
>
<Map />
</AppProvider>
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment