From c8c0e24d939eebdd64fab47f59d433a3ed757e3d Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Fri, 24 Jan 2025 12:41:07 -0500 Subject: [PATCH] fix: don't add Task tag when status is used by another class Users should be able to use status property independent of Task --- .../src/logseq/outliner/property.cljs | 22 +++++++++------- .../test/logseq/outliner/property_test.cljs | 26 +++++++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/deps/outliner/src/logseq/outliner/property.cljs b/deps/outliner/src/logseq/outliner/property.cljs index 87413950bb..d37252f5ba 100644 --- a/deps/outliner/src/logseq/outliner/property.cljs +++ b/deps/outliner/src/logseq/outliner/property.cljs @@ -37,16 +37,18 @@ retract-multiple-values? (and multiple-values? (sequential? value)) multiple-values-empty? (and (sequential? old-value) (contains? (set (map :db/ident old-value)) :logseq.property/empty-placeholder)) - block' (assoc (outliner-core/block-with-updated-at {:db/id (:db/id block)}) - property-id value) - block-tx-data (cond-> block' - (and status? (not (ldb/class-instance? (d/entity @conn :logseq.class/Task) block))) - (assoc :block/tags :logseq.class/Task))] - [(when multiple-values-empty? - [:db/retract (:db/id block') property-id :logseq.property/empty-placeholder]) - (when retract-multiple-values? - [:db/retract (:db/id block') property-id]) - block-tx-data])))) + update-block-tx (cond-> (outliner-core/block-with-updated-at {:db/id (:db/id block)}) + true + (assoc property-id value) + (and status? (or (empty? (:block/tags block)) (ldb/internal-page? block))) + (assoc :block/tags :logseq.class/Task))] + (cond-> [] + multiple-values-empty? + (conj [:db/retract (:db/id update-block-tx) property-id :logseq.property/empty-placeholder]) + retract-multiple-values? + (conj [:db/retract (:db/id update-block-tx) property-id]) + true + (conj update-block-tx)))))) (defn- get-property-value-schema "Gets a malli schema to validate the property value for the given property type and builds diff --git a/deps/outliner/test/logseq/outliner/property_test.cljs b/deps/outliner/test/logseq/outliner/property_test.cljs index d05af5841b..66473199ce 100644 --- a/deps/outliner/test/logseq/outliner/property_test.cljs +++ b/deps/outliner/test/logseq/outliner/property_test.cljs @@ -195,6 +195,32 @@ updated-blocks)) "Property values are batch set"))) +(deftest status-property-setting-classes + (let [conn (db-test/create-conn-with-blocks + {:classes {:Project {:build/class-properties [:logseq.task/status]}} + :pages-and-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title ""} + {:block/title "project task" :build/tags [:Project]}]}]}) + page1 (:block/uuid (db-test/find-page-by-title @conn "page1")) + [empty-task project] + (map #(:block/uuid (db-test/find-block-by-content @conn %)) ["" "project task"])] + + (outliner-property/batch-set-property! conn [empty-task] :logseq.task/status :logseq.task/status.doing) + (is (= [:logseq.class/Task] + (mapv :db/ident (:block/tags (d/entity @conn [:block/uuid empty-task])))) + "Adds Task to block when it is not tagged") + + (outliner-property/batch-set-property! conn [page1] :logseq.task/status :logseq.task/status.doing) + (is (= #{:logseq.class/Task :logseq.class/Page} + (set (map :db/ident (:block/tags (d/entity @conn [:block/uuid page1]))))) + "Adds Task to page without tag") + + (outliner-property/batch-set-property! conn [project] :logseq.task/status :logseq.task/status.doing) + (is (= [:user.class/Project] + (mapv :db/ident (:block/tags (d/entity @conn [:block/uuid project])))) + "Doesn't add Task to block when it is already tagged"))) + (deftest batch-remove-property! (let [conn (db-test/create-conn-with-blocks [{:page {:block/title "page1"}