@helenejs/react
Version:
Real-time Web Apps for Node.js
39 lines • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useConnectionState = useConnectionState;
const utils_1 = require("@helenejs/utils");
const react_1 = require("react");
const use_client_1 = require("./use-client");
const use_throttled_events_1 = require("./use-throttled-events");
function useConnectionState() {
const client = (0, use_client_1.useClient)();
const intervalRef = (0, react_1.useRef)(null);
const [isOffline, setOffline] = (0, react_1.useState)(true);
const [isOnline, setOnline] = (0, react_1.useState)(false);
const [isConnecting, setConnecting] = (0, react_1.useState)(false);
const updateConnectionState = (0, react_1.useCallback)(() => {
setOffline(client.isOffline);
setOnline(client.isOnline);
setConnecting(client.isConnecting);
}, [client]);
(0, use_throttled_events_1.useThrottledEvents)(client, [
utils_1.ClientEvents.INITIALIZED,
utils_1.ClientEvents.WEBSOCKET_CLOSED,
utils_1.ClientEvents.CONNECTING,
], updateConnectionState, [updateConnectionState], 16);
(0, react_1.useEffect)(() => {
if (!client)
return;
updateConnectionState();
intervalRef.current = setInterval(updateConnectionState, 1000);
return () => {
clearInterval(intervalRef.current);
};
}, [client]);
return {
isOffline,
isOnline,
isConnecting,
};
}
//# sourceMappingURL=use-connection-state.js.map