import { useState } from "react"; interface UseModalFormOptions { initialData: TFormData; onSubmit: (data: TFormData) => Promise; onSuccess?: () => void; onClose: () => void; } interface UseModalFormReturn { formData: TFormData; setFormData: React.Dispatch>; isLoading: boolean; error: string | null; setError: (error: string | null) => void; handleSubmit: () => Promise; handleClose: () => void; resetForm: () => void; } /** * Custom hook to manage modal form state and submission logic * Reduces boilerplate in modal components */ export const useModalForm = ({ initialData, onSubmit, onSuccess, onClose, }: UseModalFormOptions): UseModalFormReturn => { const [formData, setFormData] = useState(initialData); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const resetForm = () => { setFormData(initialData); setError(null); }; const handleSubmit = async () => { setIsLoading(true); setError(null); try { await onSubmit(formData); resetForm(); onSuccess?.(); onClose(); } catch (err) { setError(err instanceof Error ? err.message : "An error occurred"); } finally { setIsLoading(false); } }; const handleClose = () => { resetForm(); onClose(); }; return { formData, setFormData, isLoading, error, setError, handleSubmit, handleClose, resetForm, }; };