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({ 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(); }