39 lines · 1.2 KB · TypeScript
RawDownload
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;}