netsignal
Version:
Ultra-fast network state for React Native 0.80+ (New Architecture)
83 lines • 2.33 kB
JavaScript
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