diff --git a/deps/db/test/logseq/db/sqlite/export_test.cljs b/deps/db/test/logseq/db/sqlite/export_test.cljs index 228949d207..141edcfd4f 100644 --- a/deps/db/test/logseq/db/sqlite/export_test.cljs +++ b/deps/db/test/logseq/db/sqlite/export_test.cljs @@ -34,8 +34,7 @@ :block-id [:block/uuid (:block/uuid export-block)]}) (sqlite-export/build-import @import-conn {:current-block import-block})) ;; _ (cljs.pprint/pprint _txs) - _ (d/transact! import-conn init-tx) - _ (d/transact! import-conn block-props-tx)] + _ (d/transact! import-conn (concat init-tx block-props-tx))] (validate-db @import-conn) (sqlite-export/build-export @import-conn {:export-type :block :block-id (:db/id import-block)}))) @@ -50,8 +49,7 @@ ;; ((fn [x] (cljs.pprint/pprint {:export x}) x)) (sqlite-export/build-import @import-conn {})) ;; _ (cljs.pprint/pprint _txs) - _ (d/transact! import-conn init-tx) - _ (d/transact! import-conn block-props-tx) + _ (d/transact! import-conn (concat init-tx block-props-tx)) _ (validate-db @import-conn) page2 (db-test/find-page-by-title @import-conn page-title)] (sqlite-export/build-export @import-conn {:export-type :page :page-id (:db/id page2)}))) @@ -85,9 +83,7 @@ (-> (sqlite-export/build-export @export-conn {:export-type :graph :graph-options export-options}) (sqlite-export/build-import @import-conn {})) ;; _ (cljs.pprint/pprint _txs) - _ (d/transact! import-conn init-tx) - _ (d/transact! import-conn block-props-tx) - _ (d/transact! import-conn misc-tx) + _ (d/transact! import-conn (concat init-tx block-props-tx misc-tx)) _ (validate-db @import-conn) imported-graph (sqlite-export/build-export @import-conn {:export-type :graph :graph-options export-options})] imported-graph)) @@ -497,8 +493,7 @@ (-> (sqlite-export/build-export @conn {:export-type :graph-ontology}) (sqlite-export/build-import @conn2 {})) ;; _ (cljs.pprint/pprint _txs) - _ (d/transact! conn2 init-tx) - _ (d/transact! conn2 block-props-tx) + _ (d/transact! conn2 (concat init-tx block-props-tx)) _ (validate-db @conn2) imported-ontology (sqlite-export/build-export @conn2 {:export-type :graph-ontology})] @@ -530,8 +525,7 @@ (-> (sqlite-export/build-export @conn {:export-type :view-nodes :rows (get-node-ids @conn)}) (sqlite-export/build-import @conn2 {})) ;; _ (cljs.pprint/pprint _txs) - _ (d/transact! conn2 init-tx) - _ (d/transact! conn2 block-props-tx) + _ (d/transact! conn2 (concat init-tx block-props-tx)) _ (validate-db @conn2) imported-nodes (sqlite-export/build-export @conn2 {:export-type :view-nodes :rows (get-node-ids @conn2)})] @@ -566,8 +560,7 @@ (-> (sqlite-export/build-export @conn {:export-type :selected-nodes :node-ids (get-node-ids @conn)}) (sqlite-export/build-import @conn2 {})) ;; _ (cljs.pprint/pprint _txs) - _ (d/transact! conn2 init-tx) - _ (d/transact! conn2 block-props-tx) + _ (d/transact! conn2 (concat init-tx block-props-tx)) _ (validate-db @conn2) imported-nodes (sqlite-export/build-export @conn2 {:export-type :selected-nodes :node-ids (get-node-ids @conn2)})] @@ -832,8 +825,7 @@ {:keys [init-tx block-props-tx] :as _txs} (sqlite-export/build-import import-data @conn {}) ;; _ (cljs.pprint/pprint _txs) - _ (d/transact! conn init-tx) - _ (d/transact! conn block-props-tx) + _ (d/transact! conn (concat init-tx block-props-tx)) _ (validate-db @conn) expected-pages-and-blocks [{:block/uuid page-uuid diff --git a/deps/outliner/src/logseq/outliner/op.cljs b/deps/outliner/src/logseq/outliner/op.cljs index b5ce00090e..c3a7283e61 100644 --- a/deps/outliner/src/logseq/outliner/op.cljs +++ b/deps/outliner/src/logseq/outliner/op.cljs @@ -1,14 +1,14 @@ (ns logseq.outliner.op "Transact outliner ops" - (:require [clojure.string :as string] + (:require [cljs.pprint :as pprint] + [clojure.string :as string] [datascript.core :as d] [logseq.db :as ldb] + [logseq.db.sqlite.export :as sqlite-export] [logseq.outliner.core :as outliner-core] [logseq.outliner.property :as outliner-property] [logseq.outliner.transaction :as outliner-tx] - [malli.core :as m] - [logseq.db.sqlite.export :as sqlite-export] - [promesa.core :as p])) + [malli.core :as m])) (def ^:private ^:large-vars/data-var op-schema [:multi {:dispatch first} @@ -153,19 +153,16 @@ (reset! *op-handlers handlers)) (defn- import-edn-data - [conn export-map import-options] - (let [{:keys [init-tx block-props-tx misc-tx] :as _txs} (sqlite-export/build-import export-map @conn import-options)] - (cljs.pprint/pprint _txs) + [conn *result export-map import-options] + (let [{:keys [init-tx block-props-tx misc-tx] :as txs} + (try (sqlite-export/build-import export-map @conn import-options) + (catch :default e + (js/console.error "Import EDN error: " e) + (reset! *result {:error "An unexpected error occurred building the import. See the javascript console for details."})))] + (pprint/pprint txs) (let [tx-meta {::sqlite-export/imported-data? true :import-db? true}] - (ldb/transact! conn init-tx tx-meta) - ;; TODO: Add other ldb/transact! - #_(p/do - (ldb/transact! conn init-tx tx-meta) - (when (seq block-props-tx) - (ldb/transact! conn block-props-tx tx-meta)) - (when (seq misc-tx) - (ldb/transact! conn misc-tx tx-meta)))))) + (ldb/transact! conn (vec (concat init-tx block-props-tx misc-tx)) tx-meta)))) (defn ^:large-vars/cleanup-todo apply-ops! [repo conn ops date-formatter opts] @@ -257,7 +254,7 @@ (apply outliner-property/add-existing-values-to-closed-values! conn args) :batch-import-edn - (apply import-edn-data conn args) + (apply import-edn-data conn *result args) :transact (apply ldb/transact! conn args) diff --git a/src/main/frontend/handler/db_based/import.cljs b/src/main/frontend/handler/db_based/import.cljs index 596da200d3..7beefe9f35 100644 --- a/src/main/frontend/handler/db_based/import.cljs +++ b/src/main/frontend/handler/db_based/import.cljs @@ -1,7 +1,6 @@ (ns frontend.handler.db-based.import "Handles DB graph imports" - (:require [cljs.pprint :as pprint] - [clojure.edn :as edn] + (:require [clojure.edn :as edn] [datascript.core :as d] [frontend.config :as config] [frontend.db :as db] @@ -111,38 +110,29 @@ import-block? (::sqlite-export/block export-map) block (when import-block? (if-let [eid (:block-id (first (state/get-editor-args)))] - (db/entity [:block/uuid eid]) + (let [ent (db/entity [:block/uuid eid])] + (if-not (:block/page ent) + {:error "Can't import block into a non-block entity. Please import block elsewhere."} + (merge (select-keys ent [:block/uuid]) + {:block/page (select-keys (:block/page ent) [:block/uuid])}))) (notification/show! "No block found" :warning)))] - (if (= ::invalid-import export-map) - (notification/show! "The submitted EDN data is invalid! Please fix and try again." :warning) - (p/do! - ;; TODO: Error handling? - (ui-outliner-tx/transact! - {:outliner-op :batch-import-edn} - (outliner-op/batch-import-edn! export-map (when block {:current-block block}))) - (shui/dialog-close-all!)) - #_(let [{:keys [init-tx block-props-tx misc-tx error] :as txs} - (safe-build-edn-import export-map (when block {:current-block block}))] - (pprint/pprint txs) - (if error - (notification/show! error :error) - ;; TODO: When not import-block, use metadata that supports undo - (let [tx-meta (if import-block? {:outliner-op :save-block} {::sqlite-export/imported-data? true}) - repo (state/get-current-repo)] - (-> (p/do - (db/transact! repo init-tx tx-meta) - (when (seq block-props-tx) - (db/transact! repo block-props-tx tx-meta)) - (when (seq misc-tx) - (db/transact! repo misc-tx tx-meta)) - (when-not import-block? - (ui-handler/re-render-root!) - (notification/show! "Import successful!" :success))) - (p/catch (fn [e] - (js/console.error "Import EDN error: " e) - (notification/show! "An unexpected error occurred during import. See the javascript console for details." :error)))))) - ;; Also close cmd-k - (shui/dialog-close-all!))))) + (cond (or (= ::invalid-import export-map) (not (map? export-map))) + (notification/show! "The submitted EDN data is invalid! Please fix and try again." :warning) + (:error block) + (do + (notification/show! (:error block) :error) + (shui/dialog-close-all!)) + :else + (p/let [{:keys [error]} + (ui-outliner-tx/transact! + {:outliner-op :batch-import-edn} + (outliner-op/batch-import-edn! export-map (when block {:current-block block})))] + ;; Also close cmd-k + (shui/dialog-close-all!) + (ui-handler/re-render-root!) + (if error + (notification/show! error :error) + (notification/show! "Import successful!" :success)))))) (defn ^:export import-edn-data-dialog "Displays dialog which allows users to paste and import sqlite.build EDN Data" diff --git a/src/main/frontend/undo_redo.cljs b/src/main/frontend/undo_redo.cljs index 2a750b4360..aa28ff3bbd 100644 --- a/src/main/frontend/undo_redo.cljs +++ b/src/main/frontend/undo_redo.cljs @@ -255,7 +255,6 @@ [repo undo?] (if-let [op (not-empty ((if undo? pop-undo-op pop-redo-op) repo))] (let [conn (db/get-db repo false)] - (prn :debug :undo-op op) (cond (= ::ui-state (ffirst op)) (do @@ -287,7 +286,6 @@ {:undo? undo? :editor-cursors editor-cursors :block-content block-content}))] - (prn :debug :reversed-tx-data reversed-tx-data) (when (seq reversed-tx-data) (if util/node-test? (do @@ -333,10 +331,6 @@ (defn gen-undo-ops! [repo {:keys [tx-data tx-meta db-after db-before]}] (let [{:keys [outliner-op]} tx-meta] - #_(prn :gen-undo - (= (:client-id tx-meta) (:client-id @state/state)) - outliner-op - tx-meta) (when (and (= (:client-id tx-meta) (:client-id @state/state)) outliner-op @@ -362,7 +356,6 @@ :retracted-ids retracted-ids}]] (remove nil?) vec)] - ;; (prn :gen-undo op) (push-undo-op repo op))))) (defn listen-db-changes!