UIKit/lib/hooks/usePrivilegeFetcher.ts

40 lines
1.0 KiB
TypeScript
Raw Normal View History

2023-08-08 11:23:11 +00:00
import { useEffect, useLayoutEffect, useRef } from "react";
import { makeRequest } from "../api";
import { Privilege } from "../model";
2023-08-08 11:23:11 +00:00
export function usePrivilegeFetcher({
onSuccess,
url = process.env.REACT_APP_DOMAIN + "/strator/privilege",
2023-08-08 11:23:11 +00:00
onError,
}: {
onSuccess: (response: Privilege[]) => void;
2023-08-08 11:23:11 +00:00
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[]>({
2023-08-08 11:23:11 +00:00
url,
method: "get",
useToken: true,
signal: controller.signal,
}).then((result) => {
onSuccessRef.current(result);
}).catch(error => {
onErrorRef.current?.(error);
});
return () => controller.abort();
}, [url]);
}