From 516344aa5bd9021c65a7dbaf7e11e8e1dd7a2be7 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Fri, 15 Sep 2023 11:06:32 -0500 Subject: [PATCH] use useEffect for key listeners --- web/src/components/CameraControlPanel.jsx | 29 +++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/web/src/components/CameraControlPanel.jsx b/web/src/components/CameraControlPanel.jsx index fe5b12a60..31be6b291 100644 --- a/web/src/components/CameraControlPanel.jsx +++ b/web/src/components/CameraControlPanel.jsx @@ -1,5 +1,5 @@ import { h } from 'preact'; -import { useState } from 'preact/hooks'; +import { useEffect, useCallback, useState } from 'preact/hooks'; import useSWR from 'swr'; import { usePtzCommand } from '../api/ws'; import ActivityIndicator from './ActivityIndicator'; @@ -44,12 +44,8 @@ export default function CameraControlPanel({ camera = '' }) { sendPtz('STOP'); }; - if (!ptz) { - return ; - } - - document.addEventListener('keydown', (e) => { - if (!e) { + const keydownListener = useCallback((e) => { + if (!ptz || !e) { return; } @@ -83,9 +79,9 @@ export default function CameraControlPanel({ camera = '' }) { } } } - }); + }, [ptz]); - document.addEventListener('keyup', (e) => { + const keyupListener = useCallback((e) => { if (!e || e.repeat) { return; } @@ -101,7 +97,20 @@ export default function CameraControlPanel({ camera = '' }) { e.preventDefault(); onSetStop(e); } - }); + }, []); + + useEffect(() => { + document.addEventListener('keydown', keydownListener); + document.addEventListener('keyup', keyupListener); + return () => { + document.removeEventListener('keydown', keydownListener); + document.removeEventListener('keyup', keyupListener); + }; + }, [keydownListener, keyupListener, ptz]); + + if (!ptz) { + return ; + } return (