refactor: extract overlay modal restore-state helpers

This commit is contained in:
2026-02-09 23:21:13 -08:00
parent 35c2dd0e32
commit 3be0258286
4 changed files with 61 additions and 3 deletions

View File

@@ -0,0 +1,30 @@
import test from "node:test";
import assert from "node:assert/strict";
import {
addOverlayModalRestoreFlagService,
handleOverlayModalClosedService,
} from "./overlay-modal-restore-service";
test("overlay modal restore service adds modal restore flag", () => {
const restore = new Set<"runtime-options" | "subsync">();
addOverlayModalRestoreFlagService(restore, "runtime-options");
assert.equal(restore.has("runtime-options"), true);
});
test("overlay modal restore service hides overlay only when last modal closes", () => {
const restore = new Set<"runtime-options" | "subsync">();
const visibility: boolean[] = [];
addOverlayModalRestoreFlagService(restore, "runtime-options");
addOverlayModalRestoreFlagService(restore, "subsync");
handleOverlayModalClosedService(restore, "runtime-options", (visible) => {
visibility.push(visible);
});
assert.equal(visibility.length, 0);
handleOverlayModalClosedService(restore, "subsync", (visible) => {
visibility.push(visible);
});
assert.deepEqual(visibility, [false]);
});

View File

@@ -0,0 +1,18 @@
export function addOverlayModalRestoreFlagService<T extends string>(
restoreSet: Set<T>,
modal: T,
): void {
restoreSet.add(modal);
}
export function handleOverlayModalClosedService<T extends string>(
restoreSet: Set<T>,
modal: T,
setVisibleOverlayVisible: (visible: boolean) => void,
): void {
if (!restoreSet.has(modal)) return;
restoreSet.delete(modal);
if (restoreSet.size === 0) {
setVisibleOverlayVisible(false);
}
}