Files
openmaic/OpenMAIC/lib/agent/client/resolve-scene-outline.ts
2026-08-16 14:58:47 +08:00

31 lines
1.1 KiB
TypeScript

import type { SceneOutline } from '@/lib/types/generation';
import type { Scene } from '@/lib/types/stage';
/**
* Resolve a scene's generation outline by stable identity (`outlineId`) rather
* than by the mutable `order`.
*
* Pro-mode insert / reorder / delete rebalances `scene.order` while the
* persisted `outlines` array keeps the original generation plan, so matching an
* outline by `order` attaches **another slide's** outline (wrong title / type /
* key points) to the scene being edited once the deck has been reordered.
* Matching by the stamped `outlineId` is reorder-stable.
*
* Scenes built before `outlineId` existed, or freshly inserted scenes that have
* no originating outline, fall back to an outline derived from the scene itself
* — never another slide's outline.
*/
export function resolveSceneOutline(scene: Scene, outlines: SceneOutline[]): SceneOutline {
const matched = scene.outlineId ? outlines.find((o) => o.id === scene.outlineId) : undefined;
return (
matched ?? {
id: scene.id,
type: scene.type,
title: scene.title,
description: '',
keyPoints: [],
order: scene.order,
}
);
}