import { useQuery } from '@tanstack/react-query'; type PendingSignaturesResponse = { count: number; org_id: string | null; demo?: boolean; error?: string; }; /** * Hook pour récupérer le nombre de signatures employeur en attente * * Configuration optimisée pour le temps réel sans surcharger Supabase : * - Polling toutes les 30 secondes quand l'onglet est actif * - Pause automatique quand l'onglet est en arrière-plan * - Refetch immédiat au retour sur l'onglet * - Cache de 30 secondes pour éviter les requêtes doublons * * @param orgId - ID de l'organisation (optionnel, pour les staff) * @param enabled - Activer ou désactiver le hook (défaut: true) */ export function usePendingSignatures(orgId?: string | null, enabled: boolean = true) { return useQuery({ queryKey: ['pending-signatures-count', orgId], queryFn: async () => { const url = orgId ? `/api/signatures-electroniques/pending-count?org_id=${orgId}` : `/api/signatures-electroniques/pending-count`; const res = await fetch(url, { cache: 'no-store', headers: { 'Accept': 'application/json', }, }); if (!res.ok) { throw new Error('Erreur lors de la récupération du compteur'); } const data = await res.json(); return data; }, // Stratégie de cache optimisée staleTime: 30 * 1000, // 30 secondes - considéré comme "frais" gcTime: 5 * 60 * 1000, // 5 minutes - conservation en cache // Polling intelligent refetchInterval: 30 * 1000, // Polling toutes les 30 secondes refetchIntervalInBackground: false, // PAUSE quand l'onglet est en arrière-plan // Refetch automatique refetchOnWindowFocus: true, // Refetch au retour sur l'onglet refetchOnMount: true, // Refetch au montage du composant refetchOnReconnect: true, // Refetch après reconnexion réseau // Retry strategy retry: 1, // 1 seul retry en cas d'échec retryDelay: 1000, // 1 seconde entre les retries // Activation conditionnelle enabled: enabled, }); }