From d3c9bf1e761631ede6d2f3b651e128356001bb31 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Wed, 6 Sep 2023 14:48:10 +0200 Subject: [PATCH] :sparkles: Move common code on shape props checking to shapes/common ns --- .../src/app/main/ui/workspace/shapes.cljs | 7 +----- .../app/main/ui/workspace/shapes/common.cljs | 19 ++++++++++++++- .../app/main/ui/workspace/shapes/frame.cljs | 23 +++---------------- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/shapes.cljs b/frontend/src/app/main/ui/workspace/shapes.cljs index af0218c30f..39771cfd36 100644 --- a/frontend/src/app/main/ui/workspace/shapes.cljs +++ b/frontend/src/app/main/ui/workspace/shapes.cljs @@ -77,13 +77,8 @@ :thumbnail? (not (contains? active-frames (dm/get-prop shape :id)))}] [:& shape-wrapper {:shape shape}])])]]])) -(defn- check-shape-wrapper-props - [np op] - (frame/check-shape (unchecked-get np "shape") - (unchecked-get op "shape"))) - (mf/defc shape-wrapper - {::mf/wrap [#(mf/memo' % check-shape-wrapper-props)] + {::mf/wrap [#(mf/memo' % common/check-shape-props)] ::mf/wrap-props false} [props] (let [shape (unchecked-get props "shape") diff --git a/frontend/src/app/main/ui/workspace/shapes/common.cljs b/frontend/src/app/main/ui/workspace/shapes/common.cljs index cccc1cb7ef..c407b8db8f 100644 --- a/frontend/src/app/main/ui/workspace/shapes/common.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/common.cljs @@ -6,13 +6,30 @@ (ns app.main.ui.workspace.shapes.common (:require + [app.common.record :as cr] [app.main.ui.shapes.shape :refer [shape-container]] [rumext.v2 :as mf])) +(def ^:private excluded-attrs + #{:blocked + :hide-fill-on-export + :collapsed + :remote-synced + :exports}) + +(defn check-shape + [new-shape old-shape] + (cr/-equiv-with-exceptions old-shape new-shape excluded-attrs)) + +(defn check-shape-props + [np op] + (check-shape (unchecked-get np "shape") + (unchecked-get op "shape"))) + (defn generic-wrapper-factory [component] (mf/fnc generic-wrapper - {::mf/wrap [#(mf/memo' % (mf/check-props ["shape"]))] + {::mf/wrap [#(mf/memo' % check-shape-props)] ::mf/wrap-props false} [props] (let [shape (unchecked-get props "shape")] diff --git a/frontend/src/app/main/ui/workspace/shapes/frame.cljs b/frontend/src/app/main/ui/workspace/shapes/frame.cljs index 95767bca38..0fc57d3e60 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame.cljs @@ -9,7 +9,6 @@ [app.common.data :as d] [app.common.data.macros :as dm] [app.common.pages.helpers :as cph] - [app.common.record :as cr] [app.main.data.workspace.state-helpers :as wsh] [app.main.data.workspace.thumbnails :as dwt] [app.main.refs :as refs] @@ -20,33 +19,18 @@ [app.main.ui.shapes.frame :as frame] [app.main.ui.shapes.shape :refer [shape-container]] [app.main.ui.shapes.text.fontfaces :as ff] + [app.main.ui.workspace.shapes.common :refer [check-shape-props]] [app.main.ui.workspace.shapes.frame.dynamic-modifiers :as fdm] [app.main.ui.workspace.shapes.frame.node-store :as fns] [app.main.ui.workspace.shapes.frame.thumbnail-render :as ftr] [beicon.core :as rx] [rumext.v2 :as mf])) -(def ^:private excluded-attrs - #{:blocked - :hide-fill-on-export - :collapsed - :remote-synced - :exports}) - -(defn check-shape - [new-shape old-shape] - (cr/-equiv-with-exceptions old-shape new-shape excluded-attrs)) - -(defn check-frame-props - [np op] - (check-shape (unchecked-get np "shape") - (unchecked-get op "shape"))) - (defn frame-shape-factory [shape-wrapper] (let [frame-shape (frame/frame-shape shape-wrapper)] (mf/fnc frame-shape-inner - {::mf/wrap [#(mf/memo' % check-frame-props)] + {::mf/wrap [#(mf/memo' % check-shape-props)] ::mf/wrap-props false ::mf/forward-ref true} [props ref] @@ -66,8 +50,7 @@ [new-props old-props] (and (= (unchecked-get new-props "thumbnail?") (unchecked-get old-props "thumbnail?")) - (check-shape (unchecked-get new-props "shape") - (unchecked-get old-props "shape")))) + (check-shape-props new-props old-props))) (defn nested-frame-wrapper-factory [shape-wrapper]