UNPKG

@snap/camera-kit

Version:
52 lines 2.21 kB
import { Injectable } from "@snap/ts-inject"; export class PageVisibility { constructor() { this.onHiddenHandlers = new Set(); this.onVisibleHandlers = new Set(); this.previousVisibilityState = document.visibilityState; this.visibilityTransition = false; this.onVisibilityChange = this.onVisibilityChange.bind(this); this.isDuringVisibilityTransition = this.isDuringVisibilityTransition.bind(this); this.onPageHidden = this.onPageHidden.bind(this); this.onPageVisible = this.onPageVisible.bind(this); this.destroy = this.destroy.bind(this); document.addEventListener("visibilitychange", this.onVisibilityChange); } isDuringVisibilityTransition(test) { return test === this.visibilityTransition; } onPageHidden(handler) { this.onHiddenHandlers.add(handler); return () => this.onHiddenHandlers.delete(handler); } onPageVisible(handler) { this.onVisibleHandlers.add(handler); return () => this.onVisibleHandlers.delete(handler); } destroy() { document.removeEventListener("visibilitychange", this.onVisibilityChange); this.onHiddenHandlers.clear(); this.onVisibleHandlers.clear(); } onVisibilityChange() { const handlers = this.previousVisibilityState === "visible" && document.visibilityState === "hidden" ? this.onHiddenHandlers : this.previousVisibilityState === "hidden" && document.visibilityState === "visible" ? this.onVisibleHandlers : new Set(); this.visibilityTransition = document.visibilityState; for (const handler of handlers) { try { handler(); } catch (error) { if (typeof window !== "undefined") window.dispatchEvent(new CustomEvent("error", { detail: error })); } } this.previousVisibilityState = this.visibilityTransition; this.visibilityTransition = false; } } export const pageVisibilityFactory = Injectable("pageVisibility", () => new PageVisibility()); //# sourceMappingURL=pageVisibility.js.map