mirror of
https://github.com/hexastack/hexabot
synced 2025-02-24 05:14:47 +00:00
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
|
/*
|
||
|
* Copyright © 2024 Hexastack. All rights reserved.
|
||
|
*
|
||
|
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
|
||
|
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
|
||
|
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
|
||
|
*/
|
||
|
|
||
|
import { useEffect, useState } from 'react';
|
||
|
|
||
|
type UseSocketGetQueryReturnType<T> = {
|
||
|
data: T | null;
|
||
|
isLoading: boolean;
|
||
|
error: string | null;
|
||
|
isError: boolean;
|
||
|
};
|
||
|
|
||
|
function useGetQuery<T>(url: string): UseSocketGetQueryReturnType<T> {
|
||
|
const [data, setData] = useState<T | null>(null);
|
||
|
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||
|
const [error, setError] = useState<string | null>(null);
|
||
|
const [isError, setIsError] = useState<boolean>(false);
|
||
|
|
||
|
useEffect(() => {
|
||
|
const fetchData = async () => {
|
||
|
setIsLoading(true);
|
||
|
setIsError(false);
|
||
|
try {
|
||
|
const response = await fetch(url);
|
||
|
|
||
|
if (!response.ok) {
|
||
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||
|
}
|
||
|
|
||
|
const json = await response.json();
|
||
|
|
||
|
setData(json);
|
||
|
} catch (error) {
|
||
|
setError((error as Error).message);
|
||
|
setIsError(true);
|
||
|
} finally {
|
||
|
setIsLoading(false);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
fetchData();
|
||
|
}, [url]);
|
||
|
|
||
|
return { data, isLoading, error, isError };
|
||
|
}
|
||
|
|
||
|
export default useGetQuery;
|