Merge remote-tracking branch 'origin/staging' into develop

This commit is contained in:
Andrey Antukh 2024-02-28 11:25:36 +01:00
commit 617edbebec
2 changed files with 17 additions and 29 deletions

View file

@ -155,14 +155,13 @@
children])) children]))
(mf/defc layer-item (mf/defc layer-item
{::mf/wrap-props false {::mf/props :obj
::mf/wrap [mf/memo]} ::mf/memo true}
[{:keys [index item selected objects sortable? filtered? depth parent-size component-child? highlighted]}] [{:keys [index item selected objects sortable? filtered? depth parent-size component-child? highlighted]}]
(let [id (:id item) (let [id (:id item)
blocked? (:blocked item) blocked? (:blocked item)
hidden? (:hidden item) hidden? (:hidden item)
drag-disabled* (mf/use-state false) drag-disabled* (mf/use-state false)
drag-disabled? (deref drag-disabled*) drag-disabled? (deref drag-disabled*)

View file

@ -24,7 +24,6 @@
[app.util.globals :as globals] [app.util.globals :as globals]
[app.util.i18n :as i18n :refer [tr]] [app.util.i18n :as i18n :refer [tr]]
[app.util.keyboard :as kbd] [app.util.keyboard :as kbd]
[app.util.object :as obj]
[app.util.timers :as ts] [app.util.timers :as ts]
[beicon.v2.core :as rx] [beicon.v2.core :as rx]
[cuerdas.core :as str] [cuerdas.core :as str]
@ -36,35 +35,25 @@
;; level frames and try to avoid rerender frames that are does not ;; level frames and try to avoid rerender frames that are does not
;; affected by the selected set. ;; affected by the selected set.
(mf/defc frame-wrapper (mf/defc frame-wrapper
{::mf/wrap-props false} {::mf/props :obj}
[props] [{:keys [selected] :as props}]
(let [selected (obj/get props "selected") (let [disposable (mf/use-var nil)
callback (mf/use-var false)
pending-selected (mf/use-var selected) pending-selected (mf/use-var selected)
current-selected (mf/use-state selected) current-selected (mf/use-state selected)
props (mf/spread props :selected @current-selected)]
props (mf/with-effect [selected]
(-> props (reset! pending-selected selected)
(obj/clone) (swap! disposable (fn [value]
(obj/set! "selected" @current-selected))] (when (some? value)
(rx/dispose! value))
(ts/idle-then-raf
(fn []
(reset! current-selected @pending-selected)
(reset! disposable nil)))))
(fn []
(some-> @disposable rx/dispose!)))
(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])) [:> layer-item props]))
(mf/defc layers-tree (mf/defc layers-tree