From deb2a1aaad3ef0459a30f56c0a40d6e4366635fa Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Thu, 24 Aug 2023 16:42:24 -0400 Subject: [PATCH] fix: render v2 tables correctly also added shui properties so they are built-in and editable --- .../src/logseq/graph_parser/property.cljs | 30 ++++++++++++++++--- src/main/frontend/components/property.cljs | 5 +--- src/main/frontend/components/query_table.cljs | 5 ++-- src/main/frontend/shui.cljs | 11 +++---- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/deps/graph-parser/src/logseq/graph_parser/property.cljs b/deps/graph-parser/src/logseq/graph_parser/property.cljs index d860f6d41..40f62251b 100644 --- a/deps/graph-parser/src/logseq/graph_parser/property.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/property.cljs @@ -173,13 +173,16 @@ the following keys: * :schema - Property's schema. Required key * :original-name - Property's :block/original-name - * :attribute - Property that is saved to a datascript attribute outside of :block/properties" + * :attribute - Property keyword that is saved to a datascript attribute outside of :block/properties + * :visible - Boolean to indicate user can see and use this property" {:alias {:original-name "Alias" :attribute :block/alias + :visible true :schema {:type :page :cardinality :many}} :tags {:original-name "Tags" :attribute :block/tags + :visible true :schema {:type :page :cardinality :many}} :background-color {:schema {:type :default}} @@ -201,6 +204,25 @@ :logseq.order-list-type {:schema {:type :checkbox}} :logseq.tldraw.page {:schema {:type :map}} :logseq.tldraw.shape {:schema {:type :map}} + ;; color props + :logseq.color {:schema {:type :default} + :visible true} + ;; table-v2 props + :logseq.table.version {:schema {:type :number} + :visible true} + :logseq.table.compact {:schema {:type :checkbox} + :visible true} + :logseq.table.headers {:schema {:type :default} + :visible true} + :logseq.table.hover {:schema {:type :default} + :visible true} + :logseq.table.borders {:schema {:type :checkbox} + :visible true} + :logseq.table.stripes {:schema {:type :checkbox} + :visible true} + :logseq.table.max-width {:schema {:type :number} + :visible true} + :icon {:original-name "Icon" :schema {:type :map}} :public {:schema {:type :checkbox}} @@ -208,15 +230,15 @@ :exclude-from-graph-view {:schema {:type :checkbox}} :created-in-property {:schema {:type :checkbox}}}) -(def db-user-facing-built-in-properties +(def db-visible-built-in-properties "These are built-in properties that users can see and use" - #{:alias :tags}) + (set (keep (fn [[k v]] (when (:visible v) k)) db-built-in-properties))) (defonce db-built-in-properties-keys (set (keys db-built-in-properties))) (def db-hidden-built-in-properties - (set/difference db-built-in-properties-keys db-user-facing-built-in-properties)) + (set/difference db-built-in-properties-keys db-visible-built-in-properties)) (defonce db-built-in-properties-keys-str (set (map name (keys db-built-in-properties)))) diff --git a/src/main/frontend/components/property.cljs b/src/main/frontend/components/property.cljs index c8d417940..615e7802d 100644 --- a/src/main/frontend/components/property.cljs +++ b/src/main/frontend/components/property.cljs @@ -376,9 +376,6 @@ namespace-properties (->> (:block/tags block) (get-namespace-properties) (map (fn [id] [id nil]))) - built-in-properties (set/difference - (set (map name gp-property/db-built-in-properties-keys)) - #{"alias" "tags"}) properties (->> (concat (seq tags-properties) (seq alias-properties) (seq properties) @@ -387,7 +384,7 @@ (util/distinct-by first) (remove (fn [[k _v]] (when (uuid? k) - (contains? built-in-properties (:block/name (db/entity [:block/uuid k]))))))) + (contains? gp-property/db-hidden-built-in-properties (keyword (:block/name (db/entity [:block/uuid k])))))))) new-property? (or (and (:*configure-show? opts) @(:*configure-show? opts) diff --git a/src/main/frontend/components/query_table.cljs b/src/main/frontend/components/query_table.cljs index 06b721ffb..7c39d0b63 100644 --- a/src/main/frontend/components/query_table.cljs +++ b/src/main/frontend/components/query_table.cljs @@ -294,9 +294,10 @@ sort-result (sort-result result (assoc sort-state :page? page?)) table-version (get-shui-component-version :table config)] (case table-version - 2 (let [result-as-text (for [row sort-result] + 2 (let [v2-columns (mapv #(if (uuid? %) (pu/get-property-name %) %) columns) + result-as-text (for [row result] (for [column columns] (build-column-text row column)))] - (shui/table-v2 {:data (conj [[columns]] result-as-text)} + (shui/table-v2 {:data (conj [[v2-columns]] result-as-text)} (make-shui-context config inline))) 1 (result-table-v1 config current-block sort-result sort-state columns options map-inline page-cp ->elem inline-text))))) diff --git a/src/main/frontend/shui.cljs b/src/main/frontend/shui.cljs index 351996102..2a0548d69 100644 --- a/src/main/frontend/shui.cljs +++ b/src/main/frontend/shui.cljs @@ -1,9 +1,10 @@ (ns frontend.shui "Glue between frontend code and deps/shui for convenience" - (:require - [frontend.date :refer [int->local-time-2]] - [frontend.state :as state] - [logseq.shui.context :refer [make-context]])) + (:require + [frontend.date :refer [int->local-time-2]] + [frontend.state :as state] + [frontend.handler.property.util :as pu] + [logseq.shui.context :refer [make-context]])) (def default-versions {:logseq.table.version 1}) @@ -13,7 +14,7 @@ [component-name block-config] (let [version-key (keyword (str "logseq." (name component-name) ".version"))] (js/parseFloat - (or (get-in block-config [:block :block/properties version-key]) + (or (pu/lookup (get-in block-config [:block :block/properties]) version-key) (get-in (state/get-config) [version-key]) (get-in default-versions [version-key]) 1))))