-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuseFetch.template
35 lines (30 loc) · 903 Bytes
/
useFetch.template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const DEFAULT_OPTIONS = {
headers: { "Content-Type": "application/json" },
};
export function useFetch(url, options = {}, dependencies = []) {
return useAsync(async () => {
const mergedHeaders = new Headers(DEFAULT_OPTIONS.headers);
new Headers(options.headers).forEach((value, key) => {
mergedHeaders.set(key, value);
});
const mergedOptions = {
...DEFAULT_OPTIONS,
...options,
headers: mergedHeaders,
};
const response = await fetch(url, mergedOptions);
if (!response.ok) {
try {
const errorData = await response.json();
throw new Error(
errorData.message || response.statusText || "Request failed"
);
} catch (error) {
throw new Error(
error instanceof Error ? error.message : "Failed to parse error"
);
}
}
return response.json();
}, dependencies);
}