summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/commands/timeline/element/delete-elements.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-07 04:41:27 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-07 04:41:27 +0200
commitcbd1b8212370c67b34a70dccd21bd82de72fead2 (patch)
treed97cbee2aae22c22b59c59a50e9f8a6af0ae8ccf /apps/web/src/lib/commands/timeline/element/delete-elements.ts
parent4f7d401a974047d37673ee8e3840dceaaddc295c (diff)
downloadopencut-cbd1b8212370c67b34a70dccd21bd82de72fead2.tar.gz
refactor: structured track layout per scene
Diffstat (limited to 'apps/web/src/lib/commands/timeline/element/delete-elements.ts')
-rw-r--r--apps/web/src/lib/commands/timeline/element/delete-elements.ts57
1 files changed, 34 insertions, 23 deletions
diff --git a/apps/web/src/lib/commands/timeline/element/delete-elements.ts b/apps/web/src/lib/commands/timeline/element/delete-elements.ts
index c8cc4494..8d93c6ba 100644
--- a/apps/web/src/lib/commands/timeline/element/delete-elements.ts
+++ b/apps/web/src/lib/commands/timeline/element/delete-elements.ts
@@ -1,9 +1,28 @@
import { Command, type CommandResult } from "@/lib/commands/base-command";
-import type { TimelineTrack } from "@/lib/timeline";
+import type { SceneTracks } from "@/lib/timeline";
import { EditorCore } from "@/core";
+import type { TimelineTrack } from "@/lib/timeline";
+
+function removeTrackElements<TTrack extends TimelineTrack>({
+ track,
+ elements,
+}: {
+ track: TTrack;
+ elements: { trackId: string; elementId: string }[];
+}): TTrack {
+ const nextElements = track.elements.filter(
+ (element) =>
+ !elements.some(
+ (target) =>
+ target.trackId === track.id && target.elementId === element.id,
+ ),
+ );
+
+ return { ...track, elements: nextElements } as TTrack;
+}
export class DeleteElementsCommand extends Command {
- private savedState: TimelineTrack[] | null = null;
+ private savedState: SceneTracks | null = null;
private readonly elements: { trackId: string; elementId: string }[];
constructor({
@@ -17,28 +36,20 @@ export class DeleteElementsCommand extends Command {
execute(): CommandResult | undefined {
const editor = EditorCore.getInstance();
- this.savedState = editor.timeline.getTracks();
+ this.savedState = editor.scenes.getActiveScene().tracks;
- const updatedTracks = this.savedState.map((track) => {
- const elementsToDeleteOnTrack = this.elements.filter(
- (target) => target.trackId === track.id,
- );
-
- if (elementsToDeleteOnTrack.length === 0) {
- return track;
- }
-
- const elements = track.elements.filter(
- (element) =>
- !this.elements.some(
- (target) =>
- target.trackId === track.id &&
- target.elementId === element.id,
- ),
- );
-
- return { ...track, elements } as typeof track;
- });
+ const updatedTracks: SceneTracks = {
+ overlay: this.savedState.overlay.map((track) =>
+ removeTrackElements({ track, elements: this.elements }),
+ ),
+ main: removeTrackElements({
+ track: this.savedState.main,
+ elements: this.elements,
+ }),
+ audio: this.savedState.audio.map((track) =>
+ removeTrackElements({ track, elements: this.elements }),
+ ),
+ };
editor.timeline.updateTracks(updatedTracks);