From 143bfbcd260313258fb30736271180fa08c8d452 Mon Sep 17 00:00:00 2001 From: Mega Yu Date: Wed, 13 May 2026 16:38:42 +0800 Subject: [PATCH] fix(breadcrumb): resolve uuid refs in breadcrumb labels --- .../components/block/breadcrumb_model.cljs | 16 ++++++++++++++-- .../components/block/breadcrumb_model_test.cljs | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/frontend/components/block/breadcrumb_model.cljs b/src/main/frontend/components/block/breadcrumb_model.cljs index 2807e92641..29e0b38624 100644 --- a/src/main/frontend/components/block/breadcrumb_model.cljs +++ b/src/main/frontend/components/block/breadcrumb_model.cljs @@ -4,7 +4,8 @@ Converts page/block entities into flat segment maps, then applies a display-budget algorithm to determine which segments are visible and which are folded into an ellipsis." - (:require [clojure.string :as string])) + (:require [clojure.string :as string] + [logseq.db.frontend.content :as db-content])) ;; --------------------------------------------------------------------------- ;; Text normalization @@ -122,6 +123,15 @@ cleaned (when line (strip-markdown-markup line))] (truncate-segment-text cleaned)))) +(defn- entity-display-title + [entity raw-title] + (or (when (and (string? raw-title) + (re-find db-content/id-ref-pattern raw-title)) + (db-content/recur-replace-uuid-in-block-title + (assoc entity :block/title raw-title) + 10)) + raw-title)) + ;; --------------------------------------------------------------------------- ;; Block type detection ;; --------------------------------------------------------------------------- @@ -192,7 +202,9 @@ [entity] (when entity (let [page? (some? (:block/name entity)) - raw-title (or (:block/raw-title entity) (:block/title entity)) + raw-title (entity-display-title + entity + (or (:block/raw-title entity) (:block/title entity))) ;; DB version: structural type is stored in :logseq.property.node/display-type ;; (Code/Quote/Math blocks) or inferred from :block/tags (Query family). ;; org-mode markers like #+BEGIN_SRC in raw-title are also recognised as diff --git a/src/test/frontend/components/block/breadcrumb_model_test.cljs b/src/test/frontend/components/block/breadcrumb_model_test.cljs index 7ea97f2c99..25f3b367a8 100644 --- a/src/test/frontend/components/block/breadcrumb_model_test.cljs +++ b/src/test/frontend/components/block/breadcrumb_model_test.cljs @@ -134,7 +134,20 @@ {:db/id 1 :block/uuid #uuid "00000000-0000-0000-0000-000000000001" :block/raw-title "plain text"})] - (is (= "plain text" (:text seg)))))) + (is (= "plain text" (:text seg))))) + + (testing "block uuid page refs are resolved to page title refs" + (let [ref-uuid #uuid "00000000-0000-0000-0000-000000000002" + seg (model/block->breadcrumb-segment + {:db/id 1 + :block/uuid #uuid "00000000-0000-0000-0000-000000000001" + :block/raw-title (str "See [[" ref-uuid "]]") + :block/refs [{:db/id 2 + :block/uuid ref-uuid + :block/name "aaa" + :block/title "aaa"}]})] + (is (= "See [[aaa]]" (:text seg))) + (is (= "See [[aaa]]" (:full-text seg)))))) ;; --------------------------------------------------------------------------- ;; block->breadcrumb-segment — structural type detection