49 lines
1.7 KiB
JavaScript
49 lines
1.7 KiB
JavaScript
const form = document.getElementById("reviewForm");
|
|
const status = document.getElementById("formStatus");
|
|
const button = form.querySelector('button[type="submit"]');
|
|
|
|
form.addEventListener("submit", async (event) => {
|
|
event.preventDefault();
|
|
if (button.disabled) return;
|
|
const input = {
|
|
email: form.elements.email.value.trim(),
|
|
title: form.elements.title.value.trim(),
|
|
review: form.elements.review.value.trim(),
|
|
rating: Number(form.elements.rating.value),
|
|
consent: form.elements.consent.checked,
|
|
};
|
|
for (const [field, max, label] of [
|
|
["title", 50, "Titel"],
|
|
["review", 500, "Bewertungstext"],
|
|
]) {
|
|
if (input[field].length < 10 || input[field].length > max) {
|
|
status.textContent = `${label}: Bitte 10 bis ${max} Zeichen eingeben.`;
|
|
form.elements[field].focus();
|
|
return;
|
|
}
|
|
}
|
|
button.disabled = true;
|
|
status.textContent = "Buchung wird geprüft und Bewertung gespeichert …";
|
|
try {
|
|
const response = await fetch("/api/reviews", {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify(input),
|
|
});
|
|
const result = await response.json();
|
|
if (!response.ok) {
|
|
status.textContent =
|
|
result.error?.message ||
|
|
"Die Bewertung konnte nicht gespeichert werden.";
|
|
return;
|
|
}
|
|
status.textContent = "Danke! Deine Bewertung wurde gespeichert.";
|
|
form.reset();
|
|
} catch {
|
|
status.textContent =
|
|
"Keine Bestätigung vom Server erhalten. Bitte versuche es später erneut.";
|
|
} finally {
|
|
button.disabled = false;
|
|
}
|
|
});
|