UNPKG

netsignal

Version:

Ultra-fast network state for React Native 0.80+ (New Architecture)

83 lines 2.33 kB
import { useEffect, useState } from 'react'; import { NativeEventEmitter, NativeModules } from 'react-native'; import NativeNetSignal from './NativeNetSignal'; class NetSignalModule { listeners = new Set(); constructor() { this.emitter = new NativeEventEmitter(NativeModules.NetSignal); } isConnected() { return NativeNetSignal.isConnected(); } getConnectionType() { return NativeNetSignal.getConnectionType(); } getActiveConnectionCount() { return NativeNetSignal.getActiveConnectionCount(); } hasMultipleConnections() { return NativeNetSignal.hasMultipleConnections(); } getSimpleSummary() { const summary = NativeNetSignal.getSimpleSummary(); return { connected: summary.connected, type: summary.type, connectionCount: summary.connectionCount, multipleConnections: summary.multipleConnections }; } async getAllActiveConnections() { const result = await NativeNetSignal.getAllActiveConnections(); return result.connections; } addEventListener(listener) { if (this.listeners.size === 0) { NativeNetSignal.addListener('netSignalChange'); this.emitter.addListener('netSignalChange', this.handleEvent); } this.listeners.add(listener); return () => { this.listeners.delete(listener); if (this.listeners.size === 0) { this.emitter.removeAllListeners('netSignalChange'); NativeNetSignal.removeListeners(1); } }; } handleEvent = event => { for (const listener of this.listeners) { listener(event); } }; } const NetSignal = new NetSignalModule(); export function useNetworkState() { const [state, setState] = useState(NetSignal.getSimpleSummary()); useEffect(() => { setState(NetSignal.getSimpleSummary()); return NetSignal.addEventListener(event => { setState({ connected: event.isConnected, type: event.type, connectionCount: event.connectionCount, multipleConnections: event.connectionCount > 1 }); }); }, []); return state; } export function useIsConnected() { const { connected } = useNetworkState(); return connected; } export function useConnectionType() { const { type } = useNetworkState(); return type; } export default NetSignal; //# sourceMappingURL=index.js.map