1(function (combo) { 2 'use strict'; 3 4 let componentName = "subscribe"; 5 const subscribeComponentSelector = `.${componentName}-cs`; 6 const forms = document.querySelectorAll(`${subscribeComponentSelector} form`); 7 Array.from(forms).forEach(form => { 8 form.addEventListener('submit', async (event) => { 9 event.preventDefault(); 10 event.stopPropagation(); 11 if (form.checkValidity()) { 12 let url = new URL(form.getAttribute("action")); 13 let formData = new FormData(form); 14 let response = await fetch(url, { 15 body: formData, 16 method: "post", 17 }); 18 /** 19 * Modal 20 */ 21 let idResultModal = combo.Html.createRandomIdWithPrefix(componentName); 22 let modal = combo.Modal.getOrCreate(idResultModal); 23 const button = event.target; 24 let componentElement = button.closest(subscribeComponentSelector); 25 modal.setPlacementBottomToElement(componentElement); 26 let message; 27 try { 28 let data = await response.json(); 29 message = data.message; 30 } 31 catch (e) { 32 // in case of network error 33 } 34 if (response.status !== 200) { 35 modal.setHeader("Error"); 36 if (typeof message === 'undefined') { 37 message = "Sorry. The server seems to be down."; 38 } 39 } 40 else { 41 let header = form.getAttribute("data-success-header"); 42 if (header === null) { 43 header = "Hurray!"; 44 } 45 modal.setHeader(header); 46 message = form.getAttribute("data-success-content"); 47 if (message === null) { 48 message = "A validation email has been send. <br>Check your mailbox and click on the validation link.<br>If you don't find our email, check your spambox."; 49 } 50 } 51 modal 52 .addBody(message) 53 .show(); 54 } 55 }, false); 56 }); 57 58})(combo); 59