import type { MobileThemeId } from "../../lib/mobileTheme";import type { ShowcaseScene } from "./nativeShowcaseScene"; export type ShowcaseRenderSignal = Readonly<{ scene: ShowcaseScene; themeId: MobileThemeId;}>; const listeners = new Set<() => void>();let renderSignal: ShowcaseRenderSignal | null = null; export function getShowcaseRenderSignal(): ShowcaseRenderSignal | null { return renderSignal;} export function subscribeToShowcaseRenderSignal(listener: () => void): () => void { listeners.add(listener); return () => listeners.delete(listener);} export function reportShowcaseSceneRendered(signal: ShowcaseRenderSignal): void { renderSignal = signal; for (const listener of listeners) listener();} export function clearShowcaseRenderSignal(): void { if (renderSignal === null) return; renderSignal = null; for (const listener of listeners) listener();} export function isShowcaseNativeContentReady(input: { readonly scene: ShowcaseScene; readonly themeId: MobileThemeId; readonly renderSignal: ShowcaseRenderSignal | null;}): boolean { if (input.scene !== "review") return true; return input.renderSignal?.scene === "review" && input.renderSignal.themeId === input.themeId;}
import type { MobileThemeId } from "../../lib/mobileTheme";
import type { ShowcaseScene } from "./nativeShowcaseScene";
export type ShowcaseRenderSignal = Readonly<{
scene: ShowcaseScene;
themeId: MobileThemeId;
}>;
const listeners = new Set<() => void>();
let renderSignal: ShowcaseRenderSignal | null = null;
export function getShowcaseRenderSignal(): ShowcaseRenderSignal | null {
return renderSignal;
}
export function subscribeToShowcaseRenderSignal(listener: () => void): () => void {
listeners.add(listener);
return () => listeners.delete(listener);
}
export function reportShowcaseSceneRendered(signal: ShowcaseRenderSignal): void {
renderSignal = signal;
for (const listener of listeners) listener();
}
export function clearShowcaseRenderSignal(): void {
if (renderSignal === null) return;
renderSignal = null;
for (const listener of listeners) listener();
}
export function isShowcaseNativeContentReady(input: {
readonly scene: ShowcaseScene;
readonly themeId: MobileThemeId;
readonly renderSignal: ShowcaseRenderSignal | null;
}): boolean {
if (input.scene !== "review") return true;
return input.renderSignal?.scene === "review" && input.renderSignal.themeId === input.themeId;
}