@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
JavaScript
;
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;
}