From b0a6700ab9500dad8c5d8ccd9f9d582d0a8a8202 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 5 Jan 2021 19:10:59 +0800 Subject: [PATCH] fix(editor): remove duplicate blocks in references Closes #1006, closes #846, closes #600 --- src/main/frontend/components/block.cljs | 6 +---- src/main/frontend/db/model.cljs | 32 ++++++++++++++++++------- src/main/frontend/db/utils.cljs | 8 +++---- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index d3654920a3..3f45473a64 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -1276,11 +1276,7 @@ (when (seq parents) (let [parents (for [{:block/keys [uuid content]} parents] - (let [title (->> (take 24 - (-> (string/split content #"\n") - first - (text/remove-level-spaces format))) - (apply str))] + (let [title (string/trim (text/remove-level-spaces content format))] (when (and (not (string/blank? title)) (not= (string/lower-case page-name) (string/lower-case title))) [:a {:href (rfe/href :page {:name uuid})} diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index 34f98b78b4..542df7ab24 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -840,6 +840,15 @@ db-utils/seq-flatten)] (mapv (fn [page] [page (get-page-alias repo page)]) mentioned-pages)))) +(defn- remove-children! + [blocks] + (let [childrens (->> (mapcat :block/children blocks) + (map :db/id) + (set))] + (if (seq childrens) + (remove (fn [block] (contains? childrens (:db/id block))) blocks) + blocks))) + (defn get-page-referenced-blocks ([page] (get-page-referenced-blocks (state/get-current-repo) page)) @@ -870,14 +879,17 @@ :where [?block :block/ref-pages ?ref-page] [(contains? ?pages ?ref-page)]] - pages))] - (->> query-result - react - db-utils/seq-flatten - (remove (fn [block] - (= page-id (:db/id (:block/page block))))) - sort-blocks - db-utils/group-by-page)))))) + pages)) + result (->> query-result + react + db-utils/seq-flatten + (remove (fn [block] + (= page-id (:db/id (:block/page block))))) + sort-blocks + db-utils/group-by-page + (map (fn [[k blocks]] + [k (remove-children! blocks)])))] + result))))) (defn get-date-scheduled-or-deadlines [journal-title] @@ -939,7 +951,9 @@ ref-pages pages)))))) sort-blocks - db-utils/group-by-page))))) + db-utils/group-by-page + (map (fn [[k blocks]] + [k (remove-children! blocks)]))))))) (defn get-block-referenced-blocks [block-uuid] diff --git a/src/main/frontend/db/utils.cljs b/src/main/frontend/db/utils.cljs index 8a3e3bc71e..d0152d13f6 100644 --- a/src/main/frontend/db/utils.cljs +++ b/src/main/frontend/db/utils.cljs @@ -72,8 +72,8 @@ (when-let [conn (conn/get-conn repo)] (try (d/pull conn - selector - eid) + selector + eid) (catch js/Error e nil))))) @@ -95,7 +95,7 @@ ([repo-url tx-data] (when-not config/publishing? (let [tx-data (->> (util/remove-nils tx-data) - (remove nil?))] + (remove nil?))] (when (seq tx-data) (when-let [conn (conn/get-conn repo-url false)] (d/transact! conn (vec tx-data)))))))) @@ -106,4 +106,4 @@ ([repo-url key] (when-let [db (conn/get-conn repo-url)] (some-> (d/entity db key) - key)))) + key))))