Skip to content

Commit

Permalink
Merge pull request #22 from mbsantiago/fix/better-shortkeys
Browse files Browse the repository at this point in the history
Use react-hotkeys-hook to better handle hotkeys
  • Loading branch information
mbsantiago committed Jun 8, 2024
2 parents 893780c + 1b34e93 commit 515ba06
Show file tree
Hide file tree
Showing 14 changed files with 129 additions and 100 deletions.
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
SHELL := /bin/bash

dev-front:
cd front && npm run dev

dev-back:
cd back && make serve-dev

dev-docs:
cd back && make serve-docs

install-dev:
bash scripts/install_dev.sh

Expand Down
2 changes: 1 addition & 1 deletion back/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ dependencies = [
"uvicorn[standard]>=0.20.0",
"aiosqlite>=0.18.0",
"passlib>=1.7.4",
"soundevent[all]>=2.0",
"soundevent[all]>=2.0.1",
"fastapi>=0.101.0",
"pydantic-settings>=2.0.2",
"fastapi-users[sqlalchemy]>=12.1.1",
Expand Down
3 changes: 2 additions & 1 deletion back/requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
# features: []
# all-features: false
# with-sources: false
# generate-hashes: false

-e file:.
affine==2.4.0
Expand Down Expand Up @@ -340,7 +341,7 @@ sniffio==1.3.1
# via httpx
snuggs==1.4.7
# via rasterio
soundevent==2.0.0
soundevent==2.0.1
# via whombat
soundfile==0.12.1
# via crowsetta
Expand Down
3 changes: 2 additions & 1 deletion back/requirements.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
# features: []
# all-features: false
# with-sources: false
# generate-hashes: false

-e file:.
affine==2.4.0
Expand Down Expand Up @@ -215,7 +216,7 @@ sniffio==1.3.1
# via httpx
snuggs==1.4.7
# via rasterio
soundevent==2.0.0
soundevent==2.0.1
# via whombat
soundfile==0.12.1
# via crowsetta
Expand Down
75 changes: 73 additions & 2 deletions front/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions front/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"react-dom": "^18.3.1",
"react-hook-form": "^7.51.4",
"react-hot-toast": "^2.4.1",
"react-hotkeys-hook": "^4.5.0",
"react-leaflet": "^4.2.1",
"react-plotly.js": "^2.6.0",
"react-router-dom": "^6.23.1",
Expand All @@ -43,6 +44,7 @@
"zustand": "^4.5.2"
},
"devDependencies": {
"@playwright/test": "^1.44.1",
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/geojson": "^7946.0.14",
"@types/leaflet": "^1.9.12",
Expand All @@ -60,6 +62,7 @@
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-prettier": "^5.1.3",
"next": "^14.2.3",
"playwright": "^1.44.1",
"prettier": "^3.2.5",
"react-types": "^0.1.0",
"ts-prune": "^0.10.3"
Expand Down
23 changes: 13 additions & 10 deletions front/src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import "./globals.css";
import { StrictMode } from "react";
import { Mulish } from "next/font/google";

import { ClientProvider } from "@/app/client";
Expand All @@ -18,15 +19,17 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
<html lang="en">
<body
className={`${mulish.className} font-sans bg-stone-100 dark:bg-stone-900 text-stone-900 dark:text-stone-100 min-h-screen w-screen overflow-x-hidden`}
>
<ClientProvider>
{children}
<Notification />
</ClientProvider>
</body>
</html>
<StrictMode>
<html lang="en">
<body
className={`${mulish.className} font-sans bg-stone-100 dark:bg-stone-900 text-stone-900 dark:text-stone-100 min-h-screen w-screen overflow-x-hidden`}
>
<ClientProvider>
{children}
<Notification />
</ClientProvider>
</body>
</html>
</StrictMode>
);
}
6 changes: 2 additions & 4 deletions front/src/components/ShortcutHelper.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { useHotkeys } from "react-hotkeys-hook";
import { useState } from "react";
import { HelpIcon } from "@/components/icons";
import { DialogOverlay } from "@/components/Dialog";
import KeyboardKey from "@/components/KeyboardKey";
import Button from "@/components/Button";
import { useKeyPressEvent } from "react-use";

import useKeyFilter from "@/hooks/utils/useKeyFilter";

type Shortcut = {
label: string;
Expand All @@ -19,7 +17,7 @@ export default function ShortcutHelper({
shortcuts?: Shortcut[];
} = {}) {
const [show, setShow] = useState(false);
useKeyPressEvent(useKeyFilter({ key: "h" }), () => setShow((v) => !v));
useHotkeys("h", () => setShow((v) => !v));

return (
<>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,13 @@ export default function ClipAnnotationSpectrogram({
[onSelectAnnotation],
);

const { seek } = audio;
const { seek, play } = audio;
const handleDoubleClick = useCallback(
({ position }: { position: Position }) => {
seek(position.time);
play();
},
[seek],
[seek, play],
);

const spectrogram = useSpectrogram({
Expand Down Expand Up @@ -249,7 +250,7 @@ export default function ClipAnnotationSpectrogram({
)}
{withPlayer && <Player {...audio} />}
</div>
<div className="relative overflow-hidden rounded-md" style={{ height }}>
<div className="overflow-hidden relative rounded-md" style={{ height }}>
<SpectrogramTags
disabled={disabled}
tags={annotate.tags}
Expand Down
10 changes: 4 additions & 6 deletions front/src/hooks/annotation/useAnnotateClipKeyShortcuts.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { useKeyPressEvent } from "react-use";

import useKeyFilter from "@/hooks/utils/useKeyFilter";
import { useHotkeys } from "react-hotkeys-hook";

import type { KeyShortcut } from "@/hooks/utils/useKeyFilter";

Expand Down Expand Up @@ -29,7 +27,7 @@ export default function useAnnotateClipKeyShortcuts(props: {
enabled?: boolean;
}) {
const { onGoCreate, onGoSelect, onGoDelete, enabled = true } = props;
useKeyPressEvent(useKeyFilter({ enabled, key: "a" }), onGoCreate);
useKeyPressEvent(useKeyFilter({ enabled, key: "s" }), onGoSelect);
useKeyPressEvent(useKeyFilter({ enabled, key: "d" }), onGoDelete);
useHotkeys("a", onGoCreate, { enabled });
useHotkeys("s", onGoSelect, { enabled });
useHotkeys("d", onGoDelete, { enabled });
}
24 changes: 11 additions & 13 deletions front/src/hooks/annotation/useAnnotateTasksKeyShortcuts.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { useKeyPressEvent } from "react-use";

import useKeyFilter from "@/hooks/utils/useKeyFilter";
import { useHotkeys } from "react-hotkeys-hook";

import type { KeyShortcut } from "@/hooks/utils/useKeyFilter";

Expand Down Expand Up @@ -33,11 +31,11 @@ export const ANNOTATE_TASKS_KEY_SHORTCUTS: KeyShortcut[] = [
];

export default function useAnnotateTaskKeyShortcuts(props: {
onGoNext?: () => void;
onGoPrevious?: () => void;
onMarkCompleted?: () => void;
onMarkRejected?: () => void;
onMarkVerified?: () => void;
onGoNext: () => void;
onGoPrevious: () => void;
onMarkCompleted: () => void;
onMarkRejected: () => void;
onMarkVerified: () => void;
enabled?: boolean;
}) {
const {
Expand All @@ -49,9 +47,9 @@ export default function useAnnotateTaskKeyShortcuts(props: {
enabled = true,
} = props;

useKeyPressEvent(useKeyFilter({ enabled, key: "n" }), onGoNext);
useKeyPressEvent(useKeyFilter({ enabled, key: "p" }), onGoPrevious);
useKeyPressEvent(useKeyFilter({ enabled, key: "g" }), onMarkCompleted);
useKeyPressEvent(useKeyFilter({ enabled, key: "r" }), onMarkRejected);
useKeyPressEvent(useKeyFilter({ enabled, key: "v" }), onMarkVerified);
useHotkeys("n", onGoNext, { enabled });
useHotkeys("p", onGoPrevious, { enabled });
useHotkeys("g", onMarkCompleted, { enabled });
useHotkeys("r", onMarkRejected, { enabled });
useHotkeys("v", onMarkVerified, { enabled });
}
9 changes: 2 additions & 7 deletions front/src/hooks/audio/useAudioKeyShortcuts.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { useKeyPressEvent } from "react-use";

import useKeyFilter from "@/hooks/utils/useKeyFilter";
import { useHotkeys } from "react-hotkeys-hook";

import type { KeyShortcut } from "@/hooks/utils/useKeyFilter";

Expand All @@ -17,8 +15,5 @@ export default function useAnnotateClipKeyShortcuts(props: {
enabled?: boolean;
}) {
const { onTogglePlay, enabled = true } = props;
useKeyPressEvent(
useKeyFilter({ enabled, key: " ", preventDefault: true }),
onTogglePlay,
);
useHotkeys(" ", onTogglePlay, { enabled });
}
8 changes: 3 additions & 5 deletions front/src/hooks/spectrogram/useSpectrogramKeyShortcuts.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { useKeyPressEvent } from "react-use";

import useKeyFilter from "@/hooks/utils/useKeyFilter";
import { useHotkeys } from "react-hotkeys-hook";

import type { KeyShortcut } from "@/hooks/utils/useKeyFilter";

Expand All @@ -23,6 +21,6 @@ export default function useAnnotateClipKeyShortcuts(props: {
enabled?: boolean;
}) {
const { onGoMove, onGoZoom, enabled = true } = props;
useKeyPressEvent(useKeyFilter({ enabled, key: "x" }), onGoMove);
useKeyPressEvent(useKeyFilter({ enabled, key: "z" }), onGoZoom);
useHotkeys("x", onGoMove, { enabled });
useHotkeys("z", onGoZoom, { enabled });
}
Loading

0 comments on commit 515ba06

Please sign in to comment.