浏览代码

fix: filters not working for children blocks in linked references

related to #6457

fix #6462
fix #6458
Tienson Qin 3 年之前
父节点
当前提交
1ee294e047

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

@@ -2423,7 +2423,8 @@
         *navigating-block (get state ::navigating-block)
         navigating-block (rum/react *navigating-block)
         navigated? (and (not= (:block/uuid block) navigating-block) navigating-block)
-        block (if navigated?
+        block (if (or (and custom-query? (empty? (:block/children block)))
+                      navigated?)
                 (let [block (db/pull [:block/uuid navigating-block])
                       blocks (db/get-paginated-blocks repo (:db/id block)
                                                       {:scoped-block-id (:db/id block)})

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

@@ -200,7 +200,8 @@
           filters (when (seq filter-state)
                     (-> (group-by second filter-state)
                         (update-vals #(map first %))))
-          filtered-ref-blocks (block-handler/filter-blocks ref-blocks filters)
+          filtered-ref-blocks (->> (block-handler/filter-blocks ref-blocks filters)
+                                   (block-handler/get-filtered-ref-blocks-with-parents ref-blocks))
           total (count top-level-blocks)
           filtered-top-blocks (filter (fn [b] (top-level-blocks-ids (:db/id b))) filtered-ref-blocks)
           filter-n (count filtered-top-blocks)

+ 19 - 4
src/main/frontend/handler/block.cljs

@@ -249,14 +249,17 @@
 
 (defn get-blocks-refed-pages
   [aliases ref-blocks]
-  (let [refs (->> (mapcat (fn [b] (conj (:block/path-refs b) (:block/page b))) ref-blocks)
-                  distinct
-                  (remove #(aliases (:db/id %))))]
+  (let [refs (->> (mapcat :block/refs ref-blocks)
+                  (remove #(aliases (:db/id %))))
+        pages (->> (map :block/page ref-blocks)
+                   (distinct)
+                   (remove #(aliases (:db/id %))))
+        all-refs (concat pages refs)]
     (keep (fn [ref]
             (when (:block/name ref)
               {:db/id (:db/id ref)
                :block/name (:block/name ref)
-               :block/original-name (:block/original-name ref)})) refs)))
+               :block/original-name (:block/original-name ref)})) all-refs)))
 
 (defn filter-blocks
   [ref-blocks filters]
@@ -276,3 +279,15 @@
         (filter (fn [block]
                   (let [ids (set (map :db/id (:block/path-refs block)))]
                     (set/subset? include-ids ids))))))))
+
+(defn get-filtered-ref-blocks-with-parents
+  [all-ref-blocks filtered-ref-blocks]
+  (when (seq filtered-ref-blocks)
+    (let [id->block (zipmap (map :db/id all-ref-blocks) all-ref-blocks)
+          get-parents (fn [block]
+                        (loop [block block
+                               result [block]]
+                          (if-let [parent (id->block (:db/id (:block/parent block)))]
+                            (recur parent (conj result parent))
+                            result)))]
+      (distinct (mapcat get-parents filtered-ref-blocks)))))

+ 6 - 6
templates/config.edn

@@ -141,12 +141,12 @@
  :default-queries
  {:journals
   [{:title "🔨 NOW"
-    :query [:find (pull ?h [*])
+    :query [:find (pull ?b [*])
             :in $ ?start ?today
             :where
-            [?h :block/marker ?marker]
+            [?b :block/marker ?marker]
             [(contains? #{"NOW" "DOING"} ?marker)]
-            [?h :block/page ?p]
+            [?b :block/page ?p]
             [?p :block/journal? true]
             [?p :block/journal-day ?d]
             [(>= ?d ?start)]
@@ -157,12 +157,12 @@
                                    (get h :block/priority "Z")) result))
     :collapsed? false}
    {:title "📅 NEXT"
-    :query [:find (pull ?h [*])
+    :query [:find (pull ?b [*])
             :in $ ?start ?next
             :where
-            [?h :block/marker ?marker]
+            [?b :block/marker ?marker]
             [(contains? #{"NOW" "LATER" "TODO"} ?marker)]
-            [?h :block/ref-pages ?p]
+            [?b :block/page ?p]
             [?p :block/journal? true]
             [?p :block/journal-day ?d]
             [(> ?d ?start)]