From 12d26c574b4517f358d97d130b0838f4868a8b85 Mon Sep 17 00:00:00 2001 From: aashishparuvada Date: Mon, 23 Jun 2025 20:05:49 +0530 Subject: enabled-clip-selection --- apps/web/src/components/editor/timeline.tsx | 35 ++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'apps/web/src/components/editor') diff --git a/apps/web/src/components/editor/timeline.tsx b/apps/web/src/components/editor/timeline.tsx index 1d2df66d..a16284ab 100644 --- a/apps/web/src/components/editor/timeline.tsx +++ b/apps/web/src/components/editor/timeline.tsx @@ -33,7 +33,7 @@ export function Timeline() { // Timeline shows all tracks (video, audio, effects) and their clips. // You can drag media here to add it to your project. // Clips can be trimmed, deleted, and moved. - const { tracks, addTrack, addClipToTrack, removeTrack, toggleTrackMute, removeClipFromTrack, moveClipToTrack, getTotalDuration } = + const { tracks, addTrack, addClipToTrack, removeTrack, toggleTrackMute, removeClipFromTrack, moveClipToTrack, getTotalDuration, selectedClip, clearSelectedClip } = useTimelineStore(); const { mediaItems, addMediaItem } = useMediaStore(); const { currentTime, duration, seek, setDuration, isPlaying, play, pause, toggle } = usePlaybackStore(); @@ -67,6 +67,18 @@ export function Timeline() { } }, [contextMenu]); + // Keyboard event for deleting selected clip + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if ((e.key === "Delete" || e.key === "Backspace") && selectedClip) { + removeClipFromTrack(selectedClip.trackId, selectedClip.clipId); + clearSelectedClip(); + } + }; + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }, [selectedClip, removeClipFromTrack, clearSelectedClip]); + const handleDragEnter = (e: React.DragEvent) => { // When something is dragged over the timeline, show overlay e.preventDefault(); @@ -699,6 +711,8 @@ function TimelineTrackContent({ addClipToTrack, removeClipFromTrack, toggleTrackMute, + selectedClip, + selectClip, } = useTimelineStore(); const { currentTime } = usePlaybackStore(); const [isDropping, setIsDropping] = useState(false); @@ -1261,11 +1275,19 @@ function TimelineTrackContent({ ); const clipLeft = clip.startTime * 50 * zoomLevel; + // Correctly declare isSelected inside the map + const isSelected = selectedClip && selectedClip.trackId === track.id && selectedClip.clipId === clip.id; + return (
{ + e.stopPropagation(); + selectClip(track.id, clip.id); + }} + tabIndex={0} onContextMenu={(e) => { e.preventDefault(); e.stopPropagation(); @@ -1342,16 +1364,13 @@ function TimelineTrackContent({ }} >
{wouldOverlap ? "⚠️" : ""} {dropPosition.toFixed(1)}s -- cgit v1.3.1