40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
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<never, Privilege[]>({
|
|
url,
|
|
method: "get",
|
|
useToken: true,
|
|
signal: controller.signal,
|
|
}).then((result) => {
|
|
onSuccessRef.current(result);
|
|
}).catch(error => {
|
|
onErrorRef.current?.(error);
|
|
});
|
|
|
|
return () => controller.abort();
|
|
}, [url]);
|
|
}
|