UNPKG

@react-native-community/netinfo

Version:
128 lines (111 loc) 3.29 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import { useState, useEffect } from 'react'; import { Platform } from 'react-native'; import DEFAULT_CONFIGURATION from './internal/defaultConfiguration'; import NativeInterface from './internal/nativeInterface'; import State from './internal/state'; import * as Types from './internal/types'; // Stores the currently used configuration let _configuration = DEFAULT_CONFIGURATION; // Stores the singleton reference to the state manager let _state = null; const createState = () => { return new State(_configuration); }; /** * Configures the library with the given configuration. Note that calling this will stop all * previously added listeners from being called again. It is best to call this right when your * application is started to avoid issues. * * @param configuration The new configuration to set. */ export function configure(configuration) { _configuration = { ...DEFAULT_CONFIGURATION, ...configuration }; if (_state) { _state.tearDown(); _state = createState(); } if (Platform.OS === 'ios') { NativeInterface.configure(configuration); } } /** * Returns a `Promise` that resolves to a `NetInfoState` object. * * @param [requestedInterface] interface from which to obtain the information * * @returns A Promise which contains the current connection state. */ export function fetch(requestedInterface) { if (!_state) { _state = createState(); } return _state.latest(requestedInterface); } /** * Force-refreshes the internal state of the NetInfo library. * * @returns A Promise which contains the updated connection state. */ export function refresh() { if (!_state) { _state = createState(); } return _state._fetchCurrentState(); } /** * Subscribe to connection information. The callback is called with a parameter of type * [`NetInfoState`](README.md#netinfostate) whenever the connection state changes. Your listener * will be called with the latest information soon after you subscribe and then with any * subsequent changes afterwards. You should not assume that the listener is called in the same * way across devices or platforms. * * @param listener The listener which is called when the network state changes. * * @returns A function which can be called to unsubscribe. */ export function addEventListener(listener) { if (!_state) { _state = createState(); } _state.add(listener); return () => { _state && _state.remove(listener); }; } /** * A React Hook which updates when the connection state changes. * * @returns The connection state. */ export function useNetInfo(configuration) { if (configuration) { configure(configuration); } const [netInfo, setNetInfo] = useState({ type: Types.NetInfoStateType.unknown, isConnected: null, isInternetReachable: null, details: null }); useEffect(() => { return addEventListener(setNetInfo); }, []); return netInfo; } export * from './internal/types'; export default { configure, fetch, refresh, addEventListener, useNetInfo }; //# sourceMappingURL=index.js.map