Forráskód Böngészése

Move indexedDB init to avoid failing non-indexedDB envs

Having this at require time causes environments to fail that don't
have indexedDB defined. Node tests when running async tests
fail for this reason with the promise inside idbkv.js
Gabriel Horner 3 éve
szülő
commit
441a19fcb8
2 módosított fájl, 14 hozzáadás és 12 törlés
  1. 1 0
      src/main/frontend/handler.cljs
  2. 13 12
      src/main/frontend/idb.cljs

+ 1 - 0
src/main/frontend/handler.cljs

@@ -213,6 +213,7 @@
    (fn [_error]
      (notification/show! "Sorry, it seems that your browser doesn't support IndexedDB, we recommend to use latest Chrome(Chromium) or Firefox(Non-private mode)." :error false)
      (state/set-indexedb-support! false)))
+  (idb/start)
 
   (react/run-custom-queries-when-idle!)
 

+ 13 - 12
src/main/frontend/idb.cljs

@@ -1,10 +1,9 @@
 (ns frontend.idb
-  "System-component-like ns that provides indexedDB functionality"
+  "This system component provides indexedDB functionality"
   (:require ["/frontend/idbkv" :as idb-keyval :refer [Store]]
             [clojure.string :as string]
             [frontend.config :as config]
             [frontend.storage :as storage]
-            [frontend.util :as util]
             [goog.object :as gobj]
             [promesa.core :as p]))
 
@@ -14,15 +13,12 @@
 ;; To maintain backward compatibility
 
 
-;; store is unused and fails async tests so disable them in tests
-(if util/node-test?
-  (def store nil)
-  (defonce store (Store. "localforage" "keyvaluepairs" 2)))
+(def store (atom nil))
 
 (defn clear-idb!
   []
   (->
-   (p/let [_ (idb-keyval/clear store)
+   (p/let [_ (idb-keyval/clear @store)
            dbs (js/window.indexedDB.databases)]
      (doseq [db dbs]
        (js/window.indexedDB.deleteDatabase (gobj/get db "name"))))
@@ -36,26 +32,26 @@
 (defn remove-item!
   [key]
   (when key
-    (idb-keyval/del key store)))
+    (idb-keyval/del key @store)))
 
 (defn set-item!
   [key value]
   (when key
-    (idb-keyval/set key value store)))
+    (idb-keyval/set key value @store)))
 
 (defn set-batch!
   [items]
   (when (seq items)
-    (idb-keyval/setBatch (clj->js items) store)))
+    (idb-keyval/setBatch (clj->js items) @store)))
 
 (defn get-item
   [key]
   (when key
-    (idb-keyval/get key store)))
+    (idb-keyval/get key @store)))
 
 (defn get-keys
   []
-  (idb-keyval/keys store))
+  (idb-keyval/keys @store))
 
 (defn get-nfs-dbs
   []
@@ -71,3 +67,8 @@
       (when (seq ks)
         (p/all (map (fn [key]
                       (remove-item! key)) ks))))))
+
+(defn start
+  "This component's only responsibility is to create a Store object"
+  []
+  (reset! store (Store. "localforage" "keyvaluepairs" 2)))