UNPKG

@storm-stack/hooks

Version:

A collection of React hooks used by Storm Software in various client libraries and applications.

52 lines (51 loc) 1.49 kB
import { isFunction } from "@storm-stack/types/type-checks/is-function"; import React from "react"; const defaultBatteryManagerState = { supported: true, loading: true, level: null, charging: null, chargingTime: null, dischargingTime: null }; export function useBattery() { const [state, setState] = React.useState(defaultBatteryManagerState); const key = "getBattery"; const getBattery = navigator[key]; React.useEffect(() => { if (!isFunction(getBattery)) { setState((s) => ({ ...s, supported: false, loading: false })); return; } let battery = null; const handleChange = () => { setState({ ...defaultBatteryManagerState, supported: true, loading: false, ...battery }); }; getBattery().then((b) => { battery = b; handleChange(); b?.addEventListener("levelchange", handleChange); b?.addEventListener("chargingchange", handleChange); b?.addEventListener("chargingtimechange", handleChange); b?.addEventListener("dischargingtimechange", handleChange); }); return () => { if (battery) { battery.removeEventListener("levelchange", handleChange); battery.removeEventListener("chargingchange", handleChange); battery.removeEventListener("chargingtimechange", handleChange); battery.removeEventListener("dischargingtimechange", handleChange); } }; }, []); return state; }