app.js 2.3 KB

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