All files / hook useEpreuve.ts

100% Statements 54/54
100% Branches 1/1
100% Functions 9/9
100% Lines 54/54

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1013x   3x   3x                       3x 8x 8x 8x           8x 5x 5x 5x 5x 4x   1x 1x 1x   5x       8x 4x     8x     3x 4x 4x 4x   4x 2x 2x 2x 2x 1x   1x 1x 1x   2x       4x 2x     4x     3x 11x 11x 11x   11x 4x 4x 4x 4x 3x   1x 1x   4x       11x 4x 3x       11x  
import {useState, useEffect, useCallback} from "react";
import {Epreuve, EpreuveCardType, EpreuveFilters} from "@/type/evenement/epreuve";
import { EpreuveService } from "@/lib/api/service/epreuveService";
import {Evenement} from "@/type/evenement/evenement";
import {EvenementService} from "@/lib/api/service/evenementService";
 
 
 
/**
 * Hook personnalisé pour récupérer les épreuves au format carte avec gestion d'état
 * @param initialFilters - Filtres optionnels à appliquer lors du chargement initial
 * @returns Objet contenant les épreuves au format carte, l'état de chargement, les erreurs et une fonction de rafraîchissement
 * @example
 * const { epreuves, loading, error, refreshEpreuves } = useEpreuvesCards();
 * const { epreuves: filteredEpreuves } = useEpreuvesCards({ disciplineId: 1 });
 */
export function useEpreuvesCards(initialFilters?: EpreuveFilters) {
  const [epreuves, setEpreuves] = useState<EpreuveCardType[]>([]);
  const [loading, setLoading] = useState<boolean>(true);
  const [error, setError] = useState<Error | null>(null);
 
  /**
   * Fonction pour récupérer les épreuves avec filtres optionnels
   * @param filters - Filtres à appliquer à la requête
   */
  const fetchEpreuves = useCallback(async (filters?: EpreuveFilters) => {
    setLoading(true);
    setError(null);
    try {
      const data = await EpreuveService.getAllEvenementsAsCards(filters);
      setEpreuves(data);
    } catch (err) {
      console.error("Erreur récupération des épreuves :", err);
      setError(err as Error);
      setEpreuves([]);
    } finally {
      setLoading(false);
    }
  }, []);
 
  useEffect(() => {
    fetchEpreuves(initialFilters);
  }, [fetchEpreuves, initialFilters]);
 
  return { epreuves, loading, error, fetchEpreuves };
}
 
export function useEpreuves(initialFilters?: EpreuveFilters) {
  const [epreuves, setEpreuves] = useState<Epreuve[]>([]);
  const [loading, setLoading] = useState<boolean>(true);
  const [error, setError] = useState<Error | null>(null);
 
  const fetchEpreuves = useCallback(async (filters?: EpreuveFilters) => {
  setLoading(true);
  setError(null);
  try {
    const data = await EpreuveService.getAllEpreuves(filters);
    setEpreuves(data);
  } catch (err) {
    console.error("Erreur récupération des épreuves :", err);
    setError(err as Error);
    setEpreuves([]);
  } finally {
    setLoading(false);
  }
}, []);
 
  useEffect(() => {
    fetchEpreuves(initialFilters);
  }, [fetchEpreuves, initialFilters]);
 
  return { epreuves, loading, error, fetchEpreuves };
}
 
export function useEvenementByEpreuveId(id: number) {
  const [evenement, setEvenement] = useState<Evenement | null>(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState<Error | null>(null);
 
  const fetchEvenement = useCallback(async () => {
    setLoading(true);
    setError(null);
    try {
      const data = await EvenementService.getEvenementByEpreuveId(id);
      setEvenement(data);
    } catch (err) {
      setError(err as Error);
      setEvenement(null);
    } finally {
      setLoading(false);
    }
  }, [id]);
 
  useEffect(() => {
    if (id) {
      fetchEvenement();
    }
  }, [fetchEvenement, id]);
 
  return { evenement, loading, error, refetch: fetchEvenement };
}