mirror of
https://github.com/logseq/logseq.git
synced 2026-05-25 13:14:39 +00:00
fix: don't add Task tag when status is used by another class
Users should be able to use status property independent of Task
This commit is contained in:
22
deps/outliner/src/logseq/outliner/property.cljs
vendored
22
deps/outliner/src/logseq/outliner/property.cljs
vendored
@@ -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
|
||||
|
||||
@@ -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"}
|
||||
|
||||
Reference in New Issue
Block a user