mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
- 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.
43 lines
966 B
TypeScript
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,
|
|
};
|
|
}
|