UNPKG

battery-status-lib

Version:

A React hook for battery status

2 lines (1 loc) 2.81 kB
(function(s,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],n):(s=typeof globalThis<"u"?globalThis:s||self,n(s.BatteryStatusLib={},s.React))})(this,function(s,n){"use strict";function h(){const[i,g]=n.useState(null),[a,o]=n.useState(null),[c,d]=n.useState(null),[t,r]=n.useState(null),[f,l]=n.useState(!0);return n.useEffect(()=>{const v=navigator;if(typeof v.getBattery!="function"){console.warn("Battery Status API is not supported in this browser."),l(!1);return}let e=null;const u=()=>{e&&(g(e.level*100),o(e.charging),d(e.charging&&e.chargingTime!==1/0?e.chargingTime:null),r(!e.charging&&e.dischargingTime!==1/0?e.dischargingTime:null))};return(async()=>{try{e=await v.getBattery(),u(),e.addEventListener("chargingchange",u),e.addEventListener("levelchange",u),e.addEventListener("chargingtimechange",u),e.addEventListener("dischargingtimechange",u)}catch(b){console.error("Failed to access Battery API:",b),l(!1)}})(),()=>{e&&(e.removeEventListener("chargingchange",u),e.removeEventListener("levelchange",u),e.removeEventListener("chargingtimechange",u),e.removeEventListener("dischargingtimechange",u))}},[]),{level:i,charging:a,chargingTime:c,dischargingTime:t,supported:f}}const m=()=>{const i=()=>"hidden"in document?"hidden":"webkitHidden"in document?"webkitHidden":"mozHidden"in document?"mozHidden":"msHidden"in document?"msHidden":null,g=()=>"visibilitychange"in document?"visibilitychange":"webkitvisibilitychange"in document?"webkitvisibilitychange":"mozvisibilitychange"in document?"mozvisibilitychange":"msvisibilitychange"in document?"msvisibilitychange":null,a=i(),o=g(),[c,d]=n.useState(a?!document[a]:!0);return n.useEffect(()=>{if(!o)return;const t=()=>{d(a?!document[a]:!0)};return document.addEventListener(o,t),()=>{document.removeEventListener(o,t)}},[a,o]),c},y=()=>{var o,c,d;const i=()=>{const t=navigator;return t.connection||t.mozConnection||t.webkitConnection||null},[g,a]=n.useState({isOnline:navigator.onLine,effectiveType:(o=i())==null?void 0:o.effectiveType,downlink:(c=i())==null?void 0:c.downlink,rtt:(d=i())==null?void 0:d.rtt});return n.useEffect(()=>{const t=()=>{var f,l,v;a({isOnline:navigator.onLine,effectiveType:(f=i())==null?void 0:f.effectiveType,downlink:(l=i())==null?void 0:l.downlink,rtt:(v=i())==null?void 0:v.rtt})};window.addEventListener("online",t),window.addEventListener("offline",t);const r=i();return r!=null&&r.addEventListener&&r.addEventListener("change",t),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",t),r!=null&&r.removeEventListener&&r.removeEventListener("change",t)}},[]),g};s.useGetBatteryStatus=h,s.useGetNetworkStatus=y,s.useGetTabVisibility=m,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});