|
|
@@ -27,6 +27,27 @@
|
|
|
;; schema -> type, cardinality, object's class
|
|
|
;; min, max -> string length, number range, cardinality size limit
|
|
|
|
|
|
+(defn- build-property-pair
|
|
|
+ [db-ident value]
|
|
|
+ (outliner-core/block-with-timestamps
|
|
|
+ {:property/pair-property db-ident
|
|
|
+ db-ident value}))
|
|
|
+
|
|
|
+(defn- build-property-value-tx-data
|
|
|
+ [block property-id value status?]
|
|
|
+ (when value
|
|
|
+ (let [property-pair-e (db-property/get-pair-e block property-id)
|
|
|
+ property-tx-data (outliner-core/block-with-updated-at
|
|
|
+ (if property-pair-e
|
|
|
+ {:db/id (:db/id property-pair-e)
|
|
|
+ property-id value}
|
|
|
+ {:db/id (:db/id block)
|
|
|
+ :block/properties (build-property-pair property-id value)}))
|
|
|
+ block-tx-data (when status?
|
|
|
+ {:db/id (:db/id block)
|
|
|
+ :block/tags :logseq.class/task})]
|
|
|
+ [property-tx-data block-tx-data])))
|
|
|
+
|
|
|
(defn built-in-validation-schemas
|
|
|
"A frontend version of built-in-validation-schemas that adds the current database to
|
|
|
schema fns"
|
|
|
@@ -193,11 +214,11 @@
|
|
|
(notification/show! msg' :warning))
|
|
|
(do
|
|
|
(when-not tags-or-alias? (upsert-property! repo property-id (assoc property-schema :type property-type) {}))
|
|
|
- (db/transact! repo
|
|
|
- [[:db/retract (:db/id block) property-id]
|
|
|
- {:db/id block-eid
|
|
|
- property-id values'}]
|
|
|
- {:outliner-op :save-block}))))))))
|
|
|
+ (let [pair-id (:db/id (db-property/get-pair-e block property-id))
|
|
|
+ tx-data (concat
|
|
|
+ [(when pair-id [:db/retractEnitty pair-id])]
|
|
|
+ (build-property-value-tx-data block property-id values' false))]
|
|
|
+ (db/transact! repo tx-data {:outliner-op :save-block})))))))))
|
|
|
|
|
|
(defn- resolve-tag
|
|
|
"Change `v` to a tag's db id if v is a string tag, e.g. `#book`"
|
|
|
@@ -276,18 +297,14 @@
|
|
|
|
|
|
:else
|
|
|
v*)
|
|
|
- ;; don't modify maps
|
|
|
+ ;; don't modify maps
|
|
|
new-value (if (or (sequential? new-value) (set? new-value))
|
|
|
(if (= :coll property-type)
|
|
|
(vec (remove string/blank? new-value))
|
|
|
(set (remove string/blank? new-value)))
|
|
|
new-value)
|
|
|
- block (cond->
|
|
|
- {:block/uuid (:block/uuid block)
|
|
|
- property-id new-value}
|
|
|
- status?
|
|
|
- (assoc :block/tags [:logseq.class/task]))]
|
|
|
- (db/transact! repo [block] {:outliner-op :save-block})))))))))))
|
|
|
+ tx-data (build-property-value-tx-data block property-id new-value status?)]
|
|
|
+ (db/transact! repo tx-data {:outliner-op :save-block})))))))))))
|
|
|
|
|
|
(defn class-add-property!
|
|
|
[repo class-uuid property-id]
|
|
|
@@ -356,10 +373,7 @@
|
|
|
(catch :default e
|
|
|
(notification/show! (str e) :error false)
|
|
|
nil))]
|
|
|
- [{:block/uuid (:block/uuid block)
|
|
|
- property-id v*}
|
|
|
- (when status?
|
|
|
- [:db/add (:db/id block) :block/tags :logseq.class/task])]))))
|
|
|
+ (build-property-value-tx-data block property-id v* status?)))))
|
|
|
block-eids)
|
|
|
(remove nil?))]
|
|
|
(when (seq txs)
|
|
|
@@ -385,9 +399,11 @@
|
|
|
txs-state
|
|
|
(outliner-core/->Block property-block)
|
|
|
{:children? true})
|
|
|
- @txs-state))]
|
|
|
+ @txs-state))
|
|
|
+ pair-id (:db/id (db-property/get-pair-e block property-id))]
|
|
|
(concat
|
|
|
- [[:db/retract (:db/id block) property-id]]
|
|
|
+ (when pair-id
|
|
|
+ [[:db/retractEntity pair-id]])
|
|
|
retract-blocks-tx))))
|
|
|
block-eids)]
|
|
|
(when (seq txs)
|