浏览代码

fix: block ref numbers not updated unless re-indexed

Close #1673

Also, fixed an issue that update the block in references doesn't work
Tienson Qin 4 年之前
父节点
当前提交
e94a09beff
共有 3 个文件被更改,包括 18 次插入15 次删除
  1. 2 1
      src/main/frontend/components/block.cljs
  2. 12 11
      src/main/frontend/db/model.cljs
  3. 4 3
      src/main/frontend/db/react.cljs

+ 2 - 1
src/main/frontend/components/block.cljs

@@ -2275,7 +2275,8 @@
    (cond-> option
      (:document/mode? config)
      (assoc :class "doc-mode"))
-   (if (:group-by-page? config)
+   (if (and (:group-by-page? config)
+            (vector? (first blocks)))
      [:div.flex.flex-col
       (let [blocks (sort-by (comp :block/journal-day first) > blocks)]
         (for [[page blocks] blocks]

+ 12 - 11
src/main/frontend/db/model.cljs

@@ -1035,17 +1035,18 @@
   [block-uuid]
   (when-let [repo (state/get-current-repo)]
     (when (conn/get-conn repo)
-      (->> (react/q repo [:block/refed-blocks block-uuid] {}
-                    '[:find (pull ?ref-block [*])
-                      :in $ ?block-uuid
-                      :where
-                      [?block :block/uuid ?block-uuid]
-                      [?ref-block :block/refs ?block]]
-                    block-uuid)
-           react
-           db-utils/seq-flatten
-           sort-blocks
-           db-utils/group-by-page))))
+      (let [block (db-utils/entity [:block/uuid block-uuid])]
+        (->> (react/q repo [:block/refed-blocks (:db/id block)] {}
+              '[:find (pull ?ref-block [*])
+                :in $ ?block-uuid
+                :where
+                [?block :block/uuid ?block-uuid]
+                [?ref-block :block/refs ?block]]
+              block-uuid)
+            react
+            db-utils/seq-flatten
+            sort-blocks
+            db-utils/group-by-page)))))
 
 (defn get-matched-blocks
   [match-fn limit]

+ 4 - 3
src/main/frontend/db/react.cljs

@@ -235,9 +235,10 @@
 
                              (apply concat
                                     (for [{:block/keys [refs]} blocks]
-                                      (map (fn [page]
-                                             (when-let [page (db-utils/entity [:block/name (:block/name page)])]
-                                               [:block/refed-blocks (:db/id page)]))
+                                      (mapcat (fn [ref]
+                                                (when-let [block (db-utils/entity ref)]
+                                                  [[:page/blocks (:db/id (:block/page block))]
+                                                   [:block/refed-blocks (:db/id block)]]))
                                         refs))))
                             (distinct))
               refed-pages (map