UNPKG

@maz-ui/utils

Version:

Utils of maz-ui for JavaScript/TypeScript users

51 lines (50 loc) 1.6 kB
import { isClient as i } from "./isClient.js"; class o { constructor(t, e) { this.callback = t, this.options = { ...this.defaultOptions, ...e }, this.eventHandlerFunction = this.eventHandler.bind(this), i() && this.start(); } eventHandlerFunction; event = "visibilitychange"; timeoutHandler; options; defaultOptions = { timeout: 5e3, once: !1, immediate: !0 }; isVisible = !1; start() { if (!i()) { console.warn("[UserVisibility](start) you should run this method on client side"); return; } this.options.immediate && this.emitCallback(), this.addEventListener(); } emitCallback() { this.isVisible = document.visibilityState === "visible", this.callback({ isVisible: this.isVisible }), this.options.once && this.destroy(); } eventHandler() { document.visibilityState === "visible" && !this.isVisible ? (this.clearTimeout(), this.emitCallback()) : document.visibilityState === "hidden" && this.initTimeout(); } clearTimeout() { this.timeoutHandler && (clearTimeout(this.timeoutHandler), this.timeoutHandler = void 0); } initTimeout() { this.clearTimeout(), this.timeoutHandler = setTimeout(this.emitCallback.bind(this), this.options.timeout); } addEventListener() { document.addEventListener(this.event, this.eventHandlerFunction); } removeEventListener() { document.removeEventListener(this.event, this.eventHandlerFunction); } destroy() { this.removeEventListener(), this.timeoutHandler && clearTimeout(this.timeoutHandler); } } export { o as UserVisibility };