From 96edf676f4406a234c4da6d30b2b37629a507ec4 Mon Sep 17 00:00:00 2001 From: nflnkr <105123049+nflnkr@users.noreply.github.com> Date: Tue, 8 Aug 2023 14:23:11 +0300 Subject: [PATCH] add usePrivileges hook --- src/hooks/usePrivileges.ts | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/hooks/usePrivileges.ts diff --git a/src/hooks/usePrivileges.ts b/src/hooks/usePrivileges.ts new file mode 100644 index 0000000..23a9d67 --- /dev/null +++ b/src/hooks/usePrivileges.ts @@ -0,0 +1,39 @@ +import { useEffect, useLayoutEffect, useRef } from "react"; +import { makeRequest } from "../api"; +import { PrivilegeWithAmount } from "../model"; + + +export function usePrivilegeFetcher({ + onSuccess, + url = process.env.NODE_ENV === "production" ? "/strator/privilege" : "https://admin.pena.digital/strator/privilege", + onError, +}: { + onSuccess: (response: PrivilegeWithAmount[]) => 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]); +}