diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..94d7e2f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,35 @@ +{ + "name": "BMI-Web-App", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + } + } +} diff --git a/src/tables/tables.js b/src/tables/tables.js index 2eab32d..254d0a8 100644 --- a/src/tables/tables.js +++ b/src/tables/tables.js @@ -9,13 +9,9 @@ } window.__tablesLoaded = true; + const STORAGE_KEY = "bmiData"; let bmiList = []; - function resolveUrl(relativeToThisScript) { - const base = document.currentScript?.src || window.location.href; - return new URL(relativeToThisScript, base).toString(); - } - function calculateBMI(weight, height) { const w = Number(weight); const hCm = Number(height); @@ -35,6 +31,19 @@ return "Adipositas"; } + function loadFromStorage() { + const data = localStorage.getItem(STORAGE_KEY); + try { + return data ? JSON.parse(data) : []; + } catch { + return []; + } + } + + function saveToStorage() { + localStorage.setItem(STORAGE_KEY, JSON.stringify(bmiList)); + } + function buildTable(filterSelect, sortSelect, tableBody) { let list = [...bmiList]; const now = new Date(); @@ -89,6 +98,7 @@ tr.querySelector("button")?.addEventListener("click", () => { bmiList.splice(index, 1); + saveToStorage(); // neu speichern buildTable(filterSelect, sortSelect, tableBody); }); @@ -124,15 +134,11 @@ // Prefer stable root path if you serve /src as web root: // fetch("/data/mock.json") // Otherwise keep script-relative: - const jsonUrl = resolveUrl("../data/mock.json"); + // const jsonUrl = resolveUrl("../data/mock.json"); - fetch(jsonUrl, { cache: "no-store" }) - .then((res) => res.json()) - .then((data) => { - bmiList = data?.tables?.bmiEntries || []; - buildTable(filterSelect, sortSelect, tableBody); - }) - .catch((err) => console.error("Fehler beim Laden der JSON:", err)); + // Daten jetzt aus LocalStorage laden statt aus mock.json + bmiList = loadFromStorage(); + buildTable(filterSelect, sortSelect, tableBody); } // Export global, so the router can call it after injecting the view @@ -144,4 +150,4 @@ } else { tablesInit(); } -})(); +})(); \ No newline at end of file