fix: add timestamps for whiteboard blocks

pull/7052/head
Tienson Qin 2022-10-18 21:29:48 +08:00
parent 912ee1d7d3
commit c56d0ce55d
3 changed files with 19 additions and 7 deletions

View File

@ -87,6 +87,7 @@
([repo-url tx-data]
(transact! repo-url tx-data nil))
([repo-url tx-data tx-meta]
(frontend.util/pprint tx-data)
(when-not config/publishing?
(let [tx-data (->> (gp-util/remove-nils tx-data)
(remove nil?))]

View File

@ -29,18 +29,25 @@
:block/properties {:ls-type :whiteboard-page
:logseq.tldraw.page (dissoc tldr-data :shapes)}}
(when page-entity (select-keys page-entity [:block/created-at])))
page-block (outliner/block-with-timestamps page-block)
;; todo: use get-paginated-blocks instead?
existing-blocks (model/get-page-blocks-no-cache (state/get-current-repo)
page-name
{:pull-keys '[:db/id
:block/uuid
:block/properties [:ls-type]
:block/created-at
:block/updated-at
{:block/parent [:block/uuid]}]})
id->block (zipmap (map :block/uuid existing-blocks) existing-blocks)
shapes (:shapes tldr-data)
;; we should maintain the order of the shapes in the page
;; bring back/forward is depending on this ordering
blocks (map-indexed (fn [idx shape] (shape->block shape page-name idx)) shapes)
blocks (map-indexed
(fn [idx shape]
(let [block (shape->block shape page-name idx)]
(merge block
(select-keys (id->block (:block/uuid block))
[:block/created-at :block/updated-at])))) shapes)
block-ids (->> shapes
(map (fn [shape] (when (= (:blockType shape) "B")
(uuid (:pageId shape)))))
@ -50,15 +57,17 @@
;; delete blocks when all of the following are false
;; - the block is not in the new blocks list
;; - the block's parent is not in the new block list
;; - the block is not a shape block
;; - the block is not a shape block
delete-blocks (filterv (fn [block]
(not
(or (block-ids (:block/uuid block))
(block-ids (:block/uuid (:block/parent block)))
(not (gp-whiteboard/shape-block? block)))))
existing-blocks)
delete-blocks-tx (mapv (fn [s] [:db/retractEntity (:db/id s)]) delete-blocks)]
(concat [page-block] blocks delete-blocks-tx)))
delete-blocks-tx (mapv (fn [s] [:db/retractEntity (:db/id s)]) delete-blocks)
page-and-blocks (->> (cons page-block blocks)
(map outliner/block-with-timestamps))]
(concat page-and-blocks delete-blocks-tx)))
(defn- get-whiteboard-clj [page-name]
(when (model/page-exists? page-name)
@ -147,7 +156,7 @@
api (.-api app)
point (-> (.getShapeById app source-shape)
(.-bounds)
((fn [bounds] (if bottom?
((fn [bounds] (if bottom?
[(.-minX bounds) (+ 64 (.-maxY bounds))]
[(+ 64 (.-maxX bounds)) (.-minY bounds)]))))
shape (->logseq-portal-shape block-uuid point)]
@ -206,4 +215,4 @@
(defn closest-shape
[target]
(when-let [shape-el (dom/closest target "[data-shape-id]")]
(.getAttribute shape-el "data-shape-id")))
(.getAttribute shape-el "data-shape-id")))

View File

@ -21,6 +21,8 @@
:block/uuid
:block/content
:block/format
:block/created-at
:block/updated-at
{:block/page [:block/uuid]}
{:block/left [:block/uuid]}
{:block/parent [:block/uuid]}])