use-battery-hook
Version:
A react hook to get battery status
148 lines (127 loc) • 3.94 kB
JavaScript
;
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var react = require('react');
var react__default = _interopDefault(react);
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var _extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
var slicedToArray = function () {
function sliceIterator(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"]) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
return function (arr, i) {
if (Array.isArray(arr)) {
return arr;
} else if (Symbol.iterator in Object(arr)) {
return sliceIterator(arr, i);
} else {
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
};
}();
var initialState = {};
function reducer(state, action) {
switch (action.type) {
case 'UPDATE_BATTERY':
return _extends({}, state, {
battery: action.payload
});
default:
throw new Error();
}
}
var useBattery = function useBattery() {
var _useReducer = react.useReducer(reducer, initialState),
_useReducer2 = slicedToArray(_useReducer, 2),
state = _useReducer2[0],
dispatch = _useReducer2[1];
react.useEffect(function () {
console.log('battery ', _typeof(window.navigator.getBattery));
if ('getBattery' in window.navigator) {
window.navigator.getBattery().then(function (battery) {
return hookBattery(battery);
});
} else {
if (window.ChromeSamples) {
window.ChromeSamples.setStatus('The Battery Status API is not supported on ' + 'this platform.');
}
}
return function () {
if ('getBattery' in window.navigator) {
window.navigator.getBattery().then(function (battery) {
return unHookBattery(battery);
});
}
};
}, []);
var unHookBattery = function unHookBattery(battery) {
battery.removeEventListener('levelchange', function () {
return updateBattery(battery);
});
battery.removeEventListener('chargingchange', function () {
return updateBattery(battery);
});
battery.removeEventListener('dischargingtimechange', function () {
return updateBattery(battery);
});
battery.removeEventListener('chargingtimechange', function () {
return updateBattery(battery);
});
};
var hookBattery = function hookBattery(battery) {
updateBattery(battery);
battery.addEventListener('levelchange', function () {
return updateBattery(battery);
});
battery.addEventListener('chargingchange', function () {
return updateBattery(battery);
});
battery.addEventListener('dischargingtimechange', function () {
return updateBattery(battery);
});
battery.addEventListener('chargingtimechange', function () {
return updateBattery(battery);
});
};
var updateBattery = function updateBattery(battery) {
dispatch({
type: 'UPDATE_BATTERY',
payload: battery
});
};
return state.battery;
};
module.exports = useBattery;
//# sourceMappingURL=index.js.map