app.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import draftData from "../data/drafts/draft_tdm_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 deleteSetData(db, setCode, callback) {
  19. const transaction = db.transaction(["sets"], "readwrite");
  20. const objectStore = transaction.objectStore("sets");
  21. const request = objectStore.delete(setCode);
  22. request.onerror = (event) => {
  23. alert("Database error")
  24. };
  25. request.onsuccess = (event) => {
  26. callback(setCode)
  27. }
  28. }
  29. function saveSetData(db, setData) {
  30. const transaction = db.transaction(["sets"], "readwrite");
  31. const objectStore = transaction.objectStore("sets");
  32. const request = objectStore.add(setData);
  33. request.onerror = (event) => {
  34. alert("Database error")
  35. };
  36. }
  37. function getAllLocalSets(db, callback) {
  38. const transaction = db.transaction(["sets"], "readwrite");
  39. const objectStore = transaction.objectStore("sets");
  40. objectStore.getAll().onsuccess = (event) => {
  41. callback(event.target.result.map((set) => set.code));
  42. };
  43. }
  44. function getSavedEventHistoryUrl() {
  45. return localStorage.getItem("eventHistoryURL");
  46. }
  47. function putSavedEventHistoryUrl(url) {
  48. return localStorage.getItem("eventHistoryURL", url);
  49. }
  50. const openDBRequest = indexedDB.open("set_database", 2);
  51. openDBRequest.onerror = (event) => {
  52. alert("Could not open browser database");
  53. };
  54. openDBRequest.onupgradeneeded = (event) => {
  55. console.log("Upgrading")
  56. const database = event.target.result;
  57. const objectStore = database.createObjectStore("sets", {keyPath: "code"});
  58. }
  59. openDBRequest.onsuccess = (event) => {
  60. const database = event.target.result;
  61. getAllLocalSets(database, (sets) => {
  62. const app = Elm.Main.init({
  63. node: document.getElementById('myapp'),
  64. flags: {
  65. sets: sets,
  66. draftData: JSON.stringify(draftData),
  67. eventHistoryUrl: getSavedEventHistoryUrl()
  68. }
  69. });
  70. app.ports.sendDoesSetHaveLocalData.subscribe((setCode) => {
  71. getSetData(database, setCode, (data) => {
  72. app.ports.receiveDoesSetHaveLocalData.send(JSON.stringify(data));
  73. })
  74. });
  75. app.ports.sendSaveLocalData.subscribe((setData) => {
  76. saveSetData(database, setData);
  77. });
  78. app.ports.sendDeleteLocalData.subscribe((setCode) => {
  79. deleteSetData(database, setCode, (setCode) => app.ports.receiveDidDeleteLocalData.send(setCode))
  80. });
  81. app.ports.sendSaveEventHistoryUrl.subscribe((url) => {
  82. putSavedEventHistoryUrl(url);
  83. });
  84. })
  85. };