Browse Source

Load whole data for shorter pages

Tienson Qin 1 year ago
parent
commit
fa9d5fac1e

+ 26 - 13
deps/db/src/logseq/db/sqlite/common_db.cljs

@@ -55,30 +55,43 @@
     :else
     :else
     block))
     block))
 
 
+(defn- mark-block-fully-loaded
+  [b]
+  (assoc b :block.temp/fully-loaded? true))
+
 (defn get-block-and-children
 (defn get-block-and-children
   [db name children?]
   [db name children?]
-  (let [get-children (fn [col]
-                       (map (fn [e]
-                              (select-keys e [:db/id :block/uuid :block/page :block/left :block/parent :block/collapsed?]))
-                            col))
-        uuid? (common-util/uuid-string? name)
+  (let [uuid? (common-util/uuid-string? name)
         block (when uuid?
         block (when uuid?
                 (let [id (uuid name)]
                 (let [id (uuid name)]
-                  (d/entity db [:block/uuid id])))]
+                  (d/entity db [:block/uuid id])))
+        get-children (fn [children]
+                       (let [long-page? (> (count children) 500)]
+                         (if long-page?
+                           (map (fn [e]
+                                  (select-keys e [:db/id :block/uuid :block/page :block/left :block/parent :block/collapsed?]))
+                                children)
+                           (->> (d/pull-many db '[*] (map :db/id children))
+                                (map #(with-block-refs db %))
+                                (map mark-block-fully-loaded)))))]
     (if (and block (not (:block/name block))) ; not a page
     (if (and block (not (:block/name block))) ; not a page
       (let [block' (->> (d/pull db '[*] (:db/id block))
       (let [block' (->> (d/pull db '[*] (:db/id block))
-                        (with-parent-and-left db))]
+                        (with-parent-and-left db)
+                        mark-block-fully-loaded)]
         (cond->
         (cond->
          {:block block'}
          {:block block'}
           children?
           children?
           (assoc :children (get-children (:block/_parent block)))))
           (assoc :children (get-children (:block/_parent block)))))
       (when-let [block (or block (d/entity db [:block/name name]))]
       (when-let [block (or block (d/entity db [:block/name name]))]
         (cond->
         (cond->
-         {:block (d/pull db '[*] (:db/id block))}
+         {:block (-> (d/pull db '[*] (:db/id block))
+                     mark-block-fully-loaded)}
           children?
           children?
           (assoc :children
           (assoc :children
                  (if (contains? (:block/type block) "whiteboard")
                  (if (contains? (:block/type block) "whiteboard")
-                   (d/pull-many db '[*] (map :db/id (:block/_page block)))
+                   (->> (d/pull-many db '[*] (map :db/id (:block/_page block)))
+                        (map #(with-block-refs db %))
+                        (map mark-block-fully-loaded))
                    (get-children (:block/_page block)))))))))
                    (get-children (:block/_page block)))))))))
 
 
 (defn get-latest-journals
 (defn get-latest-journals
@@ -100,11 +113,11 @@
      (reverse)
      (reverse)
      (take n))))
      (take n))))
 
 
-(defn get-closed-values
+(defn get-structured-blocks
   [db]
   [db]
   (->> (d/datoms db :avet :block/type)
   (->> (d/datoms db :avet :block/type)
        (keep (fn [e]
        (keep (fn [e]
-               (when (= (:v e) "closed value")
+               (when (contains? #{"closed value" "property" "class"} (:v e))
                  (d/pull db '[*] (:e e)))))))
                  (d/pull db '[*] (:e e)))))))
 
 
 ;; built-in files + latest journals + favorites
 ;; built-in files + latest journals + favorites
@@ -113,8 +126,8 @@
   [db]
   [db]
   (let [latest-journals (get-latest-journals db 3)
   (let [latest-journals (get-latest-journals db 3)
         all-files (get-all-files db)
         all-files (get-all-files db)
-        closed-values (get-closed-values db)]
-    (concat latest-journals all-files closed-values)))
+        structured-blocks (get-structured-blocks db)]
+    (concat latest-journals all-files structured-blocks)))
 
 
 (defn restore-initial-data
 (defn restore-initial-data
   "Given initial sqlite data and schema, returns a datascript connection"
   "Given initial sqlite data and schema, returns a datascript connection"

+ 1 - 6
src/main/frontend/components/container.cljs

@@ -576,14 +576,9 @@
          (widgets/demo-graph-alert))
          (widgets/demo-graph-alert))
 
 
        (cond
        (cond
-         (not indexeddb-support?)
+         (or db-restoring? (not indexeddb-support?))
          nil
          nil
 
 
-         db-restoring?
-         [:div.mt-20
-          [:div.ls-center
-           (ui/loading)]]
-
          :else
          :else
          [:div
          [:div
           {:class (if (or onboarding-and-home? margin-less-pages?) "" (util/hiccup->class "mx-auto.pb-24"))
           {:class (if (or onboarding-and-home? margin-less-pages?) "" (util/hiccup->class "mx-auto.pb-24"))

+ 1 - 1
src/main/frontend/db/async.cljs

@@ -136,7 +136,7 @@
         (p/let [result (.get-block-and-children sqlite graph name' children?)
         (p/let [result (.get-block-and-children sqlite graph name' children?)
                 {:keys [block children] :as result'} (edn/read-string result)
                 {:keys [block children] :as result'} (edn/read-string result)
                 conn (db/get-db graph false)
                 conn (db/get-db graph false)
-                block-and-children (cons (assoc block :block.temp/fully-loaded? true) children)
+                block-and-children (cons block children)
                 _ (d/transact! conn block-and-children)]
                 _ (d/transact! conn block-and-children)]
           (state/update-state! :db/async-queries (fn [s] (disj s name')))
           (state/update-state! :db/async-queries (fn [s] (disj s name')))
           (react/refresh-affected-queries!
           (react/refresh-affected-queries!