Files

44 lines
2.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var util_1 = require("./misc/util");
var nav = util_1.isNavigator ? navigator : undefined;
var conn = nav && (nav.connection || nav.mozConnection || nav.webkitConnection);
function getConnectionState(previousState) {
var online = nav === null || nav === void 0 ? void 0 : nav.onLine;
var previousOnline = previousState === null || previousState === void 0 ? void 0 : previousState.online;
return {
online: online,
previous: previousOnline,
since: online !== previousOnline ? new Date() : previousState === null || previousState === void 0 ? void 0 : previousState.since,
downlink: conn === null || conn === void 0 ? void 0 : conn.downlink,
downlinkMax: conn === null || conn === void 0 ? void 0 : conn.downlinkMax,
effectiveType: conn === null || conn === void 0 ? void 0 : conn.effectiveType,
rtt: conn === null || conn === void 0 ? void 0 : conn.rtt,
saveData: conn === null || conn === void 0 ? void 0 : conn.saveData,
type: conn === null || conn === void 0 ? void 0 : conn.type,
};
}
function useNetworkState(initialState) {
var _a = react_1.useState(initialState !== null && initialState !== void 0 ? initialState : getConnectionState), state = _a[0], setState = _a[1];
react_1.useEffect(function () {
var handleStateChange = function () {
setState(getConnectionState);
};
util_1.on(window, 'online', handleStateChange, { passive: true });
util_1.on(window, 'offline', handleStateChange, { passive: true });
if (conn) {
util_1.on(conn, 'change', handleStateChange, { passive: true });
}
return function () {
util_1.off(window, 'online', handleStateChange);
util_1.off(window, 'offline', handleStateChange);
if (conn) {
util_1.off(conn, 'change', handleStateChange);
}
};
}, []);
return state;
}
exports.default = useNetworkState;