dmx-interface/data/submit.js
2024-12-20 20:02:11 +01:00

74 lines
1.8 KiB
JavaScript

import { loadData, writeDataToInput } from "./load-data.js";
import {
showLoadingScreen,
hideLoadingScreen,
showError,
} from "./loading-screen.js";
const form = document.querySelector("form.config");
function parseValue(input) {
if (input.type === "checkbox") {
return input.checked
? input.dataset.valueChecked
: input.dataset.valueNotChecked;
}
if (input.value === "") {
return null;
}
if (input.type === "number" || input.type === "range") {
const number = Number(input.value);
return Number.isNaN(number) ? null : number;
}
return input.value;
}
form.addEventListener("submit", (event) => {
event.preventDefault();
const inputFields = document.querySelectorAll(
"form :is(input, select, textarea):not(:disabled)"
);
const data = Array.from(inputFields).reduce((data, input) => {
data[input.name] = parseValue(input);
return data;
}, {});
console.log(data);
updateConfig({
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
});
export async function updateConfig(fetchOptions) {
showLoadingScreen("Konfiguration anwenden und ESP neustarten...");
try {
const res = await fetch("/config", fetchOptions);
if (!res.ok) {
throw new Error(`Response status: ${res.status}`);
}
} catch (error) {
console.error(error.message);
showError(error.message);
}
for (let i = 0; i < 10; i++) {
try {
const data = await loadData(5000);
writeDataToInput(data);
hideLoadingScreen();
break;
} catch (error) {
// retry loading config until successful
}
}
}