mirror of
https://github.com/penpot/penpot.git
synced 2025-05-12 05:26:37 +02:00
✨ Fix extensibility and naming of workspace shape fixer
This commit is contained in:
parent
c7f9774524
commit
a097ed29a9
4 changed files with 20 additions and 13 deletions
|
@ -97,6 +97,7 @@
|
||||||
[:map {:title "FixObjChange"}
|
[:map {:title "FixObjChange"}
|
||||||
[:type [:= :fix-obj]]
|
[:type [:= :fix-obj]]
|
||||||
[:id ::sm/uuid]
|
[:id ::sm/uuid]
|
||||||
|
[:fix {:optional true} :keyword]
|
||||||
[:page-id {:optional true} ::sm/uuid]
|
[:page-id {:optional true} ::sm/uuid]
|
||||||
[:component-id {:optional true} ::sm/uuid]]]
|
[:component-id {:optional true} ::sm/uuid]]]
|
||||||
|
|
||||||
|
@ -402,10 +403,16 @@
|
||||||
(d/update-in-when data [:components component-id] ctst/delete-shape id ignore-touched)))
|
(d/update-in-when data [:components component-id] ctst/delete-shape id ignore-touched)))
|
||||||
|
|
||||||
(defmethod process-change :fix-obj
|
(defmethod process-change :fix-obj
|
||||||
[data {:keys [page-id component-id] :as params}]
|
[data {:keys [page-id component-id id] :as params}]
|
||||||
(if page-id
|
(letfn [(fix-container [container]
|
||||||
(d/update-in-when data [:pages-index page-id] ctst/fix-shape-children params)
|
(case (:fix params :broken-children)
|
||||||
(d/update-in-when data [:components component-id] ctst/fix-shape-children params)))
|
:broken-children (ctst/fix-broken-children container id)
|
||||||
|
(ex/raise :type :internal
|
||||||
|
:code :fix-not-implemented
|
||||||
|
:fix (:fix params))))]
|
||||||
|
(if page-id
|
||||||
|
(d/update-in-when data [:pages-index page-id] fix-container)
|
||||||
|
(d/update-in-when data [:components component-id] fix-container))))
|
||||||
|
|
||||||
;; FIXME: remove, seems like this method is already unused
|
;; FIXME: remove, seems like this method is already unused
|
||||||
;; reg-objects operation "regenerates" the geometry and selrect of the parent groups
|
;; reg-objects operation "regenerates" the geometry and selrect of the parent groups
|
||||||
|
|
|
@ -99,10 +99,10 @@
|
||||||
|
|
||||||
(update container :objects delete-from-objects))))
|
(update container :objects delete-from-objects))))
|
||||||
|
|
||||||
(defn fix-shape-children
|
(defn fix-broken-children
|
||||||
"Checks and fix the children relations of the shape. If a children does not
|
"Checks and fix the children relations of the shape. If a children does not
|
||||||
exists on the objects tree, it will be removed from shape."
|
exists on the objects tree, it will be removed from shape."
|
||||||
[{:keys [objects] :as container} {:keys [id] :as params}]
|
[{:keys [objects] :as container} id]
|
||||||
(let [contains? (partial contains? objects)]
|
(let [contains? (partial contains? objects)]
|
||||||
(d/update-in-when container [:objects id :shapes]
|
(d/update-in-when container [:objects id :shapes]
|
||||||
(fn [shapes]
|
(fn [shapes]
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
[app.main.data.workspace.drawing.common :as dwdc]
|
[app.main.data.workspace.drawing.common :as dwdc]
|
||||||
[app.main.data.workspace.edition :as dwe]
|
[app.main.data.workspace.edition :as dwe]
|
||||||
[app.main.data.workspace.fix-bool-contents :as fbc]
|
[app.main.data.workspace.fix-bool-contents :as fbc]
|
||||||
[app.main.data.workspace.fix-broken-shape-links :as fbs]
|
[app.main.data.workspace.fix-broken-shapes :as fbs]
|
||||||
[app.main.data.workspace.fix-deleted-fonts :as fdf]
|
[app.main.data.workspace.fix-deleted-fonts :as fdf]
|
||||||
[app.main.data.workspace.groups :as dwg]
|
[app.main.data.workspace.groups :as dwg]
|
||||||
[app.main.data.workspace.guides :as dwgu]
|
[app.main.data.workspace.guides :as dwgu]
|
||||||
|
|
|
@ -4,15 +4,15 @@
|
||||||
;;
|
;;
|
||||||
;; Copyright (c) KALEIDOS INC
|
;; Copyright (c) KALEIDOS INC
|
||||||
|
|
||||||
(ns app.main.data.workspace.fix-broken-shape-links
|
(ns app.main.data.workspace.fix-broken-shapes
|
||||||
(:require
|
(:require
|
||||||
[app.main.data.workspace.changes :as dch]
|
[app.main.data.workspace.changes :as dch]
|
||||||
[beicon.core :as rx]
|
[beicon.core :as rx]
|
||||||
[potok.core :as ptk]))
|
[potok.core :as ptk]))
|
||||||
|
|
||||||
(defn- generate-changes
|
(defn- generate-broken-link-changes
|
||||||
[attr {:keys [objects id] :as container}]
|
[attr {:keys [objects id] :as container}]
|
||||||
(let [base {:type :fix-obj attr id}
|
(let [base {:type :fix-obj :fix :broken-children attr id}
|
||||||
contains? (partial contains? objects)
|
contains? (partial contains? objects)
|
||||||
xform (comp
|
xform (comp
|
||||||
;; FIXME: Ensure all obj have id field (this is needed
|
;; FIXME: Ensure all obj have id field (this is needed
|
||||||
|
@ -36,14 +36,14 @@
|
||||||
|
|
||||||
(defn fix-broken-shapes
|
(defn fix-broken-shapes
|
||||||
[]
|
[]
|
||||||
(ptk/reify ::fix-broken-shape-links
|
(ptk/reify ::fix-broken-shapes
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [it state _]
|
(watch [it state _]
|
||||||
(let [data (get state :workspace-data)
|
(let [data (get state :workspace-data)
|
||||||
changes (concat
|
changes (concat
|
||||||
(mapcat (partial generate-changes :page-id)
|
(mapcat (partial generate-broken-link-changes :page-id)
|
||||||
(vals (:pages-index data)))
|
(vals (:pages-index data)))
|
||||||
(mapcat (partial generate-changes :component-id)
|
(mapcat (partial generate-broken-link-changes :component-id)
|
||||||
(vals (:components data))))]
|
(vals (:components data))))]
|
||||||
|
|
||||||
(if (seq changes)
|
(if (seq changes)
|
Loading…
Add table
Add a link
Reference in a new issue