Explorar el Código

feat: add option to hide empty value for properties

Tienson Qin hace 1 año
padre
commit
04eaea43fd

+ 10 - 3
deps/db/src/logseq/db/frontend/property.cljs

@@ -57,6 +57,10 @@
                                                :cardinality :many
                                                :public? true
                                                :view-context :never}}
+   :logseq.property/hide-empty-value {:title "Hide empty value"
+                                      :schema {:type :checkbox
+                                               :public? true
+                                               :view-context :property}}
    :logseq.property.class/hide-from-node {:title "Hide from Node"
                                           :schema {:type :checkbox
                                                    :public? true
@@ -147,7 +151,8 @@
           [[:logseq.task/priority.low "Low" "priorityLvlLow"]
            [:logseq.task/priority.medium "Medium" "priorityLvlMedium"]
            [:logseq.task/priority.high "High" "priorityLvlHigh"]
-           [:logseq.task/priority.urgent "Urgent" "priorityLvlUrgent"]])}
+           [:logseq.task/priority.urgent "Urgent" "priorityLvlUrgent"]])
+    :properties {:logseq.property/hide-empty-value true}}
    :logseq.task/status
    {:title "Status"
     :schema
@@ -165,12 +170,14 @@
            [:logseq.task/status.doing "Doing" "InProgress50"]
            [:logseq.task/status.in-review "In Review" "InReview"]
            [:logseq.task/status.done "Done" "Done"]
-           [:logseq.task/status.canceled "Canceled" "Cancelled"]])}
+           [:logseq.task/status.canceled "Canceled" "Cancelled"]])
+    :properties {:logseq.property/hide-empty-value true}}
    :logseq.task/deadline
    {:title "Deadline"
     :schema {:type :date
              :public? true
-             :position :block-below}}
+             :position :block-below}
+    :properties {:logseq.property/hide-empty-value true}}
 
    ;; TODO: Add more props :Assignee, :Estimate, :Cycle, :Project
 

+ 1 - 1
deps/db/src/logseq/db/frontend/schema.cljs

@@ -2,7 +2,7 @@
   "Main datascript schemas for the Logseq app"
   (:require [clojure.set :as set]))
 
-(def version 42)
+(def version 43)
 
 ;; A page is a special block, a page can corresponds to multiple files with the same ":block/name".
 (def ^:large-vars/data-var schema

+ 2 - 0
deps/outliner/src/logseq/outliner/property.cljs

@@ -400,6 +400,8 @@
         schema (:block/schema property)]
     (and
      (= (:position schema) position)
+     (not (and (:logseq.property/hide-empty-value property)
+               (nil? (get block-properties property-id))))
      (not (get-in property [:block/schema :hide?]))
      (not (and
            (= (:position schema) :block-below)

+ 13 - 9
src/main/frontend/components/property.cljs

@@ -592,15 +592,19 @@
         state-hide-empty-properties? (:ui/hide-empty-properties? (state/get-config))
         ;; This section produces own-properties and full-hidden-properties
         hide-with-property-id (fn [property-id]
-                                (cond
-                                  show-empty-and-hidden-properties?
-                                  false
-                                  root-block?
-                                  false
-                                  state-hide-empty-properties?
-                                  (nil? (get block property-id))
-                                  :else
-                                  (boolean (:hide? (:block/schema (db/entity property-id))))))
+                                (let [property (db/entity property-id)]
+                                  (cond
+                                    show-empty-and-hidden-properties?
+                                    false
+                                    root-block?
+                                    false
+                                    (and (:logseq.property/hide-empty-value property)
+                                         (nil? (get properties property-id)))
+                                    true
+                                    state-hide-empty-properties?
+                                    (nil? (get block property-id))
+                                    :else
+                                    (boolean (:hide? (:block/schema property))))))
         property-hide-f (cond
                           config/publishing?
                           ;; Publishing is read only so hide all blank properties as they

+ 7 - 1
src/main/frontend/components/property/config.cljs

@@ -563,7 +563,13 @@
                           (dropdown-editor-menuitem {:icon :eye-off :title "Hide by default" :toggle-checked? (boolean (:hide? property-schema))
                                                      :disabled? config/publishing?
                                                      :on-toggle-checked-change #(db-property-handler/upsert-property! (:db/ident property)
-                                                                                                                      (assoc property-schema :hide? %) {})}))]
+                                                                                                                      (assoc property-schema :hide? %) {})}))
+                        (when (not (contains? #{:logseq.property/parent :logseq.property.class/properties} (:db/ident property)))
+                          (dropdown-editor-menuitem {:icon :eye-off :title "Hide empty value" :toggle-checked? (boolean (:logseq.property/hide-empty-value property))
+                                                     :disabled? config/publishing?
+                                                     :on-toggle-checked-change #(db-property-handler/set-block-property! (:db/id property)
+                                                                                                                         :logseq.property/hide-empty-value
+                                                                                                                         (not (:logseq.property/hide-empty-value property)))}))]
                        (remove nil?))]
        (when (> (count group') 0)
          (cons (shui/dropdown-menu-separator) group')))

+ 11 - 1
src/main/frontend/worker/db/migrate.cljs

@@ -136,6 +136,14 @@
                         :block/name (common-util/page-name-sanity-lc new-title)})))
             classes-to-rename))))
 
+(defn- set-hide-empty-value
+  [_conn _search-db]
+  (map
+   (fn [k]
+     {:db/ident k
+      :logseq.property/hide-empty-value true})
+   [:logseq.task/status :logseq.task/priority :logseq.task/deadline]))
+
 (defn- update-block-type-many->one
   [conn _search-db]
   (let [db @conn
@@ -368,7 +376,9 @@
         :fix add-pdf-annotation-class}]
    [41 {:fix (rename-classes {:logseq.class/pdf-annotation :logseq.class/Pdf-annotation})}]
    [42 {:fix (rename-properties {:logseq.property/hl-color :logseq.property.pdf/hl-color
-                                 :logseq.property/hl-type :logseq.property.pdf/hl-type})}]])
+                                 :logseq.property/hl-type :logseq.property.pdf/hl-type})}]
+   [43 {:properties [:logseq.property/hide-empty-value]
+        :fix set-hide-empty-value}]])
 
 (let [max-schema-version (apply max (map first schema-version->updates))]
   (assert (<= db-schema/version max-schema-version))