From 0e152bb7f9d48d56c4db6af242274abc976e112c Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Mon, 22 May 2023 15:34:01 +0200 Subject: [PATCH] :sparkles: Paste on position in grid --- common/src/app/common/types/shape/layout.cljc | 15 +++++++++++++++ frontend/src/app/main/data/workspace.cljs | 15 +++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/common/src/app/common/types/shape/layout.cljc b/common/src/app/common/types/shape/layout.cljc index 01a390ab0a..6f85b84990 100644 --- a/common/src/app/common/types/shape/layout.cljc +++ b/common/src/app/common/types/shape/layout.cljc @@ -994,3 +994,18 @@ (-> parent (assoc-in [:layout-grid-cells id-from :shapes] (dm/get-in parent [:layout-grid-cells id-to :shapes])) (assoc-in [:layout-grid-cells id-to :shapes] (dm/get-in parent [:layout-grid-cells id-from :shapes])))) + +(defn add-children-to-cell + [frame children objects [row column :as cell]] + (let [;; Temporary remove the children when moving them + frame (-> frame + (update :shapes #(d/removev children %)) + (assign-cells)) + + children (->> children (remove #(layout-absolute? objects %)))] + + (-> frame + (update :shapes d/concat-vec children) + (cond-> (some? cell) + (push-into-cell children row column)) + (assign-cells)))) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 05e11c3be6..acb2bfdd1f 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -14,6 +14,7 @@ [app.common.geom.point :as gpt] [app.common.geom.proportions :as gpp] [app.common.geom.shapes :as gsh] + [app.common.geom.shapes.grid-layout :as gslg] [app.common.logging :as log] [app.common.pages :as cp] [app.common.pages.changes-builder :as pcb] @@ -1806,13 +1807,19 @@ changes (-> (dws/prepare-duplicate-changes all-objects page selected delta it libraries library-data file-id) (pcb/amend-changes (partial process-rchange media-idx)) - (pcb/amend-changes (partial change-add-obj-index paste-objects selected index)) - (cond-> (ctl/grid-layout? all-objects parent-id) - (pcb/update-shapes [parent-id] ctl/assign-cells))) + (pcb/amend-changes (partial change-add-obj-index paste-objects selected index))) ;; Adds a resize-parents operation so the groups are updated. We add all the new objects new-objects-ids (->> changes :redo-changes (filter #(= (:type %) :add-obj)) (mapv :id)) - changes (pcb/resize-parents changes new-objects-ids) + + drop-cell + (when (ctl/grid-layout? all-objects parent-id) + (gslg/get-drop-cell frame-id all-objects mouse-pos)) + + changes + (-> (pcb/resize-parents changes new-objects-ids) + (cond-> (some? drop-cell) + (pcb/update-shapes [parent-id] #(ctl/add-children-to-cell % (into (d/ordered-set) new-objects-ids) all-objects drop-cell)))) selected (->> changes :redo-changes