diff --git a/common/src/app/common/pages/changes.cljc b/common/src/app/common/pages/changes.cljc index c42c3a0a2..85a118acf 100644 --- a/common/src/app/common/pages/changes.cljc +++ b/common/src/app/common/pages/changes.cljc @@ -240,25 +240,28 @@ ;; Changes Processing Impl (defn validate-shapes! - [data objects items] - (letfn [(validate-shape! [[page-id {:keys [id] :as shape}]] - (when-not (= shape (dm/get-in data [:pages-index page-id :objects id])) - ;; If object has changed verify is correct - (dm/verify! (cts/shape? shape))))] + [data-old data-new items] + (letfn [(validate-shape! [[page-id id]] + (let [shape-old (dm/get-in data-old [:pages-index page-id :objects id]) + shape-new (dm/get-in data-new [:pages-index page-id :objects id])] - (let [lookup (d/getf objects)] - (->> (into #{} (map :page-id) items) - (mapcat (fn [page-id] - (filter #(= page-id (:page-id %)) items))) - (mapcat (fn [{:keys [type id page-id] :as item}] - (sequence - (comp (keep lookup) - (map (partial vector page-id))) - (case type - (:add-obj :mod-obj :del-obj) (cons id nil) - (:mov-objects :reg-objects) (:shapes item) - nil)))) - (run! validate-shape!))))) + ;; If object has changed verify is correct + (when (and (some? shape-old) + (some? shape-new) + (not= shape-old shape-new)) + (dm/verify! (cts/shape? shape-new)))))] + + (->> (into #{} (map :page-id) items) + (mapcat (fn [page-id] + (filter #(= page-id (:page-id %)) items))) + (mapcat (fn [{:keys [type id page-id] :as item}] + (sequence + (map (partial vector page-id)) + (case type + (:add-obj :mod-obj :del-obj) (cons id nil) + (:mov-objects :reg-objects) (:shapes item) + nil)))) + (run! validate-shape!)))) (defmulti process-change (fn [_ change] (:type change))) (defmulti process-operation (fn [_ _ op] (:type op)))