diff --git a/public/js/main.js b/public/js/main.js index 6fa8978..43dd061 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -33,7 +33,9 @@ document.getElementById('csvFileInput').addEventListener('change', async (e) => { const file = e.target.files[0]; if (!file) return; - A.state.orders = await I.loadOrdersFromUpload(file); + const { text, orders } = await I.loadOrdersFromUpload(file); + await I.saveOrdersCsv(text); + A.state.orders = orders; A.renderOverviewScreen(openOrder); e.target.value = ''; }); @@ -91,7 +93,8 @@ async function init() { await I.openDB(); - A.state.orders = D.parseCSV(I.SEED_ORDERS_CSV); + const stored = await I.loadOrdersCsv(); + A.state.orders = D.parseCSV(stored ? stored.csv : I.SEED_ORDERS_CSV); A.state.orderStatuses = await I.loadAllOrderStatuses(); wireOverviewToolbar(); diff --git a/src/Infrastructure/csvLoader.js b/src/Infrastructure/csvLoader.js index e9f4970..e4ad421 100644 --- a/src/Infrastructure/csvLoader.js +++ b/src/Infrastructure/csvLoader.js @@ -1,6 +1,6 @@ (function (I, D) { I.loadOrdersFromUpload = async function (file) { const text = await file.text(); - return D.parseCSV(text); + return { text, orders: D.parseCSV(text) }; }; })(window.App.Infrastructure, window.App.Domain); diff --git a/src/Infrastructure/db.js b/src/Infrastructure/db.js index 6408a23..561e156 100644 --- a/src/Infrastructure/db.js +++ b/src/Infrastructure/db.js @@ -1,6 +1,6 @@ (function (I) { const DB_NAME = 'DuimstokInspecties'; - const DB_VERSION = 3; + const DB_VERSION = 4; let db = null; I.openDB = function () { @@ -12,6 +12,8 @@ d.createObjectStore('inspections', { keyPath: 'orderNr' }); if (!d.objectStoreNames.contains('orderStatuses')) d.createObjectStore('orderStatuses', { keyPath: 'orderKey' }); + if (!d.objectStoreNames.contains('ordersCsv')) + d.createObjectStore('ordersCsv', { keyPath: 'id' }); }; req.onsuccess = (e) => { db = e.target.result; resolve(db); }; req.onerror = (e) => reject(e); @@ -53,6 +55,26 @@ }); }; + I.saveOrdersCsv = async function (csvText) { + const d = await ensureDb(); + return new Promise((resolve, reject) => { + const tx = d.transaction('ordersCsv', 'readwrite'); + tx.objectStore('ordersCsv').put({ id: 'current', csv: csvText, uploadedAt: new Date().toISOString() }); + tx.oncomplete = resolve; + tx.onerror = reject; + }); + }; + + I.loadOrdersCsv = async function () { + const d = await ensureDb(); + return new Promise((resolve, reject) => { + const tx = d.transaction('ordersCsv', 'readonly'); + const req = tx.objectStore('ordersCsv').get('current'); + req.onsuccess = () => resolve(req.result || null); + req.onerror = reject; + }); + }; + I.loadAllOrderStatuses = async function () { const d = await ensureDb(); return new Promise((resolve, reject) => {