Files
hexabot/widget/src/hooks/useSocketGetQuery.tsx
Mohamed Marrouchi 30e5766487 feat: initial commit
2024-09-10 10:50:11 +01:00

56 lines
2.0 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).
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
*/
import { useEffect, useState } from 'react';
import { useSocket } from '../providers/SocketProvider';
type UseSocketGetQueryReturnType<T> = {
data: T | null;
isLoading: boolean;
error: string | null;
isError: boolean;
};
function useSocketGetQuery<T>(url: string): UseSocketGetQueryReturnType<T> {
const { socket } = useSocket();
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 socket.get<T>(url);
if (response.statusCode < 200 || response.statusCode > 299) {
throw new Error(`HTTP error! status: ${response.statusCode}`);
}
setData(response.body);
} catch (error) {
setError((error as Error).message);
setIsError(true);
} finally {
setIsLoading(false);
}
};
fetchData();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [url]);
return { data, isLoading, error, isError };
}
export default useSocketGetQuery;