import type { EditorCore } from "@/core"; import { AddTrackCommand, BatchCommand, InsertElementCommand, } from "@/commands"; import { buildSubtitleTextElement } from "./build-subtitle-text-element"; import type { SubtitleCue } from "./types"; export function insertCaptionChunksAsTextTrack({ editor, captions, }: { editor: EditorCore; captions: SubtitleCue[]; }): string | null { if (captions.length === 0) { return null; } const addTrackCommand = new AddTrackCommand({ type: "text", index: 0 }); const trackId = addTrackCommand.getTrackId(); const canvasSize = editor.project.getActive().settings.canvasSize; const insertCommands = captions.map( (caption, index) => new InsertElementCommand({ placement: { mode: "explicit", trackId }, element: buildSubtitleTextElement({ index, caption, canvasSize, }), }), ); editor.command.execute({ command: new BatchCommand([addTrackCommand, ...insertCommands]), }); return trackId; }