turash/bugulma/frontend/hooks/useAsyncOperation.ts
Damir Mukimov 6347f42e20
Consolidate repositories: Remove nested frontend .git and merge into main repository
- Remove nested git repository from bugulma/frontend/.git
- Add all frontend files to main repository tracking
- Convert from separate frontend/backend repos to unified monorepo
- Preserve all frontend code and development history as tracked files
- Eliminate nested repository complexity for simpler development workflow

This creates a proper monorepo structure with frontend and backend
coexisting in the same repository for easier development and deployment.
2025-11-25 06:02:57 +01:00

43 lines
966 B
TypeScript

import { useCallback, useState } from 'react';
/**
* Hook for managing async operations with consistent loading and error states
*/
export function useAsyncOperation<T extends any[]>(
operation: (...args: T) => Promise<void>,
options: {
onSuccess?: () => void;
onError?: (error: Error) => void;
} = {}
) {
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState<Error | null>(null);
const execute = useCallback(async (...args: T) => {
setIsLoading(true);
setError(null);
try {
await operation(...args);
options.onSuccess?.();
} catch (err) {
const error = err instanceof Error ? err : new Error(String(err));
setError(error);
options.onError?.(error);
} finally {
setIsLoading(false);
}
}, [operation, options]);
const reset = useCallback(() => {
setError(null);
}, []);
return {
execute,
isLoading,
error,
reset,
};
}