diff --git a/common/app/common/pages/changes.cljc b/common/app/common/pages/changes.cljc index 37375b2187..2d8fa5c672 100644 --- a/common/app/common/pages/changes.cljc +++ b/common/app/common/pages/changes.cljc @@ -29,12 +29,18 @@ (defmulti process-operation (fn [_ op] (:type op))) (defn process-changes - [data items] - (->> (us/verify ::spec/changes items) - (reduce #(do - ;; (prn "process-change" (:type %2) (:id %2)) - (or (process-change %1 %2) %1)) - data))) + ([data items] (process-changes data items true)) + ([data items verify?] + ;; When verify? false we spec the schema validation. Currently used to make just + ;; 1 validation even if the changes are applied twice + (when verify? + (us/verify ::spec/changes items)) + + (reduce #(do + #_(prn "process-change" (:type %2) (:id %2)) + (or (process-change %1 %2) %1)) + data + items))) (defmethod process-change :set-option [data {:keys [page-id option value]}] @@ -91,7 +97,7 @@ (let [update-fn (fn [objects] (if-let [obj (get objects id)] (let [result (reduce process-operation obj operations)] - (us/verify ::spec/shape result) + #?(:clj (us/verify ::spec/shape result)) (assoc objects id result)) objects))] (if page-id diff --git a/frontend/src/app/main/data/workspace/common.cljs b/frontend/src/app/main/data/workspace/common.cljs index 50b70d826c..857d27957a 100644 --- a/frontend/src/app/main/data/workspace/common.cljs +++ b/frontend/src/app/main/data/workspace/common.cljs @@ -13,6 +13,7 @@ [app.common.geom.proportions :as gpr] [app.common.geom.shapes :as gsh] [app.common.pages :as cp] + [app.common.pages.spec :as spec] [app.common.spec :as us] [app.common.uuid :as uuid] [app.main.worker :as uw] @@ -93,9 +94,10 @@ [:workspace-data] [:workspace-libraries file-id :data])] (try - (let [state (update-in state path1 cp/process-changes changes)] + (us/verify ::spec/changes changes) + (let [state (update-in state path1 cp/process-changes changes false)] (cond-> state - commit-local? (update-in path2 cp/process-changes changes))) + commit-local? (update-in path2 cp/process-changes changes false))) (catch :default e (vreset! error e) state))))