@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
1 lines • 3 kB
Source Map (JSON)
{"version":3,"file":"use-fetch.mjs","names":[],"sources":["../../src/use-fetch/use-fetch.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseFetchOptions extends RequestInit {\n autoInvoke?: boolean;\n}\n\nexport interface UseFetchReturnValue<T> {\n data: T | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<any>;\n abort: () => void;\n}\n\nexport function useFetch<T>(\n url: string,\n { autoInvoke = true, ...options }: UseFetchOptions = {}\n): UseFetchReturnValue<T> {\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const controller = useRef<AbortController | null>(null);\n\n const refetch = useCallback(() => {\n if (controller.current) {\n controller.current.abort();\n }\n\n controller.current = new AbortController();\n\n setLoading(true);\n\n return fetch(url, { ...options, signal: controller.current.signal })\n .then((res) => {\n if (!res.ok) {\n throw new Error(`Request failed with status ${res.status}`);\n }\n return res.json();\n })\n .then((res) => {\n setData(res);\n setLoading(false);\n return res as T;\n })\n .catch((err) => {\n setLoading(false);\n\n if (err.name !== 'AbortError') {\n setError(err);\n }\n\n return err;\n });\n }, [url, JSON.stringify(options)]);\n\n const abort = useCallback(() => {\n if (controller.current) {\n controller.current?.abort('');\n }\n }, []);\n\n useEffect(() => {\n if (autoInvoke) {\n refetch();\n }\n\n return () => {\n if (controller.current) {\n controller.current.abort('');\n }\n };\n }, [refetch, autoInvoke]);\n\n return { data, loading, error, refetch, abort };\n}\n\nexport namespace useFetch {\n export type Options = UseFetchOptions;\n export type ReturnValue<T> = UseFetchReturnValue<T>;\n}\n"],"mappings":";;;AAcA,SAAgB,SACd,KACA,EAAE,aAAa,MAAM,GAAG,YAA6B,CAAC,GAC9B;CACxB,MAAM,CAAC,MAAM,WAAW,SAAmB,IAAI;CAC/C,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,YAAY,SAAuB,IAAI;CACrD,MAAM,aAAa,OAA+B,IAAI;CAEtD,MAAM,UAAU,kBAAkB;EAChC,IAAI,WAAW,SACb,WAAW,QAAQ,MAAM;EAG3B,WAAW,UAAU,IAAI,gBAAgB;EAEzC,WAAW,IAAI;EAEf,OAAO,MAAM,KAAK;GAAE,GAAG;GAAS,QAAQ,WAAW,QAAQ;EAAO,CAAC,EAChE,MAAM,QAAQ;GACb,IAAI,CAAC,IAAI,IACP,MAAM,IAAI,MAAM,8BAA8B,IAAI,QAAQ;GAE5D,OAAO,IAAI,KAAK;EAClB,CAAC,EACA,MAAM,QAAQ;GACb,QAAQ,GAAG;GACX,WAAW,KAAK;GAChB,OAAO;EACT,CAAC,EACA,OAAO,QAAQ;GACd,WAAW,KAAK;GAEhB,IAAI,IAAI,SAAS,cACf,SAAS,GAAG;GAGd,OAAO;EACT,CAAC;CACL,GAAG,CAAC,KAAK,KAAK,UAAU,OAAO,CAAC,CAAC;CAEjC,MAAM,QAAQ,kBAAkB;EAC9B,IAAI,WAAW,SACb,WAAW,SAAS,MAAM,EAAE;CAEhC,GAAG,CAAC,CAAC;CAEL,gBAAgB;EACd,IAAI,YACF,QAAQ;EAGV,aAAa;GACX,IAAI,WAAW,SACb,WAAW,QAAQ,MAAM,EAAE;EAE/B;CACF,GAAG,CAAC,SAAS,UAAU,CAAC;CAExB,OAAO;EAAE;EAAM;EAAS;EAAO;EAAS;CAAM;AAChD"}