react-use
Version:
Collection of React Hooks
69 lines (68 loc) • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var util_1 = require("./util");
var getConnection = function () {
if (typeof navigator !== 'object') {
return null;
}
var nav = navigator;
return nav.connection || nav.mozConnection || nav.webkitConnection;
};
var getConnectionState = function () {
var connection = getConnection();
if (!connection) {
return {};
}
var downlink = connection.downlink, downlinkMax = connection.downlinkMax, effectiveType = connection.effectiveType, type = connection.type, rtt = connection.rtt;
return {
downlink: downlink,
downlinkMax: downlinkMax,
effectiveType: effectiveType,
type: type,
rtt: rtt,
};
};
var useNetwork = function (initialState) {
if (initialState === void 0) { initialState = {}; }
var _a = react_1.useState(initialState), state = _a[0], setState = _a[1];
react_1.useEffect(function () {
var localState = state;
var localSetState = function (patch) {
localState = tslib_1.__assign(tslib_1.__assign({}, localState), patch);
setState(localState);
};
var connection = getConnection();
var onOnline = function () {
localSetState({
online: true,
since: new Date(),
});
};
var onOffline = function () {
localSetState({
online: false,
since: new Date(),
});
};
var onConnectionChange = function () {
localSetState(getConnectionState());
};
util_1.on(window, 'online', onOnline);
util_1.on(window, 'offline', onOffline);
if (connection) {
util_1.on(connection, 'change', onConnectionChange);
localSetState(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, state), { online: navigator.onLine, since: undefined }), getConnectionState()));
}
return function () {
util_1.off(window, 'online', onOnline);
util_1.off(window, 'offline', onOffline);
if (connection) {
util_1.off(connection, 'change', onConnectionChange);
}
};
}, []);
return state;
};
exports.default = useNetwork;