From 7c586ec36698cf64bd735feb09ef1f402cdb8c58 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 15 Feb 2021 18:35:48 +0800 Subject: [PATCH] feat: delete account --- src/main/frontend/components/settings.cljs | 33 +++++++++++++++++++++- src/main/frontend/dicts.cljs | 14 ++++++--- src/main/frontend/handler/user.cljs | 33 +++++++++++++++------- 3 files changed, 65 insertions(+), 15 deletions(-) diff --git a/src/main/frontend/components/settings.cljs b/src/main/frontend/components/settings.cljs index eb8d71cec..65195f41c 100644 --- a/src/main/frontend/components/settings.cljs +++ b/src/main/frontend/components/settings.cljs @@ -111,6 +111,25 @@ (util/stop e))} svg/external-link " release channel"]])])])) +(rum/defc delete-account-confirm + [close-fn] + (rum/with-context [[t] i18n/*tongue-context*] + [:div + (ui/admonition + :important + [:p.text-gray-700 (t :user/delete-account-notice)]) + [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse + [:span.flex.w-full.rounded-md.shadow-sm.sm:ml-3.sm:w-auto + [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5 + {:type "button" + :on-click user-handler/delete-account!} + (t :user/delete-account)]] + [:span.mt-3.flex.w-full.rounded-md.shadow-sm.sm:mt-0.sm:w-auto + [:button.inline-flex.justify-center.w-full.rounded-md.border.border-gray-300.px-4.py-2.bg-white.text-base.leading-6.font-medium.text-gray-700.shadow-sm.hover:text-gray-500.focus:outline-none.focus:border-blue-300.focus:shadow-outline-blue.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5 + {:type "button" + :on-click close-fn} + "Cancel"]]]])) + (rum/defcs settings < rum/reactive [] (let [preferred-format (state/get-preferred-format) @@ -329,4 +348,16 @@ :on-click #(state/set-developer-mode! (not developer-mode?)))]]] [:br] - (t :settings-page/developer-mode-desc)]]]))) + (t :settings-page/developer-mode-desc) + + [:hr] + + (when logged? + [:div.sm:grid.sm:grid-cols-3.sm:gap-4.sm:items-start.sm:pt-5 + [:label.block.text-sm.font-medium.leading-5.sm:mt-px.sm:pt-2.opacity-70.text-red-600 + {:for "delete account"} + (t :user/delete-account)] + [:div.mt-1.sm:mt-0.sm:col-span-2 + [:div.max-w-lg.rounded-md.shadow-sm.sm:max-w-xs + (ui/button (t :user/delete-your-account) + :on-click #(state/set-modal! delete-account-confirm))]]])]]]))) diff --git a/src/main/frontend/dicts.cljs b/src/main/frontend/dicts.cljs index c394ee260..78b9f25fa 100644 --- a/src/main/frontend/dicts.cljs +++ b/src/main/frontend/dicts.cljs @@ -341,8 +341,11 @@ title: How to take dummy notes? :dark "Dark" :remove-background "Remove background" :open "Open" - :open-a-directory "Open a local directory"} - + :open-a-directory "Open a local directory" + :user/delete-account "Delete account" + :user/delete-your-account "Delete your account" + :user/delete-account-notice "All your published pages on logseq.com will be deleted."} + :de {:help/about "Über Logseq" :help/bug "Fehlerbericht" :help/feature "Feature-Anfrage" @@ -571,7 +574,7 @@ title: How to take dummy notes? :remove-background "Hintergrund entfernen" :open "Öffnen" :open-a-directory "Öffne ein lokales Verzeichnis"} - + :fr {:help/about "A propos de Logseq" :help/bug "Signaler une anomalie" :help/feature "Demander une fonctionnalité" @@ -1055,7 +1058,10 @@ title: How to take dummy notes? :dark "暗黑" :remove-background "去除背景" :open "打开" - :open-a-directory "打开本地文件夹"} + :open-a-directory "打开本地文件夹" + :user/delete-account "删除帐号" + :user/delete-your-account "删除你的帐号" + :user/delete-account-notice "你在 logseq.com 发布的页面(假如有的话)也会被删除。"} :zh-Hant {:on-boarding/title "你好,歡迎使用 Logseq!" :on-boarding/sharing "分享" diff --git a/src/main/frontend/handler/user.cljs b/src/main/frontend/handler/user.cljs index c1ee29753..2cbcc3cc4 100644 --- a/src/main/frontend/handler/user.cljs +++ b/src/main/frontend/handler/user.cljs @@ -8,7 +8,8 @@ [promesa.core :as p] [goog.object :as gobj] [frontend.handler.notification :as notification] - [frontend.handler.config :as config-handler]) + [frontend.handler.config :as config-handler] + [lambdaisland.glogi :as log]) (:import [goog.format EmailAddress])) (defn email? [v] @@ -63,12 +64,24 @@ (fn [_e]))))) (defn sign-out! - [_e] - (when (js/confirm "Your local notes will be completely removed after signing out. Continue?") - (-> - (idb/clear-local-storage-and-idb!) - (p/catch (fn [e] - (println "sign out error: ") - (js/console.dir e))) - (p/finally (fn [] - (set! (.-href js/window.location) "/logout")))))) + ([] + (sign-out! true)) + ([confirm?] + (when (or (not confirm?) + (js/confirm "Your local notes will be completely removed after signing out. Continue?")) + (-> + (idb/clear-local-storage-and-idb!) + (p/catch (fn [e] + (println "sign out error: ") + (js/console.dir e))) + (p/finally (fn [] + (set! (.-href js/window.location) "/logout"))))))) + +(defn delete-account! + [] + (p/let [_ (idb/clear-local-storage-and-idb!)] + (util/delete (str config/api "account") + (fn [] + (sign-out! false)) + (fn [error] + (log/error :user/delete-account-failed error)))))