0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-13 02:28:18 -05:00

🐛 Change to patch-object

This commit is contained in:
alonso.torres 2023-10-06 12:17:25 +02:00
parent 3db04e1e2b
commit caee3160f2
3 changed files with 59 additions and 27 deletions

View file

@ -223,20 +223,6 @@
([data]
(into {} (without-nils) data)))
(defn without-nils-deep
"Given a map remove the `nil` values and when a child map is found
recursively removes them as well."
[data]
(let [data (without-nils
(c/update-vals
data
(fn [value]
(cond-> value
(map? value)
(without-nils-deep)))))]
(when (not-empty? data)
data)))
(defn without-qualified
([]
(remove (comp qualified-keyword? key)))
@ -251,6 +237,36 @@
(persistent! (reduce dissoc! (transient data) keys))
(reduce dissoc data keys)))
(defn patch-object
"Changes is some attributes that need to change in object.
When the attribute is nil it will be removed.
For example
- object: {:a 1 :b {:foo 1 :bar 2} :c 10}
- changes: {:a 2 :b {:foo nil :k 3}}
- result: {:a 2 :b {:bar 2 :k 3} :c 10}
"
([changes]
#(patch-object % changes))
([object changes]
(->> changes
(reduce-kv
(fn [object key value]
(cond
(map? value)
(update object key patch-object value)
(and (nil? value) (record? object))
(assoc object key nil)
(nil? value)
(dissoc object key value)
:else
(assoc object key value)))
object))))
(defn remove-at-index
"Takes a vector and returns a vector with an element in the
specified index removed."

View file

@ -369,7 +369,7 @@
(watch [_ _ _]
(let [undo-id (js/Symbol)]
(rx/of (dwu/start-undo-transaction undo-id)
(dwc/update-shapes ids #(d/deep-merge % changes))
(dwc/update-shapes ids (d/patch-object changes))
(ptk/data-event :layout/update ids)
(dwu/commit-undo-transaction undo-id))))))
@ -553,14 +553,15 @@
parent-ids (->> ids (map #(cph/get-parent-id objects %)))
undo-id (js/Symbol)]
(rx/of (dwu/start-undo-transaction undo-id)
(dwc/update-shapes ids #(d/without-nils-deep (d/deep-merge (or % {}) changes)))
(dwc/update-shapes ids (d/patch-object changes))
(dwc/update-shapes children-ids (partial fix-child-sizing objects changes))
(dwc/update-shapes parent-ids
(fn [parent]
(-> parent
(fix-parent-sizing objects (set ids) changes)
(cond-> (ctl/grid-layout? parent)
(ctl/assign-cells)))))
(dwc/update-shapes
parent-ids
(fn [parent]
(-> parent
(fix-parent-sizing objects (set ids) changes)
(cond-> (ctl/grid-layout? parent)
(ctl/assign-cells)))))
(ptk/data-event :layout/update ids)
(dwu/commit-undo-transaction undo-id))))))
@ -577,11 +578,13 @@
[layout-id]
(fn [shape]
(->> ids
(reduce (fn [shape cell-id]
(-> shape
(d/update-in-when [:layout-grid-cells cell-id]
#(d/without-nils (merge % props)))))
shape))))
(reduce
(fn [shape cell-id]
(d/update-in-when
shape
[:layout-grid-cells cell-id]
d/patch-object props))
shape))))
(ptk/data-event :layout/update [layout-id])
(dwu/commit-undo-transaction undo-id))))))

View file

@ -525,6 +525,7 @@
:on-focus #(do
(dom/select-target %)
(select-paddings true false true false))
:nillable true
:min 0
:value p1}]]
[:div {:class (stl/css :padding-simple)
@ -539,6 +540,7 @@
:on-focus #(do (dom/select-target %)
(select-paddings false true false true))
:on-blur #(select-paddings false false false false)
:nillable true
:min 0
:value p2}]]]
(= padding-type :multiple)
@ -555,6 +557,7 @@
:on-focus #(do (dom/select-target %)
(select-padding :p1))
:on-blur #(select-paddings false false false false)
:nillable true
:min 0
:value (:p1 (:layout-padding values))}]]
@ -569,6 +572,7 @@
:on-focus #(do (dom/select-target %)
(select-padding :p2))
:on-blur #(select-paddings false false false false)
:nillable true
:min 0
:value (:p2 (:layout-padding values))}]]
@ -583,6 +587,7 @@
:on-focus #(do (dom/select-target %)
(select-padding :p3))
:on-blur #(select-paddings false false false false)
:nillable true
:min 0
:value (:p3 (:layout-padding values))}]]
@ -597,6 +602,7 @@
:on-focus #(do (dom/select-target %)
(select-padding :p4))
:on-blur #(select-paddings false false false false)
:nillable true
:min 0
:value (:p4 (:layout-padding values))}]]])]
[:button {:class (stl/css-case :padding-toggle true
@ -618,6 +624,7 @@
:on-focus #(do
(dom/select-target %)
(select-paddings true false true false))
:nillable true
:min 0
:value p1}]]
@ -630,6 +637,7 @@
:on-focus #(do (dom/select-target %)
(select-paddings false true false true))
:on-blur #(select-paddings false false false false)
:nillable true
:min 0
:value p2}]]]
@ -650,6 +658,7 @@
:on-focus #(do (dom/select-target %)
(select-padding num))
:on-blur #(select-paddings false false false false)
:nillable true
:min 0
:value (num (:layout-padding values))}]]])])
@ -691,6 +700,7 @@
:on-blur (fn [_]
(select-gap nil)
(reset! gap-selected? :none))
:nillable true
:min 0
:value (:row-gap gap-value)
:disabled (and (= :nowrap wrap-type) (not is-col?))}]]
@ -710,6 +720,7 @@
:on-blur (fn [_]
(select-gap nil)
(reset! gap-selected? :none))
:nillable true
:min 0
:value (:column-gap gap-value)
:disabled (and (= :nowrap wrap-type) is-col?)}]]]
@ -731,6 +742,7 @@
:on-blur (fn [_]
(select-gap nil)
(reset! gap-selected? :none))
:nillable true
:min 0
:value (:column-gap gap-value)
:disabled (and (= :nowrap wrap-type) is-col?)}]]
@ -749,6 +761,7 @@
:on-blur (fn [_]
(select-gap nil)
(reset! gap-selected? :none))
:nillable true
:min 0
:value (:row-gap gap-value)
:disabled (and (= :nowrap wrap-type) (not is-col?))}]]]])))