@@ -100,12 +100,26 @@ let serializeForm = (form, metadata, onlyNames = []) => {
100100
101101 const params = new URLSearchParams ( )
102102
103- let elements = Array . from ( form . elements )
103+ const { inputsUnused, onlyHiddenInputs} = Array . from ( form . elements ) . reduce ( ( acc , input ) => {
104+ const { inputsUnused, onlyHiddenInputs} = acc
105+ const key = input . name
106+ if ( ! key ) { return acc }
107+
108+ if ( inputsUnused [ key ] === undefined ) { inputsUnused [ key ] = true }
109+ if ( onlyHiddenInputs [ key ] === undefined ) { onlyHiddenInputs [ key ] = true }
110+
111+ const isUsed = DOM . private ( input , PHX_HAS_FOCUSED ) || DOM . private ( input , PHX_HAS_SUBMITTED )
112+ const isHidden = input . type === "hidden"
113+ inputsUnused [ key ] = inputsUnused [ key ] && ! isUsed
114+ onlyHiddenInputs [ key ] = onlyHiddenInputs [ key ] && isHidden
115+
116+ return acc
117+ } , { inputsUnused : { } , onlyHiddenInputs : { } } )
118+
104119 for ( let [ key , val ] of formData . entries ( ) ) {
105120 if ( onlyNames . length === 0 || onlyNames . indexOf ( key ) >= 0 ) {
106- let inputs = elements . filter ( input => input . name === key )
107- let isUnused = ! inputs . some ( input => ( DOM . private ( input , PHX_HAS_FOCUSED ) || DOM . private ( input , PHX_HAS_SUBMITTED ) ) )
108- let hidden = inputs . every ( input => input . type === "hidden" )
121+ let isUnused = inputsUnused [ key ]
122+ let hidden = onlyHiddenInputs [ key ]
109123 if ( isUnused && ! ( submitter && submitter . name == key ) && ! hidden ) {
110124 params . append ( prependFormDataKey ( key , "_unused_" ) , "" )
111125 }
0 commit comments