From 7bf0984698e43b9aa2dd879f65951318ed410390 Mon Sep 17 00:00:00 2001 From: Maze <167211895+mazeincoding@users.noreply.github.com> Date: Sat, 31 Jan 2026 00:20:04 +0100 Subject: codebase overhaul (#697) --- .../commands/timeline/element/delete-elements.ts | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 apps/web/src/lib/commands/timeline/element/delete-elements.ts (limited to 'apps/web/src/lib/commands/timeline/element/delete-elements.ts') diff --git a/apps/web/src/lib/commands/timeline/element/delete-elements.ts b/apps/web/src/lib/commands/timeline/element/delete-elements.ts new file mode 100644 index 00000000..91eb6397 --- /dev/null +++ b/apps/web/src/lib/commands/timeline/element/delete-elements.ts @@ -0,0 +1,48 @@ +import { Command } from "@/lib/commands/base-command"; +import type { TimelineTrack } from "@/types/timeline"; +import { EditorCore } from "@/core"; +import { isMainTrack } from "@/lib/timeline"; + +export class DeleteElementsCommand extends Command { + private savedState: TimelineTrack[] | null = null; + + constructor(private elements: { trackId: string; elementId: string }[]) { + super(); + } + + execute(): void { + const editor = EditorCore.getInstance(); + this.savedState = editor.timeline.getTracks(); + + const updatedTracks = this.savedState + .map((track) => { + const hasElementsToDelete = this.elements.some( + (el) => el.trackId === track.id, + ); + + if (!hasElementsToDelete) { + return track; + } + + return { + ...track, + elements: track.elements.filter( + (element) => + !this.elements.some( + (el) => el.trackId === track.id && el.elementId === element.id, + ), + ), + } as typeof track; + }) + .filter((track) => track.elements.length > 0 || isMainTrack(track)); + + editor.timeline.updateTracks(updatedTracks); + } + + undo(): void { + if (this.savedState) { + const editor = EditorCore.getInstance(); + editor.timeline.updateTracks(this.savedState); + } + } +} -- cgit v1.3.1