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