UNPKG

@storm-stack/hooks

Version:

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

58 lines (57 loc) 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useBattery = useBattery; var _isFunction = require("@storm-stack/types/type-checks/is-function"); var _react = _interopRequireDefault(require("react")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const defaultBatteryManagerState = { supported: true, loading: true, level: null, charging: null, chargingTime: null, dischargingTime: null }; function useBattery() { const [state, setState] = _react.default.useState(defaultBatteryManagerState); const key = "getBattery"; const getBattery = navigator[key]; _react.default.useEffect(() => { if (!(0, _isFunction.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; }