store/networkStore.ts

hook·mobile·1.2 KB · 38 lignes· Voir l'itinéraire
Annotation non disponible

Lance npm run annotate (nécessite ANTHROPIC_API_KEY dans .env.local) pour générer une annotation française par Claude Haiku 4.5.

1 export

useNetworkStore

Code source· typescript

import { create } from 'zustand';
import NetInfo, { type NetInfoSubscription } from '@react-native-community/netinfo';

type NetworkState = {
  isOnline: boolean;
  isInternetReachable: boolean | null;
  connectionType: string | null;
  /** Souscrit aux changements NetInfo. Retourne unsubscribe. */
  init: () => () => void;
};

/**
 * Source de vérité connectivité — utilise @react-native-community/netinfo.
 *
 * Différent de `hooks/useNetworkStatus.ts` (legacy ping HTTP /mobile/health
 * toutes les 30s) qui détecte aussi les coupures DNS/proxy captif mais coûte
 * un round-trip réseau. NetInfo donne l'info instantanée du système.
 *
 * V1 : on garde les deux. Le store ici est consommé par OfflineBanner + queue
 * sync ; le hook useNetworkStatus reste pour l'ancien banner (en attendant
 * migration complète).
 */
export const useNetworkStore = create<NetworkState>((set) => ({
  isOnline: true,
  isInternetReachable: null,
  connectionType: null,
  init: () => {
    const unsub: NetInfoSubscription = NetInfo.addEventListener((state) => {
      set({
        isOnline: state.isConnected ?? false,
        isInternetReachable: state.isInternetReachable,
        connectionType: state.type,
      });
    });
    return unsub;
  },
}));