Преглед изворни кода

fix(rtc): remove usage of memoize in page-of-block

rcmerci пре 4 месеци
родитељ
комит
3ffb5968cb
1 измењених фајлова са 19 додато и 18 уклоњено
  1. 19 18
      src/main/frontend/worker/rtc/full_upload_download_graph.cljs

+ 19 - 18
src/main/frontend/worker/rtc/full_upload_download_graph.cljs

@@ -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]