UNPKG

react-use

Version:
56 lines (55 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var React = tslib_1.__importStar(require("react")); var react_fast_compare_1 = tslib_1.__importDefault(require("react-fast-compare")); var util_1 = require("./util"); var useState = React.useState, useEffect = React.useEffect; var nav = typeof navigator === 'object' ? navigator : undefined; var isBatteryApiSupported = nav && typeof nav.getBattery === 'function'; function useBatteryMock() { return { isSupported: false }; } function useBattery() { var _a = useState({ isSupported: true, fetched: false }), state = _a[0], setState = _a[1]; useEffect(function () { var isMounted = true; var battery = null; var handleChange = function () { if (!isMounted || !battery) { return; } var newState = { isSupported: true, fetched: true, level: battery.level, charging: battery.charging, dischargingTime: battery.dischargingTime, chargingTime: battery.chargingTime, }; !react_fast_compare_1.default(state, newState) && setState(newState); }; nav.getBattery().then(function (bat) { if (!isMounted) { return; } battery = bat; util_1.on(battery, 'chargingchange', handleChange); util_1.on(battery, 'chargingtimechange', handleChange); util_1.on(battery, 'dischargingtimechange', handleChange); util_1.on(battery, 'levelchange', handleChange); handleChange(); }); return function () { isMounted = false; if (battery) { util_1.off(battery, 'chargingchange', handleChange); util_1.off(battery, 'chargingtimechange', handleChange); util_1.off(battery, 'dischargingtimechange', handleChange); util_1.off(battery, 'levelchange', handleChange); } }; }, []); return state; } exports.default = isBatteryApiSupported ? useBattery : useBatteryMock;