From 3db9907c251364a59b4afb481e63aed3575f6326 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 30 Nov 2020 13:50:05 +0100 Subject: [PATCH] :sparkles: Prevent leave stream broken on spec failed on commit-changes. --- .../src/app/main/data/workspace/common.cljs | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/frontend/src/app/main/data/workspace/common.cljs b/frontend/src/app/main/data/workspace/common.cljs index eb95f2b9e..f8bc4d499 100644 --- a/frontend/src/app/main/data/workspace/common.cljs +++ b/frontend/src/app/main/data/workspace/common.cljs @@ -67,27 +67,34 @@ :as opts}] (us/verify ::cp/changes changes) ;; (us/verify ::cp/changes undo-changes) - (ptk/reify ::commit-changes - cljs.core/IDeref - (-deref [_] changes) - ptk/UpdateEvent - (update [_ state] - (let [state (update-in state [:workspace-file :data] cp/process-changes changes)] - (cond-> state - commit-local? (update :workspace-data cp/process-changes changes)))) + (let [error (volatile! nil)] + (ptk/reify ::commit-changes + cljs.core/IDeref + (-deref [_] changes) - ptk/WatchEvent - (watch [_ state stream] - (let [page-id (:current-page-id state)] - (rx/concat - (when (some :page-id changes) - (rx/of (update-indices page-id))) + ptk/UpdateEvent + (update [_ state] + (try + (let [state (update-in state [:workspace-file :data] cp/process-changes changes)] + (cond-> state + commit-local? (update :workspace-data cp/process-changes changes))) + (catch :default e + (vreset! error e) + state))) - (when (and save-undo? (seq undo-changes)) - (let [entry {:undo-changes undo-changes - :redo-changes changes}] - (rx/of (append-undo entry)))))))))) + ptk/WatchEvent + (watch [_ state stream] + (when-not @error + (let [page-id (:current-page-id state)] + (rx/concat + (when (some :page-id changes) + (rx/of (update-indices page-id))) + + (when (and save-undo? (seq undo-changes)) + (let [entry {:undo-changes undo-changes + :redo-changes changes}] + (rx/of (append-undo entry)))))))))))) (defn generate-operations ([ma mb] (generate-operations ma mb false))