mirror of
https://github.com/hexastack/hexabot
synced 2025-02-23 21:04:15 +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;
|