Преглед изворни кода

enhance: jump to alias's source page when searching

Tienson Qin пре 4 година
родитељ
комит
ff9965475f
2 измењених фајлова са 31 додато и 21 уклоњено
  1. 16 8
      src/main/frontend/components/search.cljs
  2. 15 13
      src/main/frontend/db/model.cljs

+ 16 - 8
src/main/frontend/components/search.cljs

@@ -6,6 +6,7 @@
             [frontend.handler.route :as route]
             [frontend.handler.page :as page-handler]
             [frontend.db :as db]
+            [frontend.db.model :as model]
             [frontend.handler.search :as search-handler]
             [frontend.ui :as ui]
             [frontend.state :as state]
@@ -140,7 +141,9 @@
 (rum/defc search-auto-complete
   [{:keys [pages files blocks has-more?] :as result} search-q all?]
   (rum/with-context [[t] i18n/*tongue-context*]
-    (let [pages (when-not all? (map (fn [page] {:type :page :data page}) pages))
+    (let [pages (when-not all? (map (fn [page] {:type :page
+                                               :data page
+                                               :alias (model/get-redirect-page-name page)}) pages))
           files (when-not all? (map (fn [file] {:type :file :data file}) files))
           blocks (map (fn [block] {:type :block :data block}) blocks)
           search-mode (state/sub :search/mode)
@@ -170,7 +173,7 @@
        (ui/auto-complete
         result
         {:class "search-results"
-         :on-chosen (fn [{:keys [type data]}]
+         :on-chosen (fn [{:keys [type data alias]}]
                       (search-handler/clear-search!)
                       (leave-focus)
                       (case type
@@ -181,8 +184,9 @@
                         (page-handler/create! search-q)
 
                         :page
-                        (route/redirect! {:to :page
-                                          :path-params {:name data}})
+                        (let [data (or alias data)]
+                          (route/redirect! {:to :page
+                                            :path-params {:name data}}))
 
                         :file
                         (route/redirect! {:to :file
@@ -199,10 +203,11 @@
                                                :path-params {:name page}
                                                :query-params {:anchor (str "ls-block-" (:block/uuid data))}}))))
                         nil))
-         :on-shift-chosen (fn [{:keys [type data]}]
+         :on-shift-chosen (fn [{:keys [type data alias]}]
                             (case type
                               :page
-                              (let [page (db/entity [:block/name (string/lower-case data)])]
+                              (let [data (or alias data)
+                                    page (db/entity [:block/name (string/lower-case data)])]
                                 (state/sidebar-add-block!
                                  (state/get-current-repo)
                                  (:db/id page)
@@ -226,7 +231,7 @@
                                                 :path-params {:path data}})
 
                               nil))
-         :item-render (fn [{:keys [type data]}]
+         :item-render (fn [{:keys [type data alias]}]
                         (let [search-mode (state/get-search-mode)]
                           [:div {:class "py-2"} (case type
                                                   :graph-add-filter
@@ -237,7 +242,10 @@
                                                    [:span.ml-1 (str "\"" search-q "\"")]]
 
                                                   :page
-                                                  (search-result-item "Page" (highlight-exact-query data search-q))
+                                                  [:span
+                                                   (when alias
+                                                     [:span.mr-2.text-sm.font-medium.mb-2 (str "Alias -> " alias)])
+                                                   (search-result-item "Page" (highlight-exact-query data search-q))]
 
                                                   :file
                                                   (search-result-item "File" (highlight-exact-query data search-q))

+ 15 - 13
src/main/frontend/db/model.cljs

@@ -751,19 +751,21 @@
 (defn get-redirect-page-name
   ([page-name] (get-redirect-page-name page-name false))
   ([page-name alias?]
-   (let [page-entity (db-utils/entity [:block/name page-name])]
-     (cond
-       alias?
-       page-name
-
-       (page-empty-or-dummy? (state/get-current-repo) (:db/id page-entity))
-       (let [source-page (get-alias-source-page (state/get-current-repo)
-                                                      (string/lower-case page-name))]
-         (or (when source-page (:block/name source-page))
-             page-name))
-
-       :else
-       page-name))))
+   (when page-name
+     (let [page-name (string/lower-case page-name)
+           page-entity (db-utils/entity [:block/name page-name])]
+       (cond
+         alias?
+         page-name
+
+         (page-empty-or-dummy? (state/get-current-repo) (:db/id page-entity))
+         (let [source-page (get-alias-source-page (state/get-current-repo)
+                                                  (string/lower-case page-name))]
+           (or (when source-page (:block/name source-page))
+               page-name))
+
+         :else
+         page-name)))))
 
 (defn get-page-original-name
   [page-name]