Files
matrix-frontend/hooks/useService.ts
T
2024-11-22 14:12:18 +01:00

36 lines
846 B
TypeScript

import {useState, useEffect} from 'react';
type AsyncCallback<T> = () => Promise<T>;
interface ServiceResult<T> {
data: T | null,
error: Error | null,
loading: boolean,
}
const useService = <T>(callback: AsyncCallback<T>): ServiceResult<T> => {
const [data, setData] = useState<T | null>(null);
const [loading, setLoading] = useState<boolean>(true);
const [error, setError] = useState<Error | null>(null);
useEffect(() => {
const executeCallback = async () => {
setLoading(true);
try {
const result = await callback(); // Führe den übergebenen Callback aus
setData(result);
} catch (err) {
setError(err as Error);
} finally {
setLoading(false);
}
};
executeCallback();
}, [callback]);
return {data, loading, error};
}
export default useService;