import { useRef, useLayoutEffect, useEffect } from "react"; import { GetTariffsResponse, Tariff } from "../model/tariff"; import { makeRequest } from "../api/makeRequest"; export function useAllTariffsFetcher({ enabled = true, baseUrl = process.env.REACT_APP_DOMAIN + "/strator/tariff", onSuccess, onError, }: { enabled?: boolean; baseUrl?: string; onSuccess: (response: Tariff[]) => void; onError?: (error: Error) => void; }) { const onNewTariffsRef = useRef(onSuccess); const onErrorRef = useRef(onError); useLayoutEffect(() => { onNewTariffsRef.current = onSuccess; onErrorRef.current = onError; }, [onError, onSuccess]); useEffect(() => { if (!enabled) return; const controller = new AbortController(); async function getPaginatedTariffs() { let apiPage = 1; const tariffsPerPage = 100; let isDone = false; while (!isDone) { try { const result = await makeRequest({ url: baseUrl + `?page=${apiPage}&limit=${tariffsPerPage}`, method: "get", useToken: true, signal: controller.signal, }); if (result) onNewTariffsRef.current(result.tariffs); if (result.totalPages < apiPage) { apiPage++; } else { isDone = true; } } catch (error) { onErrorRef.current?.(error as Error); isDone = true; } } } getPaginatedTariffs(); return () => controller.abort(); }, [baseUrl, enabled]); }