mirror of
https://github.com/penpot/penpot.git
synced 2025-05-25 04:06:12 +02:00
📚 Add better docstring to group creation internal function.
This commit is contained in:
parent
bff35de39f
commit
08062e8ce8
1 changed files with 47 additions and 40 deletions
|
@ -36,8 +36,14 @@
|
||||||
(gsh/setup selrect)
|
(gsh/setup selrect)
|
||||||
(assoc :shapes (mapv :id shapes)))))
|
(assoc :shapes (mapv :id shapes)))))
|
||||||
|
|
||||||
(defn get-empty-groups
|
(defn- get-empty-groups-after-group-creation
|
||||||
"Retrieve emtpy groups after group creation"
|
"An auxiliar function that finds and returns a set of ids that
|
||||||
|
corresponds to groups that should be deleted after a group creation.
|
||||||
|
|
||||||
|
The corner case happens when you selects two (or more) shapes that
|
||||||
|
belongs each one to different groups, and after creating the new
|
||||||
|
group, one (or many) groups can become empty because they have had a
|
||||||
|
single shape which is moved to the created group."
|
||||||
[objects parent-id shapes]
|
[objects parent-id shapes]
|
||||||
(let [ids (cp/clean-loops objects (into #{} (map :id) shapes))
|
(let [ids (cp/clean-loops objects (into #{} (map :id) shapes))
|
||||||
parents (->> ids
|
parents (->> ids
|
||||||
|
@ -72,55 +78,56 @@
|
||||||
|
|
||||||
(defn prepare-create-group
|
(defn prepare-create-group
|
||||||
[objects page-id shapes prefix keep-name]
|
[objects page-id shapes prefix keep-name]
|
||||||
(let [group (make-group shapes prefix keep-name)
|
(let [group (make-group shapes prefix keep-name)
|
||||||
frame-id (:frame-id (first shapes))
|
frame-id (:frame-id (first shapes))
|
||||||
parent-id (:parent-id (first shapes))
|
parent-id (:parent-id (first shapes))
|
||||||
rchanges [{:type :add-obj
|
|
||||||
:id (:id group)
|
|
||||||
:page-id page-id
|
|
||||||
:frame-id frame-id
|
|
||||||
:parent-id parent-id
|
|
||||||
:obj group
|
|
||||||
:index (::index (first shapes))}
|
|
||||||
|
|
||||||
{:type :mov-objects
|
rchanges [{:type :add-obj
|
||||||
:page-id page-id
|
:id (:id group)
|
||||||
:parent-id (:id group)
|
:page-id page-id
|
||||||
:shapes (mapv :id shapes)}]
|
:frame-id frame-id
|
||||||
|
:parent-id parent-id
|
||||||
|
:obj group
|
||||||
|
:index (::index (first shapes))}
|
||||||
|
|
||||||
uchanges (-> (mapv
|
{:type :mov-objects
|
||||||
(fn [obj]
|
:page-id page-id
|
||||||
{:type :mov-objects
|
:parent-id (:id group)
|
||||||
:page-id page-id
|
:shapes (mapv :id shapes)}]
|
||||||
:parent-id (:parent-id obj)
|
|
||||||
:index (::index obj)
|
|
||||||
:shapes [(:id obj)]}) shapes)
|
|
||||||
(conj
|
|
||||||
{:type :del-obj
|
|
||||||
:id (:id group)
|
|
||||||
:page-id page-id}))
|
|
||||||
|
|
||||||
ids-to-delete (get-empty-groups objects parent-id shapes)
|
uchanges (-> (mapv (fn [obj]
|
||||||
|
{:type :mov-objects
|
||||||
|
:page-id page-id
|
||||||
|
:parent-id (:parent-id obj)
|
||||||
|
:index (::index obj)
|
||||||
|
:shapes [(:id obj)]})
|
||||||
|
shapes)
|
||||||
|
(conj {:type :del-obj
|
||||||
|
:id (:id group)
|
||||||
|
:page-id page-id}))
|
||||||
|
|
||||||
|
;; Look at the `get-empty-groups-after-group-creation`
|
||||||
|
;; doctring to understand the real purpuse of this code
|
||||||
|
ids-to-delete (get-empty-groups-after-group-creation objects parent-id shapes)
|
||||||
|
|
||||||
delete-group
|
delete-group
|
||||||
(fn [changes id]
|
(fn [changes id]
|
||||||
(-> changes
|
(conj changes {:type :del-obj
|
||||||
(conj {:type :del-obj
|
:id id
|
||||||
:id id
|
:page-id page-id}))
|
||||||
:page-id page-id})))
|
|
||||||
|
|
||||||
add-deleted-group
|
add-deleted-group
|
||||||
(fn [changes id]
|
(fn [changes id]
|
||||||
(let [obj (-> (get objects id)
|
(let [obj (-> (get objects id)
|
||||||
(d/without-keys [:shapes]))]
|
(dissoc :shapes))]
|
||||||
|
(into [{:type :add-obj
|
||||||
(d/concat [{:type :add-obj
|
:id id
|
||||||
:id id
|
:page-id page-id
|
||||||
:page-id page-id
|
:frame-id (:frame-id obj)
|
||||||
:frame-id (:frame-id obj)
|
:parent-id (:parent-id obj)
|
||||||
:parent-id (:parent-id obj)
|
:obj obj
|
||||||
:obj obj
|
:index (::index obj)}]
|
||||||
:index (::index obj)}] changes)))
|
changes)))
|
||||||
|
|
||||||
rchanges (->> ids-to-delete
|
rchanges (->> ids-to-delete
|
||||||
(reduce delete-group rchanges))
|
(reduce delete-group rchanges))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue