diff --git a/CHANGES.md b/CHANGES.md index ac75ab009..cdfd2d3ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,11 @@ ### :boom: Breaking changes ### :heart: Community contributions by (Thank you!) +## 1.6.3-alpha + +### :bug: Bugs fixed + +- Fix problem with merge and join nodes [#990](https://github.com/penpot/penpot/issues/990) ## 1.6.2-alpha diff --git a/common/src/app/common/pages/changes.cljc b/common/src/app/common/pages/changes.cljc index cc346aac9..e70561981 100644 --- a/common/src/app/common/pages/changes.cljc +++ b/common/src/app/common/pages/changes.cljc @@ -275,7 +275,7 @@ (if (and valid? (seq shapes)) (as-> objects $ ;; Add the new shapes to the parent object. - (update $ parent-id #(add-to-parent % index shapes)) + (d/update-when $ parent-id #(add-to-parent % index shapes)) ;; Update each individual shape link to the new parent (reduce update-parent-id $ shapes) diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index 7609759fa..57e654c43 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -10,24 +10,21 @@ [app.common.geom.point :as gpt] [app.common.geom.shapes :as geom] [app.common.pages :as cp] - [app.common.pages :as cp] [app.common.spec :as us] [app.common.uuid :as uuid] [app.main.data.messages :as dm] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.common :as dwc] + [app.main.data.workspace.groups :as dwg] [app.main.data.workspace.libraries-helpers :as dwlh] [app.main.data.workspace.state-helpers :as wsh] [app.main.repo :as rp] [app.main.store :as st] - [app.main.streams :as ms] - [app.util.color :as color] [app.util.i18n :refer [tr]] [app.util.logging :as log] [app.util.router :as rt] [app.util.time :as dt] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) ;; Change this to :info :debug or :trace to debug this module @@ -263,10 +260,11 @@ page-id (:current-page-id state) objects (wsh/lookup-page-objects state page-id) selected (wsh/lookup-selected state) - selected (cp/clean-loops objects selected)] - (when-not (empty? selected) + selected (cp/clean-loops objects selected) + shapes (dwg/shapes-for-grouping objects selected)] + (when-not (empty? shapes) (let [[group rchanges uchanges] - (dwlh/generate-add-component selected objects page-id file-id)] + (dwlh/generate-add-component shapes objects page-id file-id)] (when-not (empty? rchanges) (rx/of (dch/commit-changes {:redo-changes rchanges :undo-changes uchanges diff --git a/frontend/src/app/main/data/workspace/libraries_helpers.cljs b/frontend/src/app/main/data/workspace/libraries_helpers.cljs index c59050916..738491e7d 100644 --- a/frontend/src/app/main/data/workspace/libraries_helpers.cljs +++ b/frontend/src/app/main/data/workspace/libraries_helpers.cljs @@ -124,10 +124,8 @@ "If there is exactly one id, and it's a group, use it as root. Otherwise, create a group that contains all ids. Then, make a component with it, and link all shapes to their corresponding one in the component." - [ids objects page-id file-id] - (let [shapes (dwg/shapes-for-grouping objects ids) - - [group rchanges uchanges] + [shapes objects page-id file-id] + (let [[group rchanges uchanges] (if (and (= (count shapes) 1) (= (:type (first shapes)) :group)) [(first shapes) [] []] diff --git a/frontend/src/app/main/data/workspace/path/changes.cljs b/frontend/src/app/main/data/workspace/path/changes.cljs index ba409228f..cddf0a849 100644 --- a/frontend/src/app/main/data/workspace/path/changes.cljs +++ b/frontend/src/app/main/data/workspace/path/changes.cljs @@ -90,7 +90,7 @@ id (get-in state [:workspace-local :edition]) old-content (get-in state [:workspace-local :edit-path id :old-content]) shape (get-in state (st/get-path state))] - (if (and (some? old-content) (some? shape)) + (if (and (some? old-content) (some? (:id shape))) (let [[rch uch] (generate-path-changes objects page-id shape old-content (:content shape))] (rx/of (dch/commit-changes {:redo-changes rch :undo-changes uch diff --git a/frontend/src/app/util/path/tools.cljs b/frontend/src/app/util/path/tools.cljs index 4f0110786..870ddab85 100644 --- a/frontend/src/app/util/path/tools.cljs +++ b/frontend/src/app/util/path/tools.cljs @@ -310,7 +310,7 @@ [content points] (let [segments-set (into #{} - (map (fn [[p1 p2 _]] [p1 p2])) + (map (fn [{:keys [start end]}] [start end])) (get-segments content points)) create-line-command (fn [point other] @@ -382,7 +382,7 @@ (defn group-segments [segments] (loop [result [] - [point-a point-b :as segment] (first segments) + {point-a :start point-b :end :as segment} (first segments) segments (rest segments)] (if (nil? segment) diff --git a/frontend/test/app/test_helpers/pages.cljs b/frontend/test/app/test_helpers/pages.cljs index 6fb14c6d1..4ea7265aa 100644 --- a/frontend/test/app/test_helpers/pages.cljs +++ b/frontend/test/app/test_helpers/pages.cljs @@ -82,21 +82,24 @@ ([state label ids] (group-shapes state label ids "Group-")) ([state label ids prefix] (let [page (current-page state) - shapes (dwg/shapes-for-grouping (:objects page) ids) + shapes (dwg/shapes-for-grouping (:objects page) ids)] + (if (empty? shapes) + state + (let [[group rchanges uchanges] + (dwg/prepare-create-group (:objects page) (:id page) shapes prefix true)] - [group rchanges uchanges] - (dwg/prepare-create-group (:objects page) (:id page) shapes prefix true)] - - (swap! idmap assoc label (:id group)) - (update state :workspace-data - cp/process-changes rchanges)))) + (swap! idmap assoc label (:id group)) + (update state :workspace-data + cp/process-changes rchanges)))))) (defn make-component [state label ids] (let [page (current-page state) + objects (wsh/lookup-page-objects state page-id) + shapes (dwg/shapes-for-grouping objects ids) [group rchanges uchanges] - (dwlh/generate-add-component ids + (dwlh/generate-add-component shapes (:objects page) (:id page) current-file-id)]