export interface WelcomeDismissScheduler { schedule(ctx: Context): void; cancel(): void; } interface WelcomeDismissSchedulerOptions { dismiss(ctx: Context): void; getGeneration(): number; isEnabled(): boolean; } export function createWelcomeDismissScheduler( options: WelcomeDismissSchedulerOptions, ): WelcomeDismissScheduler { let timer: ReturnType | null = null; return { schedule(ctx) { if (timer) return; const generation = options.getGeneration(); timer = setTimeout(() => { timer = null; if (!options.isEnabled() || generation !== options.getGeneration()) return; options.dismiss(ctx); }, 0); }, cancel() { if (!timer) return; clearTimeout(timer); timer = null; }, }; }