37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
/**
|
|
* Viewer instance manager - ensures a single active viewer overlay in the DOM.
|
|
* Cleans up stale overlays before mounting a new one.
|
|
*/
|
|
|
|
import { appendViewerOverlayNode, getManagedViewerOverlayNodes } from "./viewerRuntimeHosts.js";
|
|
|
|
export function getViewerInstance(createViewer: () => any): any {
|
|
const all = getManagedViewerOverlayNodes();
|
|
if (all.length) {
|
|
const keep = all[all.length - 1];
|
|
for (const el of all) {
|
|
if (el === keep) continue;
|
|
try {
|
|
el?._mjrViewerAPI?.dispose?.();
|
|
} catch (e: any) {
|
|
console.debug?.(e);
|
|
}
|
|
try {
|
|
el.remove?.();
|
|
} catch (e: any) {
|
|
console.debug?.(e);
|
|
}
|
|
}
|
|
if (keep && keep._mjrViewerAPI) return keep._mjrViewerAPI;
|
|
try {
|
|
keep?.remove?.();
|
|
} catch (e: any) {
|
|
console.debug?.(e);
|
|
}
|
|
}
|
|
|
|
const viewer = createViewer();
|
|
appendViewerOverlayNode(viewer);
|
|
return viewer._mjrViewerAPI;
|
|
}
|