|
|
@@ -168,26 +168,27 @@
|
|
|
{:graph-uuid graph-uuid})
|
|
|
(throw (ex-info "upload-graph failed" {:upload-resp upload-resp})))))))
|
|
|
|
|
|
-(def page-of-block
|
|
|
- (memoize
|
|
|
- (fn [id->block-map block]
|
|
|
- (when-let [parent-id (:block/parent block)]
|
|
|
- (when-let [parent (id->block-map parent-id)]
|
|
|
- (if (:block/name parent)
|
|
|
- parent
|
|
|
- (page-of-block id->block-map parent)))))))
|
|
|
-
|
|
|
(defn- fill-block-fields
|
|
|
[blocks]
|
|
|
- (let [groups (group-by #(boolean (:block/name %)) blocks)
|
|
|
- other-blocks (set (get groups false))
|
|
|
- id->block (into {} (map (juxt :db/id identity) blocks))
|
|
|
- block-id->page-id (into {} (map (fn [b] [(:db/id b) (:db/id (page-of-block id->block b))]) other-blocks))]
|
|
|
- (mapv (fn [b]
|
|
|
- (if-let [page-id (block-id->page-id (:db/id b))]
|
|
|
- (assoc b :block/page page-id)
|
|
|
- b))
|
|
|
- blocks)))
|
|
|
+ (let [id->block (into {} (map (juxt :db/id identity) blocks))
|
|
|
+ *block->parent-block-cache (atom {})]
|
|
|
+ (letfn [(page-of-block-2 [block]
|
|
|
+ (or
|
|
|
+ (@*block->parent-block-cache block)
|
|
|
+ (when-let [parent-id (:block/parent block)]
|
|
|
+ (when-let [parent (id->block parent-id)]
|
|
|
+ (if (:block/name parent)
|
|
|
+ (do (swap! *block->parent-block-cache assoc block parent)
|
|
|
+ parent)
|
|
|
+ (page-of-block-2 parent))))))]
|
|
|
+ (let [groups (group-by #(boolean (:block/name %)) blocks)
|
|
|
+ other-blocks (set (get groups false))
|
|
|
+ block-id->page-id (into {} (map (fn [b] [(:db/id b) (:db/id (page-of-block-2 b))]) other-blocks))]
|
|
|
+ (mapv (fn [b]
|
|
|
+ (if-let [page-id (block-id->page-id (:db/id b))]
|
|
|
+ (assoc b :block/page page-id)
|
|
|
+ b))
|
|
|
+ blocks)))))
|
|
|
|
|
|
(defn- blocks->card-one-attrs
|
|
|
[blocks]
|