user.cljs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. (ns frontend.handler.user
  2. (:require [frontend.util :as util :refer-macros [profile]]
  3. [frontend.state :as state]
  4. [frontend.db :as db]
  5. [frontend.idb :as idb]
  6. [frontend.config :as config]
  7. [frontend.storage :as storage]
  8. [promesa.core :as p]
  9. [goog.object :as gobj]
  10. [frontend.handler.notification :as notification]
  11. [frontend.handler.config :as config-handler]
  12. [lambdaisland.glogi :as log])
  13. (:import [goog.format EmailAddress]))
  14. (defn email? [v]
  15. (and v
  16. (.isValid (EmailAddress. v))))
  17. (defn set-email!
  18. [email]
  19. (when (email? email)
  20. (util/post (str config/api "email")
  21. {:email email}
  22. (fn [result]
  23. (db/transact! [{:me/email email}])
  24. (swap! state/state assoc-in [:me :email] email))
  25. (fn [error]
  26. (notification/show! "Email already exists!"
  27. :error)))))
  28. (defn set-cors!
  29. [cors-proxy]
  30. (util/post (str config/api "cors_proxy")
  31. {:cors-proxy cors-proxy}
  32. (fn [result]
  33. (db/transact! [{:me/cors_proxy cors-proxy}])
  34. (swap! state/state assoc-in [:me :cors_proxy] cors-proxy))
  35. (fn [error]
  36. (notification/show! "Set cors proxy failed." :error)
  37. (js/console.dir error))))
  38. (defn set-preferred-format!
  39. [format]
  40. (when format
  41. (config-handler/set-config! :preferred-format format)
  42. (state/set-preferred-format! format)
  43. (when (:name (:me @state/state))
  44. (when (state/logged?)
  45. (util/post (str config/api "set_preferred_format")
  46. {:preferred_format (name format)}
  47. (fn [_result]
  48. (notification/show! "Format set successfully!" :success))
  49. (fn [_e]))))))
  50. (defn set-preferred-workflow!
  51. [workflow]
  52. (when workflow
  53. (config-handler/set-config! :preferred-workflow workflow)
  54. (state/set-preferred-workflow! workflow)
  55. (when (:name (:me @state/state))
  56. (util/post (str config/api "set_preferred_workflow")
  57. {:preferred_workflow (name workflow)}
  58. (fn [_result]
  59. (notification/show! "Workflow set successfully!" :success))
  60. (fn [_e])))))
  61. (defn sign-out!
  62. ([]
  63. (sign-out! true))
  64. ([confirm?]
  65. (when (or (not confirm?)
  66. (js/confirm "Your local notes will be completely removed after signing out. Continue?"))
  67. (->
  68. (idb/clear-local-storage-and-idb!)
  69. (p/catch (fn [e]
  70. (println "sign out error: ")
  71. (js/console.dir e)))
  72. (p/finally (fn []
  73. (set! (.-href js/window.location) "/logout")))))))
  74. (defn delete-account!
  75. []
  76. (p/let [_ (idb/clear-local-storage-and-idb!)]
  77. (util/delete (str config/api "account")
  78. (fn []
  79. (sign-out! false))
  80. (fn [error]
  81. (log/error :user/delete-account-failed error)))))