From 40e178d5f37a0a79719d2f5e1eca9928b533d132 Mon Sep 17 00:00:00 2001 From: Chuck Dries <chuck@chuckdries.com> Date: Sat, 19 Jun 2021 11:38:16 -0700 Subject: [PATCH] Rewrite keyboard handler to work in SSR --- package.json | 1 - src/pages/index.js | 44 ++++++++++++++++++++++++++++---------------- yarn.lock | 12 ------------ 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 44d5e04..d8cf12b 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "dependencies": { "@mdx-js/mdx": "^1.6.22", "@mdx-js/react": "^1.6.22", - "@reecelucas/react-use-hotkeys": "^1.3.1", "autoprefixer": "^10.2.6", "babel-eslint": "^10.1.0", "babel-plugin-preval": "^5.0.0", diff --git a/src/pages/index.js b/src/pages/index.js index e79738e..94f0299 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -4,7 +4,6 @@ import { GatsbyImage, getImage } from 'gatsby-plugin-image'; import { Helmet } from 'react-helmet'; import { take } from 'ramda'; import classnames from 'classnames'; -import useHotkeys from '@reecelucas/react-use-hotkeys'; import { getVibrantToHelmetSafeBodyStyle, getVibrant } from '../utils'; import { HeroA } from '../components/IndexComponents'; @@ -44,20 +43,33 @@ const IndexPage = ({ data: { allFile: { edges } } }) => { } }, [isClient, imageIndex, shuffleImage]); - useHotkeys('ArrowRight', () => { - if (imageIndex === images.length - 1) { - setImageIndex(0); - return; - } - setImageIndex(imageIndex + 1); - }); - useHotkeys('ArrowLeft', () => { - if (imageIndex === 0) { - setImageIndex(images.length - 1); - return; - } - setImageIndex(imageIndex - 1); - }); + React.useEffect(() => { + const keyListener = (e) => { + switch (e.code) { + case 'ArrowRight': { + if (imageIndex === images.length - 1) { + setImageIndex(0); + return; + } + setImageIndex(imageIndex + 1); + return; + } + + case 'ArrowLeft': { + if (imageIndex === 0) { + setImageIndex(images.length - 1); + return; + } + setImageIndex(imageIndex - 1); + return; + } + } + }; + document.addEventListener('keydown', keyListener); + return () => { + document.removeEventListener('keydown', keyListener); + }; + }, [imageIndex, images.length]); const vibrant = getVibrant(image); return (<> @@ -106,7 +118,7 @@ const IndexPage = ({ data: { allFile: { edges } } }) => { <div> <button className={classnames( - 'hover:underline inline-block p-3 px-5 m-3 text-lg rounded-md border-2 font-bold font-serif', + 'hover:underline inline-block p-3 px-5 my-3 mr-3 text-lg rounded-md border-2 font-bold font-serif', isClient && 'text-muted-dark bg-muted-light hover:border-muted border-muted-dark')} onClick={shuffleImage} type="button" diff --git a/yarn.lock b/yarn.lock index e4c349c..5709c6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1811,13 +1811,6 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@reecelucas/react-use-hotkeys@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@reecelucas/react-use-hotkeys/-/react-use-hotkeys-1.3.1.tgz#d402853806a6c7880c336f669b40f214a998451f" - integrity sha512-TdWJepdTxKuNKfycJK4/6iHjl8PolIZcwtohkXUa3EGvFOAedQJWEKZRGWGSgaSBLHeH6f6JdxuWeyR+wIxA0g== - dependencies: - shim-keyboard-event-key "^1.0.3" - "@sideway/address@^4.1.0": version "4.1.2" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" @@ -12317,11 +12310,6 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== -shim-keyboard-event-key@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/shim-keyboard-event-key/-/shim-keyboard-event-key-1.0.3.tgz#9a9441d6b7d1fb25819d86182caf554e821a515c" - integrity sha512-PTNRkOxDlZ2+Xz4CbKJJsh/pe1DJdaC+b4HHV02A1aEWNmwh1g9am0ZiU/ktu3uVfQrY3yDHTOVhst3xpLhw2A== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"