export.cljs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. (ns frontend.handler.db-based.export
  2. "Handles DB graph exports and imports across graphs"
  3. (:require [cljs.pprint :as pprint]
  4. [clojure.string :as string]
  5. [frontend.config :as config]
  6. [frontend.handler.notification :as notification]
  7. [frontend.state :as state]
  8. [frontend.util :as util]
  9. [frontend.util.page :as page-util]
  10. [goog.dom :as gdom]
  11. [promesa.core :as p]))
  12. (defn ^:export export-block-data []
  13. ;; Use editor state to locate most recent block
  14. (if-let [block-uuid (:block-id (first (state/get-editor-args)))]
  15. (p/let [result (state/<invoke-db-worker :thread-api/export-edn
  16. (state/get-current-repo)
  17. {:export-type :block :block-id [:block/uuid block-uuid]})
  18. pull-data (with-out-str (pprint/pprint result))]
  19. (when-not (:export-edn-error result)
  20. (.writeText js/navigator.clipboard pull-data)
  21. (println pull-data)
  22. (notification/show! "Copied block's data!" :success)))
  23. (notification/show! "No block found" :warning)))
  24. (defn export-view-nodes-data [rows {:keys [group-by?]}]
  25. (p/let [result (state/<invoke-db-worker :thread-api/export-edn
  26. (state/get-current-repo)
  27. {:export-type :view-nodes
  28. :rows rows
  29. :group-by? group-by?})
  30. pull-data (with-out-str (pprint/pprint result))]
  31. (when-not (:export-edn-error result)
  32. (.writeText js/navigator.clipboard pull-data)
  33. (println pull-data)
  34. (notification/show! "Copied view nodes' data!" :success))))
  35. (defn ^:export export-page-data []
  36. (if-let [page-id (page-util/get-current-page-id)]
  37. (p/let [result (state/<invoke-db-worker :thread-api/export-edn
  38. (state/get-current-repo)
  39. {:export-type :page :page-id page-id})
  40. pull-data (with-out-str (pprint/pprint result))]
  41. (when-not (:export-edn-error result)
  42. (.writeText js/navigator.clipboard pull-data)
  43. (println pull-data)
  44. (notification/show! "Copied page's data!" :success)))
  45. (notification/show! "No page found" :warning)))
  46. (defn ^:export export-graph-ontology-data []
  47. (p/let [result (state/<invoke-db-worker :thread-api/export-edn
  48. (state/get-current-repo)
  49. {:export-type :graph-ontology})
  50. pull-data (with-out-str (pprint/pprint result))]
  51. (when-not (:export-edn-error result)
  52. (.writeText js/navigator.clipboard pull-data)
  53. (println pull-data)
  54. (js/console.log (str "Exported " (count (:classes result)) " classes and "
  55. (count (:properties result)) " properties"))
  56. (notification/show! "Copied graphs's ontology data!" :success))))
  57. ;; Copied from handler.export
  58. (defn- file-name [repo extension]
  59. (-> (string/replace repo config/local-db-prefix "")
  60. (string/replace #"^/+" "")
  61. (str "_" (quot (util/time-ms) 1000))
  62. (str "." (string/lower-case (name extension)))))
  63. (defn export-repo-as-db-edn!
  64. [repo]
  65. (p/let [result (state/<invoke-db-worker :thread-api/export-edn
  66. (state/get-current-repo)
  67. {:export-type :graph
  68. :graph-options {:include-timestamps? true}})
  69. pull-data (with-out-str (pprint/pprint result))]
  70. (when-not (:export-edn-error result)
  71. (let [data-str (some->> pull-data
  72. js/encodeURIComponent
  73. (str "data:text/edn;charset=utf-8,"))
  74. filename (file-name repo :edn)]
  75. (when-let [anchor (gdom/getElement "download-as-db-edn")]
  76. (.setAttribute anchor "href" data-str)
  77. (.setAttribute anchor "download" filename)
  78. (.click anchor))))))