app.js 2.6 KB

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