From 7d8e43b3d3eb6e2d7e1ca04eae9733dc3062a637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Fri, 6 Oct 2023 14:26:58 +0200 Subject: [PATCH 1/2] :bug: Fix error when converting graphics to components --- frontend/src/app/main/data/workspace.cljs | 51 ++++++++++--------- .../app/main/data/workspace/libraries.cljs | 3 -- .../src/app/main/data/workspace/media.cljs | 4 +- .../src/app/main/data/workspace/shapes.cljs | 5 +- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 94baaaf305..1bd819f806 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -55,6 +55,7 @@ [app.main.data.workspace.layers :as dwly] [app.main.data.workspace.layout :as layout] [app.main.data.workspace.libraries :as dwl] + [app.main.data.workspace.libraries-helpers :as dwlh] [app.main.data.workspace.media :as dwm] [app.main.data.workspace.notifications :as dwn] [app.main.data.workspace.path :as dwdp] @@ -2081,38 +2082,42 @@ [it file-data page [index [media-obj pos]]] (let [process-shapes (fn [[shape children]] - (let [page' (reduce #(ctst/add-shape (:id %2) %2 %1 uuid/zero (:parent-id %2) nil false) - page - (cons shape children)) + (let [changes1 (-> (pcb/empty-changes it) + (pcb/set-save-undo? false) + (pcb/with-page page) + (pcb/with-objects (:objects page)) + (pcb/with-library-data file-data) + (pcb/delete-media (:id media-obj)) + (pcb/add-objects (cons shape children))) - shape' (ctn/get-shape page' (:id shape)) + page' (reduce (fn [page shape] + (ctst/add-shape (:id shape) + shape + page + uuid/zero + uuid/zero + nil + true)) + page + (cons shape children)) - path (cph/merge-path-item (tr "workspace.assets.graphics") (:path media-obj)) + [_ _ changes2] (dwlh/generate-add-component it + [shape] + (:objects page') + (:id page) + (:id file-data) + true + nil + dwsh/prepare-create-artboard-from-selection) - [component-shape component-shapes updated-shapes] - (ctn/make-component-shape shape' (:objects page') (:id file-data) true) - - changes (-> (pcb/empty-changes it) - (pcb/set-save-undo? false) - (pcb/with-page page') - (pcb/with-objects (:objects page')) - (pcb/with-library-data file-data) - (pcb/delete-media (:id media-obj)) - (pcb/add-objects (cons shape children)) - (pcb/add-component (:id component-shape) - path - (:name media-obj) - component-shapes - updated-shapes - (:id shape) - (:id page)))] + changes (pcb/concat-changes changes1 changes2)] (dch/commit-changes changes))) shapes (if (= (:mtype media-obj) "image/svg+xml") (->> (dwm/load-and-parse-svg media-obj) (rx/mapcat (partial dwm/create-shapes-svg (:id file-data) (:objects page) pos))) - (dwm/create-shapes-img pos media-obj))] + (dwm/create-shapes-img pos media-obj :wrapper-type :frame))] (->> (rx/concat (rx/of (update-remove-graphics index)) diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index ebfd1db86a..5a53e33938 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -313,8 +313,6 @@ (ptk/data-event :layout/update parents) (dwt/update-thumbnail file-id page-id (:id root)))))))))) - - (defn add-component "Add a new component to current file library, from the currently selected shapes. This operation is made in two steps, first one for calculate the @@ -330,7 +328,6 @@ components-v2 (features/active-feature? state :components-v2)] (rx/of (add-component2 selected components-v2)))))) - (defn add-multiple-components "Add several new components to current file library, from the currently selected shapes." [] diff --git a/frontend/src/app/main/data/workspace/media.cljs b/frontend/src/app/main/data/workspace/media.cljs index 9bb9898f72..e97f871d2c 100644 --- a/frontend/src/app/main/data/workspace/media.cljs +++ b/frontend/src/app/main/data/workspace/media.cljs @@ -282,9 +282,9 @@ (defn create-shapes-img "Convert a media object that contains a bitmap image into shapes, one shape of type :image and one group that contains it." - [pos {:keys [name width height id mtype] :as media-obj}] + [pos {:keys [name width height id mtype] :as media-obj} & {:keys [wrapper-type] :or {wrapper-type :group}}] (let [group-shape (cts/setup-shape - {:type :group + {:type wrapper-type :x (:x pos) :y (:y pos) :width width diff --git a/frontend/src/app/main/data/workspace/shapes.cljs b/frontend/src/app/main/data/workspace/shapes.cljs index 5635483f63..f1e65650f3 100644 --- a/frontend/src/app/main/data/workspace/shapes.cljs +++ b/frontend/src/app/main/data/workspace/shapes.cljs @@ -100,7 +100,7 @@ parent-id (get-in objects [frame-id :parent-id]) ordered-indexes (->> ordered-indexes (remove #(= % parent-id))) to-move-shapes (map (d/getf objects) ordered-indexes)] - (when (d/not-empty? to-move-shapes) + (if (d/not-empty? to-move-shapes) (-> changes (cond-> (not (ctl/any-layout? objects frame-id)) (pcb/update-shapes ordered-indexes ctl/remove-layout-item-data)) @@ -108,7 +108,8 @@ (pcb/change-parent frame-id to-move-shapes 0) (cond-> (ctl/grid-layout? objects frame-id) (pcb/update-shapes [frame-id] ctl/assign-cells)) - (pcb/reorder-grid-children [frame-id]))))) + (pcb/reorder-grid-children [frame-id])) + changes))) (defn move-shapes-into-frame [frame-id shapes] From f140ec454136233cc1153fd581cc4cd75eee542a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Fri, 6 Oct 2023 17:27:58 +0200 Subject: [PATCH 2/2] :bug: Fix incorrect main instance creation on migration to v2 --- common/src/app/common/types/container.cljc | 28 +++++++++++----------- common/src/app/common/types/file.cljc | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/common/src/app/common/types/container.cljc b/common/src/app/common/types/container.cljc index 35ff81f06b..8167a1d114 100644 --- a/common/src/app/common/types/container.cljc +++ b/common/src/app/common/types/container.cljc @@ -271,9 +271,10 @@ update-new-shape (fn [new-shape original-shape] (let [new-name (:name new-shape) - main-instance? (and main-instance? (ctk/instance-root? new-shape))] ; Only the instance root can be a main instance + root? (or (ctk/instance-root? original-shape) ; If shape is inside a component (not components-v2) + (nil? (:parent-id original-shape)))] ; we detect it by having no parent) - (when (nil? (:parent-id original-shape)) + (when root? (vswap! unames conj new-name)) (vswap! ids-map assoc (:id original-shape) (:id new-shape)) @@ -283,12 +284,15 @@ (-> (gsh/move delta) (dissoc :touched)) - main-instance? + (and main-instance? root?) (assoc :main-instance true) (not main-instance?) (dissoc :main-instance) + main-instance? + (dissoc :shape-ref) + (and (not main-instance?) (or components-v2 ; In v1, shape-ref points to the remote instance (nil? (:shape-ref original-shape)))) ; in v2, shape-ref points to the near instance @@ -300,21 +304,17 @@ :component-root true :name new-name) - (and (nil? (:parent-id original-shape)) main-instance? components-v2) - (assoc :main-instance true) - (some? (:parent-id original-shape)) (dissoc :component-root)))) [new-shape new-shapes _] - (ctst/clone-object - component-shape - nil - (if components-v2 (:objects component-page) (:objects component)) - update-new-shape - (fn [object _] object) - force-id - keep-ids?) + (ctst/clone-object component-shape + nil + (if components-v2 (:objects component-page) (:objects component)) + update-new-shape + (fn [object _] object) + force-id + keep-ids?) ;; If frame-id points to a shape inside the component, remap it to the ;; corresponding new frame shape. If not, set it to the destination frame. diff --git a/common/src/app/common/types/file.cljc b/common/src/app/common/types/file.cljc index 474067d685..bea5cd0242 100644 --- a/common/src/app/common/types/file.cljc +++ b/common/src/app/common/types/file.cljc @@ -394,7 +394,7 @@ file-data position false - {:main-instance true + {:main-instance? true :force-frame-id uuid/zero :keep-ids? true}) add-shapes