📚 Add better docstring to group creation internal function.

This commit is contained in:
Andrey Antukh 2021-07-27 12:01:46 +02:00 committed by Andrés Moya
parent bff35de39f
commit 08062e8ce8

View file

@ -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))