mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
56 lines
2.0 KiB
TypeScript
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;
|