react-use
Version:
Collection of React Hooks
56 lines (55 loc) • 2.21 kB
JavaScript
;
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;