From d07cbb7c84a9294898d8aa07911bd83fe684a399 Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Thu, 22 Oct 2026 05:00:30 +0100 Subject: [PATCH] Don't crash Form's change handler outside a form Form reads the closest form on every change. A field rendered through a portal (a Modal) has no form ancestor in the DOM, so FormData(null) threw. Change handlers now get an empty object instead. --- src/form/Form.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/form/Form.tsx b/src/form/Form.tsx index ab88e61..680003b 100644 --- a/src/form/Form.tsx +++ b/src/form/Form.tsx @@ -37,9 +37,12 @@ export default function Form< onChange={(e) => { e.preventDefault(); const taregtEl = e.target as HTMLElement; - const formEl = taregtEl.closest("form") as HTMLFormElement; - const formData = new FormData(formEl); - const data = Object.fromEntries(formData.entries()) as T; + const formEl = taregtEl.closest("form") as HTMLFormElement | null; + const data = formEl + ? (Object.fromEntries( + new FormData(formEl).entries(), + ) as T) + : ({} as T); props.changeHandler?.(e, data); props.onChange?.(e); }}