app.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import draftData from "../data/draft_okr_bad.json";
  2. import {Elm} from '../src/Main.elm';
  3. function getSetData(db, setCode, callback) {
  4. const transaction = db.transaction(["sets"], "readwrite");
  5. const objectStore = transaction.objectStore("sets");
  6. const request = objectStore.get(setCode);
  7. request.onerror = (event) => {
  8. alert("Database error")
  9. };
  10. request.onsuccess = (event) => {
  11. if (request.result === undefined) {
  12. callback({code: setCode, data: null});
  13. } else {
  14. callback({code: setCode, data: request.result.data});
  15. }
  16. };
  17. }
  18. function saveSetData(db, setData) {
  19. const transaction = db.transaction(["sets"], "readwrite");
  20. const objectStore = transaction.objectStore("sets");
  21. const request = objectStore.add(setData);
  22. request.onerror = (event) => {
  23. alert("Database error")
  24. };
  25. }
  26. function getAllLocalSets(db, callback) {
  27. const transaction = db.transaction(["sets"], "readwrite");
  28. const objectStore = transaction.objectStore("sets");
  29. objectStore.getAll().onsuccess = (event) => {
  30. callback(event.target.result.map((set) => set.code));
  31. };
  32. }
  33. const openDBRequest = indexedDB.open("set_database", 2);
  34. openDBRequest.onerror = (event) => {
  35. alert("Could not open browser database");
  36. };
  37. openDBRequest.onupgradeneeded = (event) => {
  38. console.log("Upgrading")
  39. const database = event.target.result;
  40. const objectStore = database.createObjectStore("sets", {keyPath: "code"});
  41. }
  42. openDBRequest.onsuccess = (event) => {
  43. const database = event.target.result;
  44. getAllLocalSets(database, (sets) => {
  45. const app = Elm.Main.init({
  46. node: document.getElementById('myapp'),
  47. flags: {
  48. sets: sets,
  49. draftData: JSON.stringify(draftData),
  50. }
  51. });
  52. app.ports.sendDoesSetHaveLocalData.subscribe((setCode) => {
  53. getSetData(database, setCode, (data) => {
  54. app.ports.receiveDoesSetHaveLocalData.send(JSON.stringify(data));
  55. })
  56. });
  57. app.ports.sendSaveLocalData.subscribe((setData) => {
  58. saveSetData(database, setData);
  59. })
  60. })
  61. };