mirror of https://github.com/logseq/logseq
Cleanup search-auto-complete component
Component was needlessly large and difficult to maintain. Split up handlers to separate fns and removed duplicate get-current-repo callspull/4423/head
parent
3772e67ed9
commit
5680c145cc
|
@ -89,8 +89,8 @@
|
|||
[repo search-q {:keys [data type alias]}]
|
||||
(search-handler/add-search-to-recent! repo search-q)
|
||||
(search-handler/clear-search!)
|
||||
(cond
|
||||
(= :block type)
|
||||
(case type
|
||||
:block
|
||||
;; Open the first link in a block's content
|
||||
(let [block-uuid (uuid (:block/uuid data))
|
||||
block (:block/content (db/entity [:block/uuid block-uuid]))
|
||||
|
@ -99,18 +99,123 @@
|
|||
(js/window.open link)
|
||||
(notification/show! "No link found on this block." :warning)))
|
||||
|
||||
(= :page type)
|
||||
:page
|
||||
;; Open the first link found in a page's properties
|
||||
(let [data (or alias data)
|
||||
page (when data (db/entity [:block/name (util/page-name-sanity-lc data)]))
|
||||
link (some #(re-find editor-handler/url-regex (val %)) (:block/properties page))]
|
||||
(if link
|
||||
(js/window.open link)
|
||||
(notification/show! "No link found on this page's properties." :warning))))
|
||||
(notification/show! "No link found on this page's properties." :warning)))
|
||||
|
||||
nil)
|
||||
(state/close-modal!))
|
||||
|
||||
(rum/defc ^:large-vars/cleanup-todo search-auto-complete
|
||||
(defn- search-on-chosen
|
||||
[repo search-q {:keys [type data alias]}]
|
||||
(search-handler/add-search-to-recent! repo search-q)
|
||||
(search-handler/clear-search!)
|
||||
(case type
|
||||
:graph-add-filter
|
||||
(state/add-graph-search-filter! search-q)
|
||||
|
||||
:new-page
|
||||
(page-handler/create! search-q)
|
||||
|
||||
:page
|
||||
(let [data (or alias data)]
|
||||
(route/redirect-to-page! data))
|
||||
|
||||
:file
|
||||
(route/redirect! {:to :file
|
||||
:path-params {:path data}})
|
||||
|
||||
:block
|
||||
(let [block-uuid (uuid (:block/uuid data))
|
||||
collapsed? (db/parents-collapsed? repo block-uuid)
|
||||
page (:block/page (db/entity [:block/uuid block-uuid]))
|
||||
long-page? (block-handler/long-page? repo (:db/id page))]
|
||||
(if page
|
||||
(if (or collapsed? long-page?)
|
||||
(route/redirect-to-page! block-uuid)
|
||||
(route/redirect-to-page! (:block/name page) (str "ls-block-" (:block/uuid data))))
|
||||
;; search indice outdated
|
||||
(println "[Error] Block page missing: "
|
||||
{:block-id block-uuid
|
||||
:block (db/pull [:block/uuid block-uuid])})))
|
||||
nil)
|
||||
(state/close-modal!))
|
||||
|
||||
(defn- search-on-shift-chosen
|
||||
[repo search-q {:keys [type data alias]}]
|
||||
(search-handler/add-search-to-recent! repo search-q)
|
||||
(case type
|
||||
:page
|
||||
(let [data (or alias data)
|
||||
page (when data (db/entity [:block/name (util/page-name-sanity-lc data)]))]
|
||||
(when page
|
||||
(state/sidebar-add-block!
|
||||
repo
|
||||
(:db/id page)
|
||||
:page
|
||||
{:page page})))
|
||||
|
||||
:block
|
||||
(let [block-uuid (uuid (:block/uuid data))
|
||||
block (db/entity [:block/uuid block-uuid])]
|
||||
(state/sidebar-add-block!
|
||||
repo
|
||||
(:db/id block)
|
||||
:block
|
||||
block))
|
||||
|
||||
:new-page
|
||||
(page-handler/create! search-q)
|
||||
|
||||
:file
|
||||
(route/redirect! {:to :file
|
||||
:path-params {:path data}})
|
||||
|
||||
nil)
|
||||
(state/close-modal!))
|
||||
|
||||
(defn- search-item-render
|
||||
[search-q {:keys [type data alias]}]
|
||||
(let [search-mode (state/get-search-mode)
|
||||
data (if (string? data) (pdf-assets/fix-local-asset-filename data) data)]
|
||||
[:div {:class "py-2"}
|
||||
(case type
|
||||
:graph-add-filter
|
||||
[:b search-q]
|
||||
|
||||
:new-page
|
||||
[:div.text.font-bold (str (t :new-page) ": ")
|
||||
[:span.ml-1 (str "\"" search-q "\"")]]
|
||||
|
||||
:page
|
||||
[:span {:data-page-ref data}
|
||||
(when alias
|
||||
(let [target-original-name (model/get-page-original-name alias)]
|
||||
[:span.mr-2.text-sm.font-medium.mb-2 (str "Alias -> " target-original-name)]))
|
||||
(search-result-item "Page" (highlight-exact-query data search-q))]
|
||||
|
||||
:file
|
||||
(search-result-item "File" (highlight-exact-query data search-q))
|
||||
|
||||
:block
|
||||
(let [{:block/keys [page uuid]} data ;; content here is normalized
|
||||
page (util/get-page-original-name page)
|
||||
repo (state/sub :git/current-repo)
|
||||
format (db/get-page-format page)
|
||||
block (model/query-block-by-uuid uuid)
|
||||
content (:block/content block)]
|
||||
[:span {:data-block-ref uuid}
|
||||
(search-result-item "Block"
|
||||
(block-search-result-item repo uuid format content search-q search-mode))])
|
||||
|
||||
nil)]))
|
||||
|
||||
(rum/defc search-auto-complete
|
||||
[{:keys [pages files blocks has-more?] :as result} search-q all?]
|
||||
(let [pages (when-not all? (map (fn [page]
|
||||
(let [alias (model/get-redirect-page-name page)]
|
||||
|
@ -144,104 +249,9 @@
|
|||
(ui/auto-complete
|
||||
result
|
||||
{:class "search-results"
|
||||
:on-chosen (fn [{:keys [type data alias]}]
|
||||
(search-handler/add-search-to-recent! repo search-q)
|
||||
(search-handler/clear-search!)
|
||||
(case type
|
||||
:graph-add-filter
|
||||
(state/add-graph-search-filter! search-q)
|
||||
|
||||
:new-page
|
||||
(page-handler/create! search-q)
|
||||
|
||||
:page
|
||||
(let [data (or alias data)]
|
||||
(route/redirect-to-page! data))
|
||||
|
||||
:file
|
||||
(route/redirect! {:to :file
|
||||
:path-params {:path data}})
|
||||
|
||||
:block
|
||||
(let [repo (state/get-current-repo)
|
||||
block-uuid (uuid (:block/uuid data))
|
||||
collapsed? (db/parents-collapsed? repo block-uuid)
|
||||
page (:block/page (db/entity [:block/uuid block-uuid]))
|
||||
long-page? (block-handler/long-page? repo (:db/id page))]
|
||||
(if page
|
||||
(if (or collapsed? long-page?)
|
||||
(route/redirect-to-page! block-uuid)
|
||||
(route/redirect-to-page! (:block/name page) (str "ls-block-" (:block/uuid data))))
|
||||
;; search indice outdated
|
||||
(println "[Error] Block page missing: "
|
||||
{:block-id block-uuid
|
||||
:block (db/pull [:block/uuid block-uuid])})))
|
||||
nil)
|
||||
(state/close-modal!))
|
||||
:on-shift-chosen (fn [{:keys [type data alias]}]
|
||||
(search-handler/add-search-to-recent! repo search-q)
|
||||
(case type
|
||||
:page
|
||||
(let [data (or alias data)
|
||||
page (when data (db/entity [:block/name (util/page-name-sanity-lc data)]))]
|
||||
(when page
|
||||
(state/sidebar-add-block!
|
||||
(state/get-current-repo)
|
||||
(:db/id page)
|
||||
:page
|
||||
{:page page})))
|
||||
|
||||
:block
|
||||
(let [block-uuid (uuid (:block/uuid data))
|
||||
block (db/entity [:block/uuid block-uuid])]
|
||||
(state/sidebar-add-block!
|
||||
(state/get-current-repo)
|
||||
(:db/id block)
|
||||
:block
|
||||
block))
|
||||
|
||||
:new-page
|
||||
(page-handler/create! search-q)
|
||||
|
||||
:file
|
||||
(route/redirect! {:to :file
|
||||
:path-params {:path data}})
|
||||
|
||||
nil)
|
||||
(state/close-modal!))
|
||||
:item-render (fn [{:keys [type data alias]}]
|
||||
(let [search-mode (state/get-search-mode)
|
||||
data (if (string? data) (pdf-assets/fix-local-asset-filename data) data)]
|
||||
[:div {:class "py-2"} (case type
|
||||
:graph-add-filter
|
||||
[:b search-q]
|
||||
|
||||
:new-page
|
||||
[:div.text.font-bold (str (t :new-page) ": ")
|
||||
[:span.ml-1 (str "\"" search-q "\"")]]
|
||||
|
||||
:page
|
||||
[:span {:data-page-ref data}
|
||||
(when alias
|
||||
(let [target-original-name (model/get-page-original-name alias)]
|
||||
[:span.mr-2.text-sm.font-medium.mb-2 (str "Alias -> " target-original-name)]))
|
||||
(search-result-item "Page" (highlight-exact-query data search-q))]
|
||||
|
||||
:file
|
||||
(search-result-item "File" (highlight-exact-query data search-q))
|
||||
|
||||
:block
|
||||
(let [{:block/keys [page uuid]} data ;; content here is normalized
|
||||
page (util/get-page-original-name page)
|
||||
repo (state/sub :git/current-repo)
|
||||
format (db/get-page-format page)
|
||||
block (model/query-block-by-uuid uuid)
|
||||
content (:block/content block)]
|
||||
[:span {:data-block-ref uuid}
|
||||
(search-result-item "Block"
|
||||
(block-search-result-item repo uuid format content search-q search-mode))])
|
||||
|
||||
nil)]))
|
||||
:on-chosen #(search-on-chosen repo search-q %)
|
||||
:on-shift-chosen #(search-on-shift-chosen repo search-q %)
|
||||
:item-render #(search-item-render search-q %)
|
||||
:on-chosen-open-link #(search-on-chosen-open-link repo search-q %)})
|
||||
(when (and has-more? (util/electron?) (not all?))
|
||||
[:div.px-2.py-4.search-more
|
||||
|
|
Loading…
Reference in New Issue