hexabot/widget/src/hooks/useGetQuery.tsx

53 lines
1.6 KiB
TypeScript
Raw Normal View History

2024-09-10 09:50:11 +00:00
/*
* 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;