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(
editName != undefined ? ["Enter"] : [],
(_, down, repeat) => {
if (down && !repeat && editName && editName.update.length > 0) {
(key, modifiers) => {
if (
key == "Enter" &&
modifiers.down &&
!modifiers.repeat &&
editName &&
editName.update.length > 0
) {
onRename(exportedRecording.id, editName.update);
setEditName(undefined);
}

View File

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

View File

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

View File

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

View File

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

View File

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