diff --git a/src/main/frontend/db/react.cljs b/src/main/frontend/db/react.cljs index 632d3aecf3..ff532cb2aa 100644 --- a/src/main/frontend/db/react.cljs +++ b/src/main/frontend/db/react.cljs @@ -283,46 +283,42 @@ [repo-url tx-data {:keys [key data files-db?] :as handler-opts :or {files-db? false}}] (when-not config/publishing? - (try - (let [repo-url (or repo-url (state/get-current-repo)) - tx-data (->> (util/remove-nils tx-data) - (remove nil?)) - get-conn (fn [] (if files-db? - (conn/get-files-conn repo-url) - (conn/get-conn repo-url false)))] - (when (and (seq tx-data) (get-conn)) - (let [tx-result (d/transact! (get-conn) (vec tx-data)) - db (:db-after tx-result) - handler-keys (get-handler-keys handler-opts)] - (doseq [handler-key handler-keys] - (let [handler-key (vec (cons repo-url handler-key))] - (when-let [cache (get @query-state handler-key)] - (let [{:keys [query inputs transform-fn query-fn inputs-fn]} cache] - (when (or query query-fn) - (let [new-result (-> - (cond - query-fn - (profile - "Query:" - (doall (query-fn db))) + (let [repo-url (or repo-url (state/get-current-repo)) + tx-data (->> (util/remove-nils tx-data) + (remove nil?)) + get-conn (fn [] (if files-db? + (conn/get-files-conn repo-url) + (conn/get-conn repo-url false)))] + (when (and (seq tx-data) (get-conn)) + (let [tx-result (d/transact! (get-conn) (vec tx-data)) + db (:db-after tx-result) + handler-keys (get-handler-keys handler-opts)] + (doseq [handler-key handler-keys] + (let [handler-key (vec (cons repo-url handler-key))] + (when-let [cache (get @query-state handler-key)] + (let [{:keys [query inputs transform-fn query-fn inputs-fn]} cache] + (when (or query query-fn) + (let [new-result (-> + (cond + query-fn + (profile + "Query:" + (doall (query-fn db))) - inputs-fn - (let [inputs (inputs-fn)] - (apply d/q query db inputs)) + inputs-fn + (let [inputs (inputs-fn)] + (apply d/q query db inputs)) - (keyword? query) - (db-utils/get-key-value repo-url query) + (keyword? query) + (db-utils/get-key-value repo-url query) - (seq inputs) - (apply d/q query db inputs) + (seq inputs) + (apply d/q query db inputs) - :else - (d/q query db)) - transform-fn)] - (set-new-result! handler-key new-result)))))))))) - (catch js/Error e - ;; FIXME: check error type and notice user - (log/error :db/transact! e))))) + :else + (d/q query db)) + transform-fn)] + (set-new-result! handler-key new-result)))))))))))) (defn set-key-value [repo-url key value] diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 1bc7210993..222b333750 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -2017,16 +2017,14 @@ file-content (db/get-file file-path) new-content (utf8/insert! file-content start-pos old-end-pos (apply str (map :block/content blocks))) blocks (map (fn [b] (dissoc b :block/children)) blocks)] - (profile - "Indent/outdent: " - (repo-handler/transact-react-and-alter-file! - repo - (concat - blocks - after-blocks) - {:key :block/change - :data (map (fn [block] (assoc block :block/page page)) blocks)} - [[file-path new-content]]))) + (repo-handler/transact-react-and-alter-file! + repo + (concat + blocks + after-blocks) + {:key :block/change + :data (map (fn [block] (assoc block :block/page page)) blocks)} + [[file-path new-content]])) (gdom/getElement "date-time-picker") nil diff --git a/src/main/frontend/handler/repo.cljs b/src/main/frontend/handler/repo.cljs index 91b8a30fbd..98aea7ad85 100644 --- a/src/main/frontend/handler/repo.cljs +++ b/src/main/frontend/handler/repo.cljs @@ -369,17 +369,23 @@ :idx idx :container (gobj/get container "id")}))) - (when (seq files) - (file-handler/alter-files repo files opts)) + ;; try catch so that if db transaction failed, it'll not write to the files + (try + (do + (db/transact-react! + repo + tx + transact-option) - (db/transact-react! - repo - tx - transact-option) - (when (seq pages) - (let [children-tx (mapcat #(rebuild-page-blocks-children repo %) pages)] - (when (seq children-tx) - (db/transact! repo children-tx))))))) + (when (seq pages) + (let [children-tx (mapcat #(rebuild-page-blocks-children repo %) pages)] + (when (seq children-tx) + (db/transact! repo children-tx)))) + + (when (seq files) + (file-handler/alter-files repo files opts))) + (catch js/Error e + (log/error :transact-react/failed e)))))) (declare push)