Refactor keybaord listener

This commit is contained in:
Nicolas Mowen 2024-06-18 07:37:50 -06:00
parent 1d97fb54e7
commit 56a0524853
6 changed files with 40 additions and 31 deletions

View File

@ -49,8 +49,14 @@ export default function ExportCard({
useKeyboardListener( useKeyboardListener(
editName != undefined ? ["Enter"] : [], editName != undefined ? ["Enter"] : [],
(_, down, repeat) => { (key, modifiers) => {
if (down && !repeat && editName && editName.update.length > 0) { if (
key == "Enter" &&
modifiers.down &&
!modifiers.repeat &&
editName &&
editName.update.length > 0
) {
onRename(exportedRecording.id, editName.update); onRename(exportedRecording.id, editName.update);
setEditName(undefined); setEditName(undefined);
} }

View File

@ -16,7 +16,9 @@ import {
MdVolumeOff, MdVolumeOff,
MdVolumeUp, MdVolumeUp,
} from "react-icons/md"; } from "react-icons/md";
import useKeyboardListener from "@/hooks/use-keyboard-listener"; import useKeyboardListener, {
KeyModifiers,
} from "@/hooks/use-keyboard-listener";
import { VolumeSlider } from "../ui/slider"; import { VolumeSlider } from "../ui/slider";
import FrigatePlusIcon from "../icons/FrigatePlusIcon"; import FrigatePlusIcon from "../icons/FrigatePlusIcon";
import { import {
@ -137,42 +139,36 @@ export default function VideoControls({
}, [volume, muted]); }, [volume, muted]);
const onKeyboardShortcut = useCallback( const onKeyboardShortcut = useCallback(
(key: string, down: boolean, repeat: boolean) => { (key: string, modifiers: KeyModifiers) => {
if (!modifiers.down) {
return;
}
switch (key) { switch (key) {
case "ArrowDown": case "ArrowDown":
if (down) {
onSeek(-1); onSeek(-1);
}
break; break;
case "ArrowLeft": case "ArrowLeft":
if (down) {
onSeek(-10); onSeek(-10);
}
break; break;
case "ArrowRight": case "ArrowRight":
if (down) {
onSeek(10); onSeek(10);
}
break; break;
case "ArrowUp": case "ArrowUp":
if (down) {
onSeek(1); onSeek(1);
}
break; break;
case "f": case "f":
if (toggleFullscreen && down && !repeat) { if (toggleFullscreen && !modifiers.repeat) {
toggleFullscreen(); toggleFullscreen();
} }
break; break;
case "m": case "m":
if (setMuted && down && !repeat && video) { if (setMuted && !modifiers.repeat && video) {
setMuted(!muted); setMuted(!muted);
} }
break; break;
case " ": case " ":
if (down) {
onPlayPause(!isPlaying); onPlayPause(!isPlaying);
}
break; break;
} }
}, },

View File

@ -1,11 +1,14 @@
import { useCallback, useEffect } from "react"; import { useCallback, useEffect } from "react";
export type KeyModifiers = {
down: boolean;
repeat: boolean;
ctrl: boolean;
};
export default function useKeyboardListener( export default function useKeyboardListener(
keys: string[], keys: string[],
listener: ( listener: (key: string, modifiers: KeyModifiers) => void,
key: string,
modifiers: { down: boolean; repeat: boolean; ctrl: boolean },
) => void,
) { ) {
const keyDownListener = useCallback( const keyDownListener = useCallback(
(e: KeyboardEvent) => { (e: KeyboardEvent) => {

View File

@ -231,8 +231,8 @@ function Logs() {
useKeyboardListener( useKeyboardListener(
["PageDown", "PageUp", "ArrowDown", "ArrowUp"], ["PageDown", "PageUp", "ArrowDown", "ArrowUp"],
(key, down, _) => { (key, modifiers) => {
if (!down) { if (!modifiers.down) {
return; return;
} }

View File

@ -598,7 +598,11 @@ function DetectionReview({
// keyboard // keyboard
useKeyboardListener(["a"], (key, modifiers) => { useKeyboardListener(["a"], (key, modifiers) => {
if (key == "a" && modifiers.down && modifiers.ctrl) { if (modifiers.repeat || !modifiers.down) {
return;
}
if (key == "a" && modifiers.ctrl) {
onSelectAllReviews(); onSelectAllReviews();
} }
}); });

View File

@ -482,12 +482,12 @@ function PtzControlPanel({
useKeyboardListener( useKeyboardListener(
["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "+", "-"], ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "+", "-"],
(key, down, repeat) => { (key, modifiers) => {
if (repeat) { if (modifiers.repeat) {
return; return;
} }
if (!down) { if (!modifiers.down) {
sendPtz("STOP"); sendPtz("STOP");
return; return;
} }