import draftData from "../data/draft_okr_bad.json"; import {Elm} from '../src/Main.elm'; function getSetData(db, setCode, callback) { const transaction = db.transaction(["sets"], "readwrite"); const objectStore = transaction.objectStore("sets"); const request = objectStore.get(setCode); request.onerror = (event) => { alert("Database error") }; request.onsuccess = (event) => { if (request.result === undefined) { callback({code: setCode, data: null}); } else { callback({code: setCode, data: request.result.data}); } }; } function saveSetData(db, setData) { const transaction = db.transaction(["sets"], "readwrite"); const objectStore = transaction.objectStore("sets"); const request = objectStore.add(setData); request.onerror = (event) => { alert("Database error") }; } function getAllLocalSets(db, callback) { const transaction = db.transaction(["sets"], "readwrite"); const objectStore = transaction.objectStore("sets"); objectStore.getAll().onsuccess = (event) => { callback(event.target.result.map((set) => set.code)); }; } const openDBRequest = indexedDB.open("set_database", 2); openDBRequest.onerror = (event) => { alert("Could not open browser database"); }; openDBRequest.onupgradeneeded = (event) => { console.log("Upgrading") const database = event.target.result; const objectStore = database.createObjectStore("sets", {keyPath: "code"}); } openDBRequest.onsuccess = (event) => { const database = event.target.result; getAllLocalSets(database, (sets) => { const app = Elm.Main.init({ node: document.getElementById('myapp'), flags: { sets: sets, draftData: JSON.stringify(draftData), } }); app.ports.sendDoesSetHaveLocalData.subscribe((setCode) => { getSetData(database, setCode, (data) => { app.ports.receiveDoesSetHaveLocalData.send(JSON.stringify(data)); }) }); app.ports.sendSaveLocalData.subscribe((setData) => { saveSetData(database, setData); }) }) };