hooks/useConfigReservation.ts
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"] });
},
});
}
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"] });
},
});
}