hooks/useConfigReservation.ts

hook·mobile·1.8 KB · 49 lignes· Voir l'itinéraire

Annotation

Ce hook gère la récupération et la mise à jour de la configuration des réservations pour un gérant dans l'application mobile. Il expose `useConfigReservation` pour lire la configuration via une requête `GET` et `useUpdateConfigReservation` pour la modifier via une requête `PATCH`. Ces hooks sont utilisés dans les composants qui nécessitent d'afficher ou de modifier les paramètres de réservation d'une prestation, en s'appuyant sur le store d'authentification pour le token et le rôle de l'utilisateur.

2 exports

useConfigReservationuseUpdateConfigReservation

Code source· typescript

import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { apiGet, apiPatch } from "@/lib/api";
import { API_MOBILE } from "@/lib/constants";
import type {
  ConfigReservationGerantResponse,
  UpdateConfigReservationPayload,
  ConfigReservationGerant,
} from "@/types/api";
import { useAuthStore } from "@/store/authStore";

export function useConfigReservation(prestationId: string | null) {
  const token = useAuthStore((s) => s.token);
  const role = useAuthStore((s) => s.user?.role);
  return useQuery({
    queryKey: ["vitrine-pro", "config-reservation", prestationId],
    queryFn: async () => {
      const { data, error } = await apiGet<ConfigReservationGerantResponse>(
        API_MOBILE.VITRINE_SERVICE_CONFIG(prestationId!)
      );
      if (error || !data) throw new Error(error ?? "Erreur config réservation");
      return data;
    },
    enabled: !!token && role === "TENANT_ADMIN" && !!prestationId,
    staleTime: 30 * 1000,
  });
}

export function useUpdateConfigReservation() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: async ({
      prestationId,
      ...payload
    }: { prestationId: string } & UpdateConfigReservationPayload) => {
      const { data, error } = await apiPatch<{ config: ConfigReservationGerant | null }>(
        API_MOBILE.VITRINE_SERVICE_CONFIG(prestationId),
        payload
      );
      if (error || !data) throw new Error(error ?? "Erreur mise à jour config");
      return data.config;
    },
    onSuccess: (_, { prestationId }) => {
      qc.invalidateQueries({ queryKey: ["vitrine-pro", "config-reservation", prestationId] });
      qc.invalidateQueries({ queryKey: ["vitrine-pro", "services"] });
      qc.invalidateQueries({ queryKey: ["vitrine-pro", "catalogue"] });
    },
  });
}