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