From 2aa37920d5f183f9c0de2c42076fa57c5b48320e Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Tue, 24 Jun 2025 17:51:34 +0200 Subject: refactor: overhaul timeline component, separate into different files --- apps/web/src/hooks/use-keyboard-shortcuts.ts | 51 ++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 apps/web/src/hooks/use-keyboard-shortcuts.ts (limited to 'apps/web/src/hooks') diff --git a/apps/web/src/hooks/use-keyboard-shortcuts.ts b/apps/web/src/hooks/use-keyboard-shortcuts.ts new file mode 100644 index 00000000..5fd81bff --- /dev/null +++ b/apps/web/src/hooks/use-keyboard-shortcuts.ts @@ -0,0 +1,51 @@ +import { useEffect } from "react"; +import { useTimelineStore } from "@/stores/timeline-store"; + +export function useKeyboardShortcuts() { + const { selectedClips, removeClipFromTrack, clearSelectedClips, undo, redo } = + useTimelineStore(); + + // Delete/Backspace - Delete selected clips + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if ( + (e.key === "Delete" || e.key === "Backspace") && + selectedClips.length > 0 + ) { + selectedClips.forEach(({ trackId, clipId }) => { + removeClipFromTrack(trackId, clipId); + }); + clearSelectedClips(); + } + }; + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }, [selectedClips, removeClipFromTrack, clearSelectedClips]); + + // Cmd+Z / Ctrl+Z - Undo + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if ((e.metaKey || e.ctrlKey) && e.key === "z" && !e.shiftKey) { + e.preventDefault(); + undo(); + } + }; + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }, [undo]); + + // Cmd+Shift+Z / Ctrl+Shift+Z or Cmd+Y / Ctrl+Y - Redo + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if ((e.metaKey || e.ctrlKey) && e.key === "z" && e.shiftKey) { + e.preventDefault(); + redo(); + } else if ((e.metaKey || e.ctrlKey) && e.key === "y") { + e.preventDefault(); + redo(); + } + }; + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }, [redo]); +} -- cgit v1.3.1