Skip to content

Commit c8c0e24

Browse files
fix: don't add Task tag when status is used by another class
Users should be able to use status property independent of Task
1 parent 423a4b0 commit c8c0e24

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

deps/outliner/src/logseq/outliner/property.cljs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,18 @@
3737
retract-multiple-values? (and multiple-values? (sequential? value))
3838
multiple-values-empty? (and (sequential? old-value)
3939
(contains? (set (map :db/ident old-value)) :logseq.property/empty-placeholder))
40-
block' (assoc (outliner-core/block-with-updated-at {:db/id (:db/id block)})
41-
property-id value)
42-
block-tx-data (cond-> block'
43-
(and status? (not (ldb/class-instance? (d/entity @conn :logseq.class/Task) block)))
44-
(assoc :block/tags :logseq.class/Task))]
45-
[(when multiple-values-empty?
46-
[:db/retract (:db/id block') property-id :logseq.property/empty-placeholder])
47-
(when retract-multiple-values?
48-
[:db/retract (:db/id block') property-id])
49-
block-tx-data]))))
40+
update-block-tx (cond-> (outliner-core/block-with-updated-at {:db/id (:db/id block)})
41+
true
42+
(assoc property-id value)
43+
(and status? (or (empty? (:block/tags block)) (ldb/internal-page? block)))
44+
(assoc :block/tags :logseq.class/Task))]
45+
(cond-> []
46+
multiple-values-empty?
47+
(conj [:db/retract (:db/id update-block-tx) property-id :logseq.property/empty-placeholder])
48+
retract-multiple-values?
49+
(conj [:db/retract (:db/id update-block-tx) property-id])
50+
true
51+
(conj update-block-tx))))))
5052

5153
(defn- get-property-value-schema
5254
"Gets a malli schema to validate the property value for the given property type and builds

deps/outliner/test/logseq/outliner/property_test.cljs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,32 @@
195195
updated-blocks))
196196
"Property values are batch set")))
197197

198+
(deftest status-property-setting-classes
199+
(let [conn (db-test/create-conn-with-blocks
200+
{:classes {:Project {:build/class-properties [:logseq.task/status]}}
201+
:pages-and-blocks
202+
[{:page {:block/title "page1"}
203+
:blocks [{:block/title ""}
204+
{:block/title "project task" :build/tags [:Project]}]}]})
205+
page1 (:block/uuid (db-test/find-page-by-title @conn "page1"))
206+
[empty-task project]
207+
(map #(:block/uuid (db-test/find-block-by-content @conn %)) ["" "project task"])]
208+
209+
(outliner-property/batch-set-property! conn [empty-task] :logseq.task/status :logseq.task/status.doing)
210+
(is (= [:logseq.class/Task]
211+
(mapv :db/ident (:block/tags (d/entity @conn [:block/uuid empty-task]))))
212+
"Adds Task to block when it is not tagged")
213+
214+
(outliner-property/batch-set-property! conn [page1] :logseq.task/status :logseq.task/status.doing)
215+
(is (= #{:logseq.class/Task :logseq.class/Page}
216+
(set (map :db/ident (:block/tags (d/entity @conn [:block/uuid page1])))))
217+
"Adds Task to page without tag")
218+
219+
(outliner-property/batch-set-property! conn [project] :logseq.task/status :logseq.task/status.doing)
220+
(is (= [:user.class/Project]
221+
(mapv :db/ident (:block/tags (d/entity @conn [:block/uuid project]))))
222+
"Doesn't add Task to block when it is already tagged")))
223+
198224
(deftest batch-remove-property!
199225
(let [conn (db-test/create-conn-with-blocks
200226
[{:page {:block/title "page1"}

0 commit comments

Comments
 (0)