mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-05 19:24:39 +00:00
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { OpenStorePage } from "@/seqta/ui/renderStore";
|
|
|
|
/**
|
|
* Module-level handoff for "open the theme store and highlight this theme".
|
|
*
|
|
* The store page is mounted lazily inside a Shadow DOM the first time it
|
|
* opens, so a `CustomEvent` listener would have to be wired up before mount
|
|
* (causing a race). Using a shared cell keeps the producer (popup button) and
|
|
* consumer (store `onMount`) decoupled without that timing constraint.
|
|
*
|
|
* The store reads & clears this on mount via {@link consumePendingHighlightThemeId}.
|
|
*/
|
|
let pendingHighlightThemeId: string | null = null;
|
|
|
|
/** Read and clear the pending theme id (called by the store on mount). */
|
|
export function consumePendingHighlightThemeId(): string | null {
|
|
const id = pendingHighlightThemeId;
|
|
pendingHighlightThemeId = null;
|
|
return id;
|
|
}
|
|
|
|
/**
|
|
* Opens the theme store and asks it to focus / highlight the given theme.
|
|
* If the store is already mounted we dispatch a DOM event so it can react
|
|
* without remounting; otherwise the store consumes the pending id on mount.
|
|
*/
|
|
export function openThemeStoreWithHighlight(themeId: string): void {
|
|
pendingHighlightThemeId = themeId;
|
|
|
|
const existing = document.getElementById("store");
|
|
if (existing) {
|
|
window.dispatchEvent(
|
|
new CustomEvent("bsplus:highlight-theme", { detail: { themeId } }),
|
|
);
|
|
return;
|
|
}
|
|
|
|
OpenStorePage();
|
|
}
|