@hakit/core
Version:
A collection of React hooks and helpers for Home Assistant to easily communicate with the Home Assistant WebSocket API.
3 lines (2 loc) • 3.18 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function y(d,p={}){const{suspendWhenHidden:m=!0,hiddenDelayMs:v=3e5,debug:e=!1,onStatusChange:l}=p,f=v;let n=null,i=null,t=!1,s=null;d.connected?(e&&console.log("[SR] Connection is already active → handleSuspendResume will manage suspension"),l?.("connected")):(e&&console.log("[SR] Connection is not active"),l?.("disconnected"));function R(){if(e&&console.log("[SR] onHidden() triggered"),!m){e&&console.log("[SR] suspendWhenHidden is false → skipping suspension");return}if(t){e&&console.log("[SR] Already suspended → skipping duplicate suspension");return}t=!0;const w=new Promise(h=>{n=()=>{e&&console.log("[SR] pendingResolve() called → lifting suspension"),t=!1,n=null,u(),h(),l?.("connected")}});e&&console.log("[SR] Calling connection.suspendReconnectUntil(...)"),l?.("pending-suspension"),d.suspendReconnectUntil(w),e&&console.log(`[SR] Starting hidden delay of ${f}ms before actual suspend()`),i=typeof window<"u"?window.setTimeout(()=>{i=null,document.hidden?(e&&console.log("[SR] Hidden timeout elapsed → calling suspend()"),c(),S()):n&&(e&&console.log("[SR] Hidden timeout elapsed but page is visible → resolving pendingResolve()"),n())},f):null,typeof window<"u"&&window.addEventListener("focus",o)}function o(){e&&console.log("[SR] onVisibleOrResume() fired (page became visible)"),i!==null&&(clearTimeout(i),i=null,e&&console.log("[SR] Cleared hiddenTimeoutId (user returned before allotted time)")),n&&(e&&console.log("[SR] Resolving pendingResolve() on actual resume"),n()),u()}function r(){document.hidden?(e&&console.log("[SR] visibilitychange → HIDDEN"),R()):(e&&console.log("[SR] visibilitychange → VISIBLE"),o())}function a(){e&&console.log("[SR] resume event fired"),o()}function g(){e&&console.log("[SR] pageshow event fired"),o()}function S(){s===null&&(typeof window>"u"||(s=window.setInterval(()=>{document.hidden||(e&&console.log("[SR] visibility polling detected VISIBLE"),o())},2e3)))}function u(){s!==null&&typeof window<"u"&&(clearInterval(s),s=null)}function c(){if(!d.connected){e&&console.log("[SR] Connection already suspended → skipping suspend()");return}l?.("suspended"),e&&console.log("[SR] suspend() called → suspending connection"),typeof window<"u"&&window.stop(),d.suspend()}return document.addEventListener("visibilitychange",r,!1),document.addEventListener("freeze",c),document.addEventListener("resume",a),document.addEventListener("pageshow",g),e&&console.log("[SR] handleSuspendResume() initialized; debugging is ON"),()=>{e&&console.log("[SR] cleanup() called → removing listeners & clearing timeouts"),document.removeEventListener("visibilitychange",r,!1),document.removeEventListener("freeze",c),document.removeEventListener("resume",a),document.removeEventListener("pageshow",g),typeof window<"u"&&window.removeEventListener("focus",o),i!==null&&(e&&console.log("[SR] cleanup: Clearing hiddenTimeoutId"),clearTimeout(i),i=null),u(),n&&(e&&console.log("[SR] cleanup: Resolving pendingResolve() to let reconnection proceed"),n(),n=null,t=!1)}}exports.handleSuspendResume=y;
//# sourceMappingURL=handleSuspendResume.js.map