From 072c724462f41a8608ee2fc78eca5e97d45f3fed Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Mon, 26 Feb 2024 18:54:31 +0100 Subject: [PATCH] :bug: Fix problem with layers loading --- .../main/ui/workspace/sidebar/layer_item.cljs | 3 +- .../app/main/ui/workspace/sidebar/layers.cljs | 34 +++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs b/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs index fe1db4200..12b64b3b3 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs @@ -155,7 +155,8 @@ children])) (mf/defc layer-item - {::mf/wrap-props false} + {::mf/wrap-props false + ::mf/wrap [mf/memo]} [{:keys [index item selected objects sortable? filtered? depth parent-size component-child? highlighted]}] (let [id (:id item) blocked? (:blocked item) diff --git a/frontend/src/app/main/ui/workspace/sidebar/layers.cljs b/frontend/src/app/main/ui/workspace/sidebar/layers.cljs index 76facd48b..eb628fb89 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/layers.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/layers.cljs @@ -24,7 +24,9 @@ [app.util.globals :as globals] [app.util.i18n :as i18n :refer [tr]] [app.util.keyboard :as kbd] + [app.util.object :as obj] [app.util.timers :as ts] + [beicon.v2.core :as rx] [cuerdas.core :as str] [goog.events :as events] [rumext.v2 :as mf]) @@ -34,10 +36,36 @@ ;; level frames and try to avoid rerender frames that are does not ;; affected by the selected set. (mf/defc frame-wrapper - {::mf/wrap-props false - ::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]} + {::mf/wrap-props false} [props] - [:> layer-item props]) + (let [selected (obj/get props "selected") + callback (mf/use-var false) + pending-selected (mf/use-var selected) + current-selected (mf/use-state selected) + + props + (-> props + (obj/clone) + (obj/set! "selected" @current-selected))] + + (mf/use-effect + (mf/deps selected) + (fn [] + ;; Change in selected we schedule a idle-then-raf + ;; following changes will update the pending but not create + ;; a new callbacks + (reset! pending-selected selected) + (when (not @callback) + (reset! + callback + (ts/idle-then-raf + (fn [] + (reset! current-selected @pending-selected) + (reset! callback nil))))) + (fn [] + (when @callback + (rx/dispose! @callback))))) + [:> layer-item props])) (mf/defc layers-tree {::mf/wrap [mf/memo #(mf/throttle % 200)]