@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) • 2.71 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function S(s,a={}){const{suspendWhenHidden:g=!0,hiddenDelayMs:f=3e5,debug:e=!1,onStatusChange:o}=a,u=f;let n=null,i=null,l=!1;s.connected?(e&&console.log("[SR] Connection is already active → handleSuspendResume will manage suspension"),o?.("connected")):(e&&console.log("[SR] Connection is not active"),o?.("disconnected"));function p(){if(e&&console.log("[SR] onHidden() triggered"),!g){e&&console.log("[SR] suspendWhenHidden is false → skipping suspension");return}if(l){e&&console.log("[SR] Already suspended → skipping duplicate suspension");return}l=!0;const m=new Promise(R=>{n=()=>{e&&console.log("[SR] pendingResolve() called → lifting suspension"),l=!1,n=null,R(),o?.("connected")}});e&&console.log("[SR] Calling connection.suspendReconnectUntil(...)"),o?.("pending-suspension"),s.suspendReconnectUntil(m),e&&console.log(`[SR] Starting hidden delay of ${u}ms before actual suspend()`),i=window.setTimeout(()=>{i=null,document.hidden?(e&&console.log("[SR] Hidden timeout elapsed → calling suspend()"),t()):n&&(e&&console.log("[SR] Hidden timeout elapsed but page is visible → resolving pendingResolve()"),n())},u),window.addEventListener("focus",d,{once:!0})}function d(){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())}function c(){document.hidden?(e&&console.log("[SR] visibilitychange → HIDDEN"),p()):(e&&console.log("[SR] visibilitychange → VISIBLE"),d())}function r(){e&&console.log("[SR] resume event fired"),d()}function t(){if(!s.connected){e&&console.log("[SR] Connection already suspended → skipping suspend()");return}o?.("suspended"),e&&console.log("[SR] suspend() called → suspending connection"),window.stop(),s.suspend()}return document.addEventListener("visibilitychange",c,!1),document.addEventListener("freeze",t),document.addEventListener("resume",r),e&&console.log("[SR] handleSuspendResume() initialized; debugging is ON"),()=>{e&&console.log("[SR] cleanup() called → removing listeners & clearing timeouts"),document.removeEventListener("visibilitychange",c,!1),document.removeEventListener("freeze",t),document.removeEventListener("resume",r),window.removeEventListener("focus",d),i!==null&&(e&&console.log("[SR] cleanup: Clearing hiddenTimeoutId"),clearTimeout(i),i=null),n&&(e&&console.log("[SR] cleanup: Resolving pendingResolve() to let reconnection proceed"),n(),n=null,l=!1)}}exports.handleSuspendResume=S;
//# sourceMappingURL=handleSuspendResume.js.map