mirror of
https://github.com/penpot/penpot.git
synced 2025-05-30 13:46:12 +02:00
🐛 Fix variants override for nested components (#6421)
This commit is contained in:
parent
a558bfdb2f
commit
294ce7bb1b
3 changed files with 10 additions and 15 deletions
|
@ -1757,18 +1757,18 @@
|
||||||
(let [attr-group (get ctk/sync-attrs attr)
|
(let [attr-group (get ctk/sync-attrs attr)
|
||||||
[roperations' uoperations']
|
[roperations' uoperations']
|
||||||
(if (or
|
(if (or
|
||||||
;; If the attribute is not valid for the destiny, don't copy it
|
;; If the attribute is not valid for the destiny, don't copy it
|
||||||
(not (cts/is-allowed-attr? attr (:type dest-shape)))
|
(not (cts/is-allowed-attr? attr (:type dest-shape)))
|
||||||
;; If the values are already equal, don't copy it
|
;; If the values are already equal, don't copy it
|
||||||
(= (get origin-shape attr) (get dest-shape attr))
|
(= (get origin-shape attr) (get dest-shape attr))
|
||||||
;; If the referenced shape on the original component doesn't have the same value, don't copy it
|
;; If the referenced shape on the original component doesn't have the same value, don't copy it
|
||||||
;; Exceptions: :points :selrect and :content can be different
|
;; Exceptions: :points :selrect and :content can be different
|
||||||
(and
|
(and
|
||||||
(not (contains? #{:points :selrect :content} attr))
|
(not (contains? #{:points :selrect :content} attr))
|
||||||
(not= (get origin-ref-shape attr) (get dest-shape attr)))
|
(not= (get origin-ref-shape attr) (get dest-shape attr)))
|
||||||
;; The :content attr cant't be copied to elements of different type
|
;; The :content attr cant't be copied to elements of different type
|
||||||
(and (= attr :content) (not= (:type origin-shape) (:type dest-shape)))
|
(and (= attr :content) (not= (:type origin-shape) (:type dest-shape)))
|
||||||
;; If the attr is not touched in the origin shape, don't copy it
|
;; If the attr is not touched in the origin shape, don't copy it
|
||||||
(not (touched-origin attr-group)))
|
(not (touched-origin attr-group)))
|
||||||
[roperations uoperations]
|
[roperations uoperations]
|
||||||
(add-update-attr-operations attr dest-shape origin-shape roperations uoperations touched))]
|
(add-update-attr-operations attr dest-shape origin-shape roperations uoperations touched))]
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
[app.common.files.variant :as cfv]
|
[app.common.files.variant :as cfv]
|
||||||
[app.common.logic.libraries :as cll]
|
[app.common.logic.libraries :as cll]
|
||||||
[app.common.logic.variant-properties :as clvp]
|
[app.common.logic.variant-properties :as clvp]
|
||||||
[app.common.types.components-list :as ctcl]
|
|
||||||
[app.common.types.container :as ctn]
|
[app.common.types.container :as ctn]
|
||||||
[app.common.types.file :as ctf]
|
[app.common.types.file :as ctf]
|
||||||
[app.common.types.variant :as ctv]))
|
[app.common.types.variant :as ctv]))
|
||||||
|
@ -48,12 +47,8 @@
|
||||||
(pcb/change-parent (:parent-id shape) [new-shape] 0))))
|
(pcb/change-parent (:parent-id shape) [new-shape] 0))))
|
||||||
|
|
||||||
(defn generate-keep-touched
|
(defn generate-keep-touched
|
||||||
[changes new-shape original-shape original-shapes page]
|
[changes new-shape original-shape original-shapes page libraries]
|
||||||
(let [data (pcb/get-library-data changes)
|
(let [objects (pcb/get-objects changes)
|
||||||
objects (pcb/get-objects changes)
|
|
||||||
|
|
||||||
orig-comp (ctcl/get-component data (:component-id original-shape) true)
|
|
||||||
|
|
||||||
new-path-map (into {}
|
new-path-map (into {}
|
||||||
(map (fn [shape] {(generate-path "" objects (:id new-shape) shape) shape}))
|
(map (fn [shape] {(generate-path "" objects (:id new-shape) shape) shape}))
|
||||||
(cfh/get-children-with-self objects (:id new-shape)))
|
(cfh/get-children-with-self objects (:id new-shape)))
|
||||||
|
@ -65,7 +60,7 @@
|
||||||
(fn [changes touched-shape]
|
(fn [changes touched-shape]
|
||||||
(let [path (generate-path "" orig-objects (:id original-shape) touched-shape)
|
(let [path (generate-path "" orig-objects (:id original-shape) touched-shape)
|
||||||
related-shape (get new-path-map path)
|
related-shape (get new-path-map path)
|
||||||
orig-ref-shape (ctf/get-ref-shape data orig-comp touched-shape)]
|
orig-ref-shape (ctf/find-ref-shape nil container libraries touched-shape)]
|
||||||
(if related-shape
|
(if related-shape
|
||||||
(cll/update-attrs-on-switch
|
(cll/update-attrs-on-switch
|
||||||
changes related-shape touched-shape new-shape original-shape orig-ref-shape container)
|
changes related-shape touched-shape new-shape original-shape orig-ref-shape container)
|
||||||
|
|
|
@ -1013,7 +1013,7 @@
|
||||||
(cll/generate-component-swap objects shape ldata page libraries id-new-component index target-cell keep-props-values))
|
(cll/generate-component-swap objects shape ldata page libraries id-new-component index target-cell keep-props-values))
|
||||||
|
|
||||||
changes (if keep-touched?
|
changes (if keep-touched?
|
||||||
(clv/generate-keep-touched changes new-shape shape orig-shapes page)
|
(clv/generate-keep-touched changes new-shape shape orig-shapes page libraries)
|
||||||
changes)]
|
changes)]
|
||||||
|
|
||||||
(rx/of
|
(rx/of
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue