74 lines
1.9 KiB
TypeScript
74 lines
1.9 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
import NetInfo, { NetInfoState, NetInfoStateType } from '@react-native-community/netinfo';
|
|
|
|
export interface NetworkStatus {
|
|
isConnected: boolean;
|
|
isInternetReachable: boolean | null;
|
|
type: NetInfoStateType;
|
|
isWifi: boolean;
|
|
isCellular: boolean;
|
|
}
|
|
|
|
/**
|
|
* Hook para detectar el estado de la conexión de red
|
|
*/
|
|
export function useNetworkStatus(): NetworkStatus {
|
|
const [networkStatus, setNetworkStatus] = useState<NetworkStatus>({
|
|
isConnected: true,
|
|
isInternetReachable: true,
|
|
type: NetInfoStateType.unknown,
|
|
isWifi: false,
|
|
isCellular: false,
|
|
});
|
|
|
|
useEffect(() => {
|
|
const unsubscribe = NetInfo.addEventListener((state: NetInfoState) => {
|
|
setNetworkStatus({
|
|
isConnected: state.isConnected ?? false,
|
|
isInternetReachable: state.isInternetReachable,
|
|
type: state.type,
|
|
isWifi: state.type === NetInfoStateType.wifi,
|
|
isCellular: state.type === NetInfoStateType.cellular,
|
|
});
|
|
});
|
|
|
|
// Obtener estado inicial
|
|
NetInfo.fetch().then((state) => {
|
|
setNetworkStatus({
|
|
isConnected: state.isConnected ?? false,
|
|
isInternetReachable: state.isInternetReachable,
|
|
type: state.type,
|
|
isWifi: state.type === NetInfoStateType.wifi,
|
|
isCellular: state.type === NetInfoStateType.cellular,
|
|
});
|
|
});
|
|
|
|
return () => {
|
|
unsubscribe();
|
|
};
|
|
}, []);
|
|
|
|
return networkStatus;
|
|
}
|
|
|
|
/**
|
|
* Hook simplificado para verificar si hay conexión
|
|
*/
|
|
export function useIsOnline(): boolean {
|
|
const { isConnected, isInternetReachable } = useNetworkStatus();
|
|
|
|
// isInternetReachable puede ser null mientras se determina
|
|
if (isInternetReachable === null) {
|
|
return isConnected;
|
|
}
|
|
|
|
return isConnected && isInternetReachable;
|
|
}
|
|
|
|
/**
|
|
* Hook simplificado para verificar si está offline
|
|
*/
|
|
export function useIsOffline(): boolean {
|
|
return !useIsOnline();
|
|
}
|