From dc0b57cd6a5517dc6b57c6ebd1d0f6f7c8ee5e40 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Sun, 8 Feb 2026 18:01:45 +0100 Subject: refactor: replace text-specific update command with generic --- .../web/src/lib/commands/timeline/element/index.ts | 2 +- .../commands/timeline/element/update-element.ts | 37 +++++++++++++++ .../timeline/element/update-text-element.ts | 52 ---------------------- 3 files changed, 38 insertions(+), 53 deletions(-) create mode 100644 apps/web/src/lib/commands/timeline/element/update-element.ts delete mode 100644 apps/web/src/lib/commands/timeline/element/update-text-element.ts (limited to 'apps/web/src/lib/commands') diff --git a/apps/web/src/lib/commands/timeline/element/index.ts b/apps/web/src/lib/commands/timeline/element/index.ts index 8b719afa..3f10baa4 100644 --- a/apps/web/src/lib/commands/timeline/element/index.ts +++ b/apps/web/src/lib/commands/timeline/element/index.ts @@ -5,7 +5,7 @@ export { UpdateElementTrimCommand } from "./update-element-trim"; export { UpdateElementDurationCommand } from "./update-element-duration"; export { UpdateElementStartTimeCommand } from "./update-element-start-time"; export { SplitElementsCommand } from "./split-elements"; -export { UpdateTextElementCommand } from "./update-text-element"; +export { UpdateElementCommand } from "./update-element"; export { ToggleElementsVisibilityCommand } from "./toggle-elements-visibility"; export { ToggleElementsMutedCommand } from "./toggle-elements-muted"; export { MoveElementCommand } from "./move-elements"; diff --git a/apps/web/src/lib/commands/timeline/element/update-element.ts b/apps/web/src/lib/commands/timeline/element/update-element.ts new file mode 100644 index 00000000..4ee54726 --- /dev/null +++ b/apps/web/src/lib/commands/timeline/element/update-element.ts @@ -0,0 +1,37 @@ +import { Command } from "@/lib/commands/base-command"; +import type { TimelineTrack } from "@/types/timeline"; +import { EditorCore } from "@/core"; + +export class UpdateElementCommand extends Command { + private savedState: TimelineTrack[] | null = null; + + constructor( + private trackId: string, + private elementId: string, + private updates: Partial>, + ) { + super(); + } + + execute(): void { + const editor = EditorCore.getInstance(); + this.savedState = editor.timeline.getTracks(); + + const updatedTracks = this.savedState.map((t) => { + if (t.id !== this.trackId) return t; + const newElements = t.elements.map((el) => + el.id === this.elementId ? { ...el, ...this.updates } : el, + ); + return { ...t, elements: newElements } as typeof t; + }); + + editor.timeline.updateTracks(updatedTracks); + } + + undo(): void { + if (this.savedState) { + const editor = EditorCore.getInstance(); + editor.timeline.updateTracks(this.savedState); + } + } +} diff --git a/apps/web/src/lib/commands/timeline/element/update-text-element.ts b/apps/web/src/lib/commands/timeline/element/update-text-element.ts deleted file mode 100644 index e3cc4a32..00000000 --- a/apps/web/src/lib/commands/timeline/element/update-text-element.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Command } from "@/lib/commands/base-command"; -import type { TextElement, TimelineTrack } from "@/types/timeline"; -import { EditorCore } from "@/core"; - -export class UpdateTextElementCommand extends Command { - private savedState: TimelineTrack[] | null = null; - - constructor( - private trackId: string, - private elementId: string, - private updates: Partial< - Pick< - TextElement, - | "content" - | "fontSize" - | "fontFamily" - | "color" - | "backgroundColor" - | "textAlign" - | "fontWeight" - | "fontStyle" - | "textDecoration" - > - >, - ) { - super(); - } - - execute(): void { - const editor = EditorCore.getInstance(); - this.savedState = editor.timeline.getTracks(); - - const updatedTracks = this.savedState.map((t) => { - if (t.id !== this.trackId) return t; - const newElements = t.elements.map((el) => - el.id === this.elementId && el.type === "text" - ? { ...el, ...this.updates } - : el, - ); - return { ...t, elements: newElements } as typeof t; - }); - - editor.timeline.updateTracks(updatedTracks); - } - - undo(): void { - if (this.savedState) { - const editor = EditorCore.getInstance(); - editor.timeline.updateTracks(this.savedState); - } - } -} -- cgit v1.3.1