UNPKG

@react-native-community/netinfo

Version:
2 lines 3.27 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var InternetReachability=function InternetReachability(configuration,listener){var _this=this;(0,_classCallCheck2.default)(this,InternetReachability);this._isInternetReachable=undefined;this._currentInternetReachabilityCheckHandler=null;this._currentTimeoutHandle=null;this._setIsInternetReachable=function(isInternetReachable){if(_this._isInternetReachable===isInternetReachable){return;}_this._isInternetReachable=isInternetReachable;_this._listener(_this._isInternetReachable);};this._setExpectsConnection=function(expectsConnection){if(_this._currentInternetReachabilityCheckHandler!==null){_this._currentInternetReachabilityCheckHandler.cancel();_this._currentInternetReachabilityCheckHandler=null;}if(_this._currentTimeoutHandle!==null){clearTimeout(_this._currentTimeoutHandle);_this._currentTimeoutHandle=null;}if(expectsConnection){if(!_this._isInternetReachable){_this._setIsInternetReachable(null);}_this._currentInternetReachabilityCheckHandler=_this._checkInternetReachability();}else{_this._setIsInternetReachable(false);}};this._checkInternetReachability=function(){var responsePromise=fetch(_this._configuration.reachabilityUrl,{method:'HEAD',cache:'no-cache'});var timeoutHandle;var timeoutPromise=new Promise(function(_,reject){timeoutHandle=setTimeout(function(){return reject('timedout');},_this._configuration.reachabilityRequestTimeout);});var cancel=function cancel(){};var cancelPromise=new Promise(function(_,reject){cancel=function cancel(){return reject('canceled');};});var promise=Promise.race([responsePromise,timeoutPromise,cancelPromise]).then(function(response){return _this._configuration.reachabilityTest(response);}).then(function(result){_this._setIsInternetReachable(result);var nextTimeoutInterval=_this._isInternetReachable?_this._configuration.reachabilityLongTimeout:_this._configuration.reachabilityShortTimeout;_this._currentTimeoutHandle=setTimeout(_this._checkInternetReachability,nextTimeoutInterval);}).catch(function(error){if(error!=='canceled'){_this._setIsInternetReachable(false);_this._currentTimeoutHandle=setTimeout(_this._checkInternetReachability,_this._configuration.reachabilityShortTimeout);}}).then(function(){clearTimeout(timeoutHandle);},function(error){clearTimeout(timeoutHandle);throw error;});return{promise:promise,cancel:cancel};};this.update=function(state){if(typeof state.isInternetReachable==='boolean'){_this._setIsInternetReachable(state.isInternetReachable);}else{_this._setExpectsConnection(state.isConnected);}};this.currentState=function(){return _this._isInternetReachable;};this.tearDown=function(){if(_this._currentInternetReachabilityCheckHandler!==null){_this._currentInternetReachabilityCheckHandler.cancel();_this._currentInternetReachabilityCheckHandler=null;}if(_this._currentTimeoutHandle!==null){clearTimeout(_this._currentTimeoutHandle);_this._currentTimeoutHandle=null;}};this._configuration=configuration;this._listener=listener;};exports.default=InternetReachability; //# sourceMappingURL=internetReachability.js.map