/** * useWizardSubmit - Standardized hook for wizard submission * * Provides consistent loading states, error handling, and success callbacks * across all wizard types. */ import { useState, useCallback } from 'react'; interface UseWizardSubmitOptions { onSubmit: (data: T) => Promise; onSuccess?: (data: T) => void; onError?: (error: Error) => void; } interface UseWizardSubmitReturn { submit: (data: T) => Promise; loading: boolean; error: string | null; clearError: () => void; } export function useWizardSubmit({ onSubmit, onSuccess, onError, }: UseWizardSubmitOptions): UseWizardSubmitReturn { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const submit = useCallback( async (data: T) => { setLoading(true); setError(null); try { await onSubmit(data); onSuccess?.(data); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'An error occurred during submission'; setError(errorMessage); onError?.(err instanceof Error ? err : new Error(errorMessage)); } finally { setLoading(false); } }, [onSubmit, onSuccess, onError] ); const clearError = useCallback(() => { setError(null); }, []); return { submit, loading, error, clearError, }; }