@@ -204,6 +204,7 @@ const setupEventHandlers = (triggerElement) => {
204
204
205
205
/**
206
206
* Attaches hyperwave event handlers to all elements within a given root element.
207
+ * Ensures any form submissions with hyperwave'd elements are intercepted.
207
208
* @param {HTMLElement } rootElement - The root element to search for trigger elements.
208
209
*/
209
210
const attachHyperwaveHandlers = ( rootElement ) => {
@@ -229,4 +230,26 @@ document.addEventListener("DOMContentLoaded", () => {
229
230
} ) ;
230
231
231
232
observer . observe ( document . body , { childList : true , subtree : true } ) ;
233
+
234
+ const forms = document . querySelectorAll ( "form[href]" ) ;
235
+ forms . forEach ( ( form ) => {
236
+ form . addEventListener ( "submit" , ( event ) => {
237
+ event . preventDefault ( ) ;
238
+ log ( "log" , "Form submission intercepted" , form ) ;
239
+
240
+ const fetchOptions = {
241
+ method : form . getAttribute ( "method" ) || hyperwaveConfig . defaultMethod ,
242
+ headers : { "Content-Type" : "application/x-www-form-urlencoded" } ,
243
+ body : new URLSearchParams ( new FormData ( form ) ) . toString ( ) ,
244
+ } ;
245
+
246
+ const url = new URL ( form . getAttribute ( "href" ) , window . location . origin ) ;
247
+ fetchContent ( url . toString ( ) , fetchOptions ) . then ( ( content ) => {
248
+ const target = document . querySelector (
249
+ form . getAttribute ( "target" ) || "#trip-details" ,
250
+ ) ;
251
+ updateTargetElement ( target , content , "replace" ) ;
252
+ } ) ;
253
+ } ) ;
254
+ } ) ;
232
255
} ) ;
0 commit comments