| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import type { Ref } from "vue";
- import type { FetchContext, FetchOptions } from "ofetch";
- import ApiRequestService from "~/services/data/apiRequestService";
- /**
- * Retourne une instance de ApiRequestService configurée pour interroger l'api Maestro
- *
- * @see https://github.com/unjs/ohmyfetch/blob/main/README.md#%EF%B8%8F-create-fetch-with-default-options
- */
- let apiRequestServiceClass: null | ApiRequestService = null;
- export const useMaestroRequestService = () => {
- const runtimeConfig = useRuntimeConfig();
- const baseURL = runtimeConfig.apiBaseUrl ?? runtimeConfig.public.apiBaseUrl;
- const pending: Ref<boolean> = ref(false);
- /**
- * Peuple les headers avant l'envoi de la requête
- *
- * @param request
- * @param options
- */
- const onRequest = async function ({ request, options }: FetchContext) {
- // @ts-ignore
- if (options && options.noXaccessId) {
- return;
- }
- pending.value = true;
- console.log("Request : " + request + " (SSR: " + process.server + ")");
- };
- const onResponse = async function ({
- request,
- options,
- response,
- }: FetchContext) {
- pending.value = false;
- };
- /**
- * Gère les erreurs retournées par l'api
- *
- * @param request
- * @param response
- * @param error
- */
- const config: FetchOptions = {
- baseURL,
- onRequest,
- onResponse,
- };
- // Avoid memory leak
- if (apiRequestServiceClass === null) {
- // Utilise la fonction `create` d'ohmyfetch pour générer un fetcher dédié à l'interrogation de Ap2i
- const fetcher = $fetch.create(config);
- // @ts-ignore
- apiRequestServiceClass = new ApiRequestService(fetcher);
- }
- return { apiRequestService: apiRequestServiceClass, pending };
- };
|