import React, { useEffect, useMemo, useState } from "react"; import { createPortal } from "react-dom"; export default function AddCustomCategoryModal({ open, onClose, onSubmit }) { const [name, setName] = useState(""); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); // Reset the form whenever the modal is opened. // NOTE: Hooks must be called in the same order on every render; do not early-return before hooks. useEffect(() => { if (!open) return; setName(""); setError(null); setSubmitting(false); }, [open]); const canSubmit = useMemo(() => { return name.trim().length > 0 && name.trim().length <= 100 && !submitting; }, [name, submitting]); async function handleSubmit(e) { e.preventDefault(); if (!canSubmit) return; setSubmitting(true); setError(null); try { await onSubmit({ name: name.trim() }); onClose?.(); } catch (err) { setError( err?.response?.data?.message || err?.message || "Failed to create custom category" ); setSubmitting(false); } } if (!open) return null; return createPortal(