import { useState, useCallback } from 'react'; import { handleError } from '../utils/errorHandling'; interface AsyncState { data: T | null; error: Error | null; loading: boolean; } export function useAsync() { const [state, setState] = useState>({ data: null, error: null, loading: false, }); const execute = useCallback(async (asyncFunction: () => Promise) => { setState({ data: null, error: null, loading: true }); try { const data = await asyncFunction(); setState({ data, error: null, loading: false }); return data; } catch (error) { const handledError = handleError(error, 'Async Operation'); setState({ data: null, error: handledError, loading: false }); throw handledError; } }, []); return { ...state, execute }; }