mirror of
https://github.com/logseq/logseq.git
synced 2026-05-23 12:14:06 +00:00
fix(regression): table view in file graph
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
(ns frontend.components.file-based.query-table
|
(ns frontend.components.file-based.query-table
|
||||||
(:require [frontend.components.svg :as svg]
|
(:require [clojure.string :as string]
|
||||||
|
[frontend.components.svg :as svg]
|
||||||
[frontend.date :as date]
|
[frontend.date :as date]
|
||||||
[frontend.db :as db]
|
[frontend.db :as db]
|
||||||
[frontend.db.query-dsl :as query-dsl]
|
[frontend.db.query-dsl :as query-dsl]
|
||||||
@@ -22,8 +23,11 @@
|
|||||||
;; FIXME: Look up by property id if still supporting clock-time
|
;; FIXME: Look up by property id if still supporting clock-time
|
||||||
(let [ks [:block/properties :clock-time]
|
(let [ks [:block/properties :clock-time]
|
||||||
result (map (fn [b]
|
result (map (fn [b]
|
||||||
(let [b (block/parse-title-and-body b)]
|
(let [b (update (block/parse-title-and-body b)
|
||||||
(assoc-in b ks (or (clock/clock-summary (:block.temp/ast-body b) false) 0))))
|
:block/properties (fn [properties] (if (map? properties) properties {})))]
|
||||||
|
(try (assoc-in b ks (or (clock/clock-summary (:block.temp/ast-body b) false) 0))
|
||||||
|
(catch :default _e
|
||||||
|
b))))
|
||||||
result)]
|
result)]
|
||||||
(if (every? #(zero? (get-in % ks)) result)
|
(if (every? #(zero? (get-in % ks)) result)
|
||||||
(map #(medley/dissoc-in % ks) result)
|
(map #(medley/dissoc-in % ks) result)
|
||||||
@@ -178,6 +182,40 @@
|
|||||||
;; anything else should just be rendered as provided
|
;; anything else should just be rendered as provided
|
||||||
:else value))
|
:else value))
|
||||||
|
|
||||||
|
(rum/defc table-row
|
||||||
|
[row columns config page? select? *mouse-down? map-inline page-cp ->elem inline-text]
|
||||||
|
(let [format (get row :block/format :markdown)
|
||||||
|
property-separated-by-commas? (partial text/separated-by-commas? (state/get-config))]
|
||||||
|
[:tr.cursor
|
||||||
|
(for [column columns]
|
||||||
|
(let [[cell-format value] (build-column-value row
|
||||||
|
column
|
||||||
|
{:page? page?
|
||||||
|
:->elem ->elem
|
||||||
|
:map-inline map-inline
|
||||||
|
:config config
|
||||||
|
:comma-separated-property? (property-separated-by-commas? column)})]
|
||||||
|
[:td.whitespace-nowrap
|
||||||
|
{:data-key (pr-str column)
|
||||||
|
:on-pointer-down (fn []
|
||||||
|
(reset! *mouse-down? true)
|
||||||
|
(reset! select? false))
|
||||||
|
:on-mouse-move (fn [] (reset! select? true))
|
||||||
|
:on-pointer-up (fn []
|
||||||
|
(when (and @*mouse-down? (not @select?))
|
||||||
|
(state/sidebar-add-block!
|
||||||
|
(state/get-current-repo)
|
||||||
|
(:db/id row)
|
||||||
|
:block)
|
||||||
|
(reset! *mouse-down? false)))}
|
||||||
|
(when (some? value)
|
||||||
|
(render-column-value {:row-block row
|
||||||
|
:row-format format
|
||||||
|
:cell-format cell-format
|
||||||
|
:value value}
|
||||||
|
page-cp
|
||||||
|
inline-text))]))]))
|
||||||
|
|
||||||
(rum/defcs result-table-v1 < rum/reactive
|
(rum/defcs result-table-v1 < rum/reactive
|
||||||
(rum/local false ::select?)
|
(rum/local false ::select?)
|
||||||
(rum/local false ::mouse-down?)
|
(rum/local false ::mouse-down?)
|
||||||
@@ -186,8 +224,7 @@
|
|||||||
*mouse-down? (::mouse-down? state)
|
*mouse-down? (::mouse-down? state)
|
||||||
clock-time-total (when-not page?
|
clock-time-total (when-not page?
|
||||||
(->> (map #(get-in % [:block/properties :clock-time] 0) sort-result')
|
(->> (map #(get-in % [:block/properties :clock-time] 0) sort-result')
|
||||||
(apply +)))
|
(apply +)))]
|
||||||
property-separated-by-commas? (partial text/separated-by-commas? (state/get-config))]
|
|
||||||
[:div.overflow-x-auto {:on-pointer-down (fn [e] (.stopPropagation e))
|
[:div.overflow-x-auto {:on-pointer-down (fn [e] (.stopPropagation e))
|
||||||
:style {:width "100%"}
|
:style {:width "100%"}
|
||||||
:class "query-table"}
|
:class "query-table"}
|
||||||
@@ -202,41 +239,22 @@
|
|||||||
(sortable-title title column sort-state (:block/uuid current-block))))]]
|
(sortable-title title column sort-state (:block/uuid current-block))))]]
|
||||||
[:tbody
|
[:tbody
|
||||||
(for [row sort-result']
|
(for [row sort-result']
|
||||||
(let [format (get row :block/format :markdown)]
|
(table-row row columns config page? select? *mouse-down? map-inline page-cp ->elem inline-text))]]]))
|
||||||
[:tr.cursor
|
|
||||||
(for [column columns]
|
|
||||||
(let [[cell-format value] (build-column-value row
|
|
||||||
column
|
|
||||||
{:page? page?
|
|
||||||
:->elem ->elem
|
|
||||||
:map-inline map-inline
|
|
||||||
:config config
|
|
||||||
:comma-separated-property? (property-separated-by-commas? column)})]
|
|
||||||
[:td.whitespace-nowrap
|
|
||||||
{:data-key (pr-str column)
|
|
||||||
:on-pointer-down (fn []
|
|
||||||
(reset! *mouse-down? true)
|
|
||||||
(reset! select? false))
|
|
||||||
:on-mouse-move (fn [] (reset! select? true))
|
|
||||||
:on-pointer-up (fn []
|
|
||||||
(when (and @*mouse-down? (not @select?))
|
|
||||||
(state/sidebar-add-block!
|
|
||||||
(state/get-current-repo)
|
|
||||||
(:db/id row)
|
|
||||||
:block)
|
|
||||||
(reset! *mouse-down? false)))}
|
|
||||||
(when (some? value)
|
|
||||||
(render-column-value {:row-block row
|
|
||||||
:row-format format
|
|
||||||
:cell-format cell-format
|
|
||||||
:value value}
|
|
||||||
page-cp
|
|
||||||
inline-text))]))]))]]]))
|
|
||||||
|
|
||||||
(rum/defc result-table < rum/reactive
|
(rum/defc result-table < rum/reactive
|
||||||
[config current-block result {:keys [page?] :as options} map-inline page-cp ->elem inline-text]
|
[config current-block result {:keys [page?] :as options} map-inline page-cp ->elem inline-text]
|
||||||
(when current-block
|
(when current-block
|
||||||
(let [result' (if page? result (attach-clock-property result))
|
(let [result (map (fn [item]
|
||||||
|
(if (and (map? item) (:db/id item))
|
||||||
|
(if-let [entity-title (:block/title (db/entity (:db/id item)))]
|
||||||
|
(assoc item :block/title entity-title)
|
||||||
|
(update item :block/title (fn [title]
|
||||||
|
(some-> title
|
||||||
|
(string/replace "$pfts_2lqh>$" "")
|
||||||
|
(string/replace "$<pfts_2lqh$" "")))))
|
||||||
|
item))
|
||||||
|
result)
|
||||||
|
result' (if page? result (attach-clock-property result))
|
||||||
columns (get-columns current-block result' {:page? page?})
|
columns (get-columns current-block result' {:page? page?})
|
||||||
;; Sort state needs to be in sync between final result and sortable title
|
;; Sort state needs to be in sync between final result and sortable title
|
||||||
;; as user needs to know if there result is sorted
|
;; as user needs to know if there result is sorted
|
||||||
|
|||||||
Reference in New Issue
Block a user