Browse Source

fix: linked references should contain the blocks from alias pages

Tienson Qin 5 years ago
parent
commit
f1ffc6d022
1 changed files with 26 additions and 10 deletions
  1. 26 10
      src/main/frontend/db/model.cljs

+ 26 - 10
src/main/frontend/db/model.cljs

@@ -861,19 +861,35 @@
    (when repo
      (when (conn/get-conn repo)
        (let [page-id (:db/id (db-utils/entity [:page/name page]))
-             pages (page-alias-set repo page)]
-         (->> (react/q repo [:page/refed-blocks page-id] {}
-                       '[:find (pull ?block [*])
-                         :in $ ?pages
-                         :where
-                         [?block :block/ref-pages ?ref-page]
-                         [(contains? ?pages ?ref-page)]]
-                       pages)
+             pages (page-alias-set repo page)
+             aliases (set/difference pages #{page-id})
+             query-result (if (seq aliases)
+                            (let [rules '[[(find-blocks ?block ?ref-page ?pages ?alias ?aliases)
+                                           [?block :block/page ?alias]
+                                           [(contains? ?aliases ?alias)]]
+                                          [(find-blocks ?block ?ref-page ?pages ?alias ?aliases)
+                                           [?block :block/ref-pages ?ref-page]
+                                           [(contains? ?pages ?ref-page)]]]]
+                              (react/q repo [:page/refed-blocks page-id] {}
+                                       '[:find (pull ?block [*])
+                                         :in $ % ?pages ?aliases
+                                         :where
+                                         (find-blocks ?block ?ref-page ?pages ?alias ?aliases)]
+                                       rules
+                                       pages
+                                       aliases))
+                            (react/q repo [:page/refed-blocks page-id] {}
+                                     '[:find (pull ?block [*])
+                                       :in $ ?pages
+                                       :where
+                                       [?block :block/ref-pages ?ref-page]
+                                       [(contains? ?pages ?ref-page)]]
+                                     pages))]
+         (->> query-result
               react
               db-utils/seq-flatten
               (remove (fn [block]
-                        (let [exclude-pages pages]
-                          (contains? exclude-pages (:db/id (:block/page block))))))
+                        (= page-id (:db/id (:block/page block)))))
               sort-blocks
               db-utils/group-by-page))))))