UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

99 lines 3.79 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useIsOnline = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _netinfo = _interopRequireDefault(require("@react-native-community/netinfo")); var _useAppStateListener = require("../../../hooks/useAppStateListener"); var _useIsMountedRef = require("../../../hooks/useIsMountedRef"); var useIsOnline = (client, closeConnectionOnBackground = true) => { var _useState = (0, _react.useState)(null), _useState2 = (0, _slicedToArray2.default)(_useState, 2), isOnline = _useState2[0], setIsOnline = _useState2[1]; var _useState3 = (0, _react.useState)(false), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), connectionRecovering = _useState4[0], setConnectionRecovering = _useState4[1]; var isMounted = (0, _useIsMountedRef.useIsMountedRef)(); var clientExists = !!client; var onBackground = (0, _react.useCallback)(() => { if (!closeConnectionOnBackground || !clientExists) { return; } client.closeConnection(); setIsOnline(false); }, [closeConnectionOnBackground, client, clientExists]); var onForeground = (0, _react.useCallback)(() => { if (!clientExists || !client.userID) { return; } client.openConnection(); }, [client, clientExists]); (0, _useAppStateListener.useAppStateListener)(onForeground, onBackground); (0, _react.useEffect)(() => { var handleChangedEvent = event => { setConnectionRecovering(!event.online); setIsOnline(event.online || false); }; var handleRecoveredEvent = () => setConnectionRecovering(false); var notifyChatClient = isConnected => { if (client?.wsConnection && isConnected) { if (isConnected) { client.wsConnection.onlineStatusChanged({ type: 'online' }); } else { client.wsConnection.onlineStatusChanged({ type: 'offline' }); } } }; var unsubscribeNetInfo; var setNetInfoListener = () => { unsubscribeNetInfo = _netinfo.default.addEventListener(netInfoState => { if (!netInfoState && !client.wsConnection?.isHealthy) { setConnectionRecovering(true); setIsOnline(false); } var isConnected = netInfoState.isConnected, isInternetReachable = netInfoState.isInternetReachable; notifyChatClient(isInternetReachable !== null ? isInternetReachable && isConnected : isConnected); }); }; var setInitialOnlineState = function () { var _ref = (0, _asyncToGenerator2.default)(function* () { var _yield$NetInfo$fetch = yield _netinfo.default.fetch(), isConnected = _yield$NetInfo$fetch.isConnected; if (isMounted.current) { setIsOnline(isConnected); notifyChatClient(isConnected); } }); return function setInitialOnlineState() { return _ref.apply(this, arguments); }; }(); setInitialOnlineState(); var chatListeners = []; if (client) { chatListeners.push(client.on('connection.changed', handleChangedEvent)); chatListeners.push(client.on('connection.recovered', handleRecoveredEvent)); setNetInfoListener(); } return () => { chatListeners.forEach(listener => listener.unsubscribe?.()); unsubscribeNetInfo?.(); }; }, [clientExists]); return { connectionRecovering, isOnline }; }; exports.useIsOnline = useIsOnline; //# sourceMappingURL=useIsOnline.js.map