abiball/assets/controllers/form_controller.js

55 lines
1.3 KiB
JavaScript
Raw Normal View History

2025-01-29 16:44:20 +01:00
import {Controller} from "@hotwired/stimulus";
export default class extends Controller {
2025-01-29 19:06:48 +01:00
addEntry(event) {
event.preventDefault();
2025-01-29 16:44:20 +01:00
2025-01-29 19:06:48 +01:00
const formClone = this.element.querySelector('form').cloneNode(true);
formClone.querySelectorAll("select").forEach(input => {
input.value = "1";
});
formClone.querySelector('input').value = '';
this.element.querySelector('.forms').appendChild(formClone);
2025-01-29 16:44:20 +01:00
}
2025-01-29 19:06:48 +01:00
removeEntry(event) {
event.preventDefault();
2025-01-29 16:44:20 +01:00
2025-01-29 19:06:48 +01:00
if (document.querySelector('.forms').childElementCount === 1) {
return;
2025-01-29 16:44:20 +01:00
}
2025-01-29 19:06:48 +01:00
event.target.closest('form').remove();
2025-01-29 16:44:20 +01:00
}
2025-01-29 19:06:48 +01:00
submit(event) {
event.preventDefault();
const forms = document.querySelectorAll('form');
const formData = this.getFormData(forms);
fetch('/ticket/submit', {
method: 'POST',
body: JSON.stringify(formData),
headers: {
'Content-Type': 'application/json'
}
}).then(response => {
if (!response.ok) {
alert('An error occurred');
}
});
2025-01-29 16:44:20 +01:00
}
2025-01-29 19:06:48 +01:00
getFormData(forms) {
const formData = [];
forms.forEach(form => {
formData.push(Object.fromEntries(new FormData(form).entries()));
})
return formData;
2025-01-29 16:44:20 +01:00
}
}