feat: returns a deferred promise for logseq.db/transact!

This enables callers to wait for the result.
This commit is contained in:
Tienson Qin
2024-01-10 20:22:28 +08:00
parent bf7f6dc28d
commit 5cad97c617
6 changed files with 71 additions and 48 deletions

View File

@@ -268,40 +268,44 @@
;; :block/uuid might be changed when backspace/delete
;; a block that has been refed
(assoc :block/uuid (:block/uuid block)))
opts' (assoc opts :outliner-op :save-block)]
(let [original-block (db/entity (:db/id block))
original-props (:block/properties original-block)
{:keys [tx-data]}
(ui-outliner-tx/transact!
opts'
(outliner-save-block! block')
;; page properties changed
(when-let [page-name (and (:block/pre-block? block')
(not= original-props (:block/properties block'))
(some-> (:block/page block') :db/id (db-utils/pull) :block/name))]
(state/set-page-properties-changed! page-name)))
[original linked] (when-not (:insert-block? opts)
(let [original-block (some (fn [m] (and (map? m) (:block/link m) m)) tx-data)
link (:block/link original-block)
link' (if (and (map? link) (:db/id link))
(db/entity (:db/id link))
(db/entity link))]
[original-block link']))]
opts' (assoc opts :outliner-op :save-block)
original-block (db/entity (:db/id block))
original-props (:block/properties original-block)]
(p/let [{:keys [tx-data] :as result}
(ui-outliner-tx/transact!
opts'
(outliner-save-block! block')
;; page properties changed
(when-let [page-name (and (:block/pre-block? block')
(not= original-props (:block/properties block'))
(some-> (:block/page block') :db/id (db-utils/pull) :block/name))]
(state/set-page-properties-changed! page-name)))
[original linked] (when-not (:insert-block? opts)
(let [original-block (some (fn [m] (and (map? m) (:block/link m) m)) tx-data)
link (:block/link original-block)
link' (if (and (map? link) (:db/id link))
(db/entity (:db/id link))
(db/entity link))]
[original-block link']))]
;; FIXME move this to pipeline
;; Block has been tagged, so we need to edit the linked page now
(when (and linked
(= (:db/id (state/get-edit-block)) (:db/id original)))
(edit-block! linked :max nil {})))
(edit-block! linked :max nil {}))
;; file based graph only
;; sanitized page name changed
(when-let [title (get-in block' [:block/properties :title])]
(if (string? title)
(when-let [old-page-name (:block/name (db/entity (:db/id (:block/page block'))))]
(when (and (:block/pre-block? block')
(not (string/blank? title))
(not= (util/page-name-sanity-lc title) old-page-name))
(state/pub-event! [:page/title-property-changed old-page-name title true])))
(js/console.error (str "Title is not a string: " title))))))))
;; file based graph only
;; sanitized page name changed
(when-let [title (get-in block' [:block/properties :title])]
(if (string? title)
(when-let [old-page-name (:block/name (db/entity (:db/id (:block/page block'))))]
(when (and (:block/pre-block? block')
(not (string/blank? title))
(not= (util/page-name-sanity-lc title) old-page-name))
(state/pub-event! [:page/title-property-changed old-page-name title true])))
(js/console.error (str "Title is not a string: " title))))
result)))))
;; id: block dom id, "ls-block-counter-uuid"
(defn- another-block-with-same-id-exists?