Merge pull request #7 from HendrikRauh/DMX-18-reset-config

Dmx 18 reset config
This commit is contained in:
Hendrik Rauh 2024-11-04 21:14:14 +01:00 committed by GitHub
commit 8b47daceb4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 59 additions and 4 deletions

View file

@ -8,6 +8,7 @@
<script type="module" src="/input-visibility.js" defer></script>
<script type="module" src="/load-data.js" defer></script>
<script type="module" src="/submit.js" defer></script>
<script type="module" src="/reset.js" defer></script>
</head>
<body>
<main>
@ -152,7 +153,10 @@
/>
</label>
</fieldset>
<div class="buttons">
<button type="reset">Zurücksetzen</button>
<button type="submit">Speichern</button>
</div>
</form>
</main>
</body>

View file

@ -18,7 +18,7 @@ async function loadData() {
}
}
function writeDataToInput(data) {
export function writeDataToInput(data) {
console.log("write data", typeof data);
for (const [key, value] of Object.entries(data)) {
const element = document.querySelector(`[name=${key}]`);

30
data/reset.js Normal file
View file

@ -0,0 +1,30 @@
import { writeDataToInput } from "/load-data.js";
const form = document.querySelector("form");
form.addEventListener("reset", async (event) => {
event.preventDefault();
const ok = confirm(
"Sicher, dass du alle Einstellungen zurücksetzen möchtest?"
);
if (ok) {
reset();
}
});
async function reset() {
try {
const res = await fetch("/config", {
method: "DELETE",
});
if (!res.ok) {
throw new Error(`Response status: ${res.status}`);
}
const json = await res.json();
writeDataToInput(json);
} catch (error) {
console.error(error.message);
}
}

View file

@ -1,6 +1,7 @@
:root {
--color-primary: #087e8b;
--color-on-primary: white;
--color-danger: #fa2b58;
}
body {
@ -59,14 +60,16 @@ select:focus {
}
button {
display: block;
border: none;
inset: none;
border-radius: 8px;
background-color: var(--color-primary);
color: var(--color-on-primary);
padding: 8px 16px;
margin: 0 auto;
}
button[type="reset"] {
background-color: var(--color-danger);
}
:is(div:has(:is(input, select)), input, select, label)
@ -126,3 +129,10 @@ label.switch input:checked + .slider::before {
left: 100%;
translate: -100% -50%;
}
.buttons {
display: flex;
flex-direction: row;
justify-content: center;
gap: 8px;
}

View file

@ -84,10 +84,21 @@ void setup()
server.on("/config", HTTP_GET, [](AsyncWebServerRequest *request)
{ onGetConfig(request); });
server.on("/config", HTTP_DELETE, [](AsyncWebServerRequest *request)
{
config.begin("dmx", false);
config.clear();
config.end();
// respond with default config
onGetConfig(config, request);
ESP.restart(); });
server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
if (request->url() == "/config" && request->method() == HTTP_PUT) {
onPutConfig(request, data, len, index, total);
ESP.restart();
} });
delay(1000);