All files / hook useDisciplines.ts

100% Statements 13/13
100% Branches 0/0
100% Functions 4/4
100% Lines 13/13

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 332x   2x                           2x 5x 5x 5x   5x 3x 3x 3x   1x 3x     5x    
import { useState, useEffect } from "react";
import { Discipline } from "@/type/evenement/discipline";
import { DisciplineService, DisciplineFilters } from "@/lib/api/service/disciplineService";
 
/**
 * @group Hooks
 */
 
/**
 * Hook personnalisé pour récupérer la liste des disciplines avec gestion d'état
 * @param filters - Filtres optionnels pour la recherche et pagination
 * @returns Objet contenant les disciplines, l'état de chargement et les erreurs
 * @example
 * const { disciplines, loading, error } = useDisciplines();
 * const { disciplines: filteredDisciplines } = useDisciplines({ nom: 'Athlétisme' });
 */
export function useDisciplines(filters?: DisciplineFilters) {
  const [disciplines, setDisciplines] = useState<Discipline[]>([]);
  const [loading, setLoading] = useState<boolean>(true);
  const [error, setError] = useState<Error | null>(null);
 
  useEffect(() => {
    setLoading(true);
    setError(null);
    DisciplineService.getAllDisciplines(filters)
      .then(setDisciplines)
      .catch(err => setError(err))
      .finally(() => setLoading(false));
  }, [filters]);
 
  return { disciplines, loading, error };
}