All files / hook useReservationOffer.ts

100% Statements 11/11
100% Branches 0/0
100% Functions 4/4
100% Lines 10/10

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                                                                    2x 2x                               2x 11x 24x             11x 6x               11x 2x     11x    
/**
 * Hook personnalisé pour la gestion des réservations d'offres dans le panier Redux
 *
 * Ce module contient le hook useReservationOffer qui fournit une interface simple
 * pour gérer les réservations d'offres de billets dans le panier. Il encapsule
 * la logique Redux et offre des fonctions pratiques pour l'ajout/suppression.
 *
 * ## Fonctionnalités principales
 * - Interface simplifiée pour les actions Redux du panier
 * - Accès en lecture aux offres réservées
 * - Fonctions d'ajout et de suppression d'offres
 * - Intégration transparente avec le store Redux
 * - Typage TypeScript complet
 *
 * ## Actions disponibles
 * - **reservePlaces** : Ajoute une offre au panier
 * - **unReservePlaces** : Retire une offre du panier
 * - **reservedOffers** : Liste des offres actuellement dans le panier
 *
 * ## Intégration Redux
 * - Utilise useAppDispatch pour les actions
 * - Utilise useAppSelector pour l'état du panier
 * - Actions synchronisées avec panierSlice
 * - Persistance automatique en localStorage
 *
 * ## Utilisation typique
 * - Intégré dans les composants CardOffre
 * - Utilisé dans les modals de réservation
 * - Synchronisation avec l'affichage du compteur panier
 *
 * @module hook/useReservationOffer
 * @group Hooks
 */
 
import {useAppDispatch, useAppSelector} from "@/store/hooks";
import {addOneArticleToCart, removeOneArticleFromCart} from "@/lib/reducer/panier/panierSlice";
 
/**
 * Hook personnalisé pour gérer les réservations d'offres dans le panier.
 * Voir la documentation du module ci-dessus pour les détails complets.
 *
 * @returns Objet contenant les offres réservées et les fonctions de gestion
 * @example
 * const { reservedOffers, reservePlaces, unReservePlaces } = useReservationOffer();
 *
 * // Ajouter une offre au panier
 * reservePlaces(1, 2);
 *
 * // Retirer une offre du panier
 * unReservePlaces(1, 2);
 */
export function useReservationOffer() {
  const dispatch = useAppDispatch();
  const reservedOffers = useAppSelector(state => state.panier.items);
 
  /**
   * Ajoute une offre au panier (réserve une place)
   * @param evenementId - ID de l'événement
   * @param offreId - ID de l'offre à réserver
   */
  const reservePlaces = (evenementId: number, offreId: number) => {
    dispatch(addOneArticleToCart({ evenementId: evenementId, offreId: offreId }));
  };
 
  /**
   * Retire une offre du panier (annule une réservation)
   * @param evenementId - ID de l'événement
   * @param offreId - ID de l'offre à retirer
   */
  const unReservePlaces = (evenementId: number, offreId: number) => {
    dispatch(removeOneArticleFromCart({ evenementId: evenementId, offreId: offreId }));
  };
 
  return { reservedOffers, reservePlaces, unReservePlaces };
}