import { useEffect, useLayoutEffect, useRef } from "react"; import { makeRequest } from "../api"; import { Privilege } from "../model"; export function usePrivilegeFetcher({ onSuccess, url = process.env.REACT_APP_DOMAIN + "/strator/privilege", onError, }: { onSuccess: (response: Privilege[]) => void; url?: string; onError?: (error: Error) => void; }) { const onSuccessRef = useRef(onSuccess); const onErrorRef = useRef(onError); useLayoutEffect(() => { onSuccessRef.current = onSuccess; onErrorRef.current = onError; }, [onSuccess, onError]); useEffect(function fetchTickets() { const controller = new AbortController(); makeRequest({ url, method: "get", useToken: true, signal: controller.signal, }).then((result) => { onSuccessRef.current(result); }).catch(error => { onErrorRef.current?.(error); }); return () => controller.abort(); }, [url]); }